📢 转载信息
原文作者:Prashant Patel, Ainesh Sootha, and Sandeep Akhouri
Amazon Bedrock 自定义模型导入现已支持采用开放权重的 OpenAI 模型,其中包括具有 200 亿和 1200 亿参数的 GPT-OSS 变体。GPT-OSS 模型提供了推理能力,可与 OpenAI 聊天补全 API 配合使用。通过保持对 OpenAI API 的完全兼容性,组织可以将其现有应用程序迁移到 AWS,从而获得企业级的安全性、可扩展性和成本控制。
在本文中,我们将演示如何使用自定义模型导入在 Amazon Bedrock 上部署 GPT-OSS-20B 模型,同时与您当前的应用程序保持完整的 API 兼容性。
Amazon Bedrock 自定义模型导入概述
Amazon Bedrock 自定义模型导入允许您将定制的模型带入与访问基础模型 (FM) 相同的无服务器环境中。您可以为所有内容获得一个统一的 API;您无需处理多个端点或管理单独的基础设施。
要使用此功能,请将您的模型文件上传到 Amazon Simple Storage Service (Amazon S3),然后通过 Amazon Bedrock 控制台启动导入。AWS 将负责繁重的工作,包括根据需求预置 GPU、配置推理服务器以及自动扩展。您可以专注于您的应用程序,而 AWS 则负责管理基础设施。
GPT-OSS 模型支持 OpenAI 聊天补全 API,包括消息数组、角色定义(系统、用户或助手)以及带有代币使用指标的标准响应结构。您可以将应用程序指向 Amazon Bedrock 端点,它们将无需对代码库进行重大更改即可正常工作。
GPT-OSS 模型概述
GPT-OSS 模型是 OpenAI 自 GPT-2 以来发布的第一个开放权重语言模型,根据 Apache 2.0 许可发布。您可以免费下载、修改和使用它们,包括用于商业应用。这些模型的重点是推理、工具使用和高效部署。请根据您的需求选择合适的模型:
- GPT-OSS-20B(210 亿参数) – 此模型非常适合对速度和效率要求最高的应用程序。尽管它有 210 亿个参数,但每个代币只激活 36 亿个参数,因此它可以在仅具有 16 GB 内存的边缘设备上流畅运行。它拥有 24 层、32 个专家(每个代币激活 4 个)和一个 128k 的上下文窗口,性能与 OpenAI 的 o3-mini 相当,同时可以本地部署以实现更快的响应时间。
- GPT-OSS-120B(1170 亿参数) – 专为复杂的推理任务(如编码、数学和智能体工具使用)而构建,每个代币激活 51 亿个参数。它拥有 36 层、128 个专家(每个代币激活 4 个)和一个 128k 的上下文窗口,性能与 OpenAI 的 o4-mini 相当,同时可以在单个 80GB GPU 上高效运行。
这两个模型都使用专家混合 (MoE) 架构——模型的子集(专家)处理不同类型的任务,每个请求只激活最相关的专家。这种方法在保持计算成本可控的同时,为您提供了强大的性能。
了解 GPT-OSS 模型格式
当您从 Hugging Face 下载 GPT-OSS 模型时,您会获得协同工作的几种文件类型:
- 权重文件 (.safetensors) – 实际的模型参数
- 配置文件 (config.json) – 定义模型工作方式的设置
- 分词器文件 – 处理文本
- 索引文件 (model.safetensors.index.json) – 将权重数据映射到特定文件
索引文件需要特定的结构才能与 Amazon Bedrock 一起工作。它必须在根级别包含一个 metadata 字段。这个字段可以为空 ({}),也可以包含总模型大小(文本模型的总大小必须小于 200 GB)。
来自 Hugging Face 的模型有时会包含 Amazon Bedrock 不支持的额外元数据字段,例如 total_parameters。在导入之前,您必须删除这些字段。正确的结构应如下所示:
{
"metadata": {},
"weight_map": {
"lm_head.weight": "model-00009-of-00009.safetensors",
...
}
}
确保在启动 Amazon S3 上传之前排除 metal 目录。
解决方案概述
在本文中,我们将通过 Amazon Bedrock 自定义模型导入来完成完整的部署过程。我们使用的是 Tonic/med-gpt-oss-20b 模型,它是 OpenAI GPT-OSS-20B 的微调版本,专门针对医疗推理和指令遵循进行了优化。
部署过程涉及四个主要步骤:
- 从 Hugging Face 下载模型文件并为 AWS 准备它们。
- 将模型文件上传到 Amazon S3。
- 使用 Amazon Bedrock 自定义模型导入进行导入,将模型引入 Amazon Bedrock。
- 使用与 OpenAI 兼容的 API 调用来调用您的模型,以测试您的部署。
下图说明了部署的工作流程。

先决条件
在开始部署 GPT-OSS 模型之前,请确保您具备以下条件:
- 具有适当权限的有效 AWS 帐户
- AWS 身份和访问管理 (IAM) 权限,用于:
- 在 Amazon Bedrock 中创建模型导入作业
- 将文件上传到 Amazon S3
- 部署后调用模型
- 使用自定义模型导入服务角色
- 您目标 AWS 区域中的一个 S3 存储桶
- 大约 40 GB 的本地磁盘空间用于模型下载
- 对美国东部 1(弗吉尼亚北部)区域的访问权限(GPT-OSS 基于自定义模型的要求)
- 已安装 AWS 命令行界面 (AWS CLI) 2.x 版本
- Hugging Face CLI(使用
pip install -U "huggingface_hub[cli]"安装)
下载并准备模型文件
要使用启用了快速传输的 Hugging Face Hub 库下载 GPT-OSS 模型,请使用以下代码:
import os
os.environ['HF_HUB_ENABLE_HF_TRANSFER'] = '1'
from huggingface_hub import snapshot_download local_dir = snapshot_download(
repo_id="Tonic/med-gpt-oss-20b",
local_dir="./med-gpt-oss-20b",
)print(f"Download complete! Model saved to: {local_dir}")
下载完成后(对于 40 GB 文件需要 10-20 分钟),验证 model.safetensors.index.json 文件的结构。如有需要,请对其进行编辑以确保存在 metadata 字段(可以为空):
{
"metadata": {},
"weight_map": {
"lm_head.weight": "model-00009-of-00009.safetensors",
...
}
} ec2-user@ip-XYZ ~/gptoss/med-gpt-oss-20b ls -lah
total 39G
drwxr-xr-x. 3 ec2-user ec2-user 16K Nov 10 19:38 .
drwxr-xr-x. 3 ec2-user ec2-user 44 Nov 10 21:31 ..
drwxr-xr-x. 3 ec2-user ec2-user 25 Nov 10 18:57 .cache
-rw-r--r--. 1 ec2-user ec2-user 17K Nov 10 18:57 chat_template.jinja
-rw-r--r--. 1 ec2-user ec2-user 1.6K Nov 10 18:57 config.json
-rw-r--r--. 1 ec2-user ec2-user 160 Nov 10 18:57 generation_config.json
-rw-r--r--. 1 ec2-user ec2-user 1.6K Nov 10 18:57 .gitattributes
-rw-r--r--. 1 ec2-user ec2-user 4.2G Nov 10 18:57 model-00001-of-00009.safetensors
-rw-r--r--. 1 ec2-user ec2-user 4.6G Nov 10 18:57 model-00002-of-00009.safetensors
-rw-r--r--. 1 ec2-user ec2-user 4.6G Nov 10 18:57 model-00003-of-00009.safetensors
-rw-r--r--. 1 ec2-user ec2-user 4.6G Nov 10 18:57 model-00004-of-00009.safetensors
-rw-r--r--. 1 ec2-user ec2-user 4.6G Nov 10 18:57 model-00005-of-00009.safetensors
-rw-r--r--. 1 ec2-user ec2-user 4.6G Nov 10 18:57 model-00006-of-00009.safetensors
-rw-r--r--. 1 ec2-user ec2-user 4.6G Nov 10 18:57 model-00007-of-00009.safetensors
-rw-r--r--. 1 ec2-user ec2-user 4.6G Nov 10 18:57 model-00008-of-00009.safetensors
-rw-r--r--. 1 ec2-user ec2-user 2.6G Nov 10 18:57 model-00009-of-00009.safetensors
-rw-r--r--. 1 ec2-user ec2-user 33K Nov 10 19:38 model.safetensors.index.json
-rw-r--r--. 1 ec2-user ec2-user 5.4K Nov 10 18:57 README.md
-rw-r--r--. 1 ec2-user ec2-user 440 Nov 10 18:57 special_tokens_map.json
-rw-r--r--. 1 ec2-user ec2-user 4.2K Nov 10 18:57 tokenizer_config.json
-rw-r--r--. 1 ec2-user ec2-user 27M Nov 10 18:57 tokenizer.json
将模型文件上传到 Amazon S3
在导入模型之前,您必须将模型文件存储在 Amazon Bedrock 可以访问的 S3 存储桶中。请完成以下步骤:
- 在 Amazon S3 控制台中,在导航窗格中选择 存储桶。
- 创建一个新存储桶或打开一个现有存储桶。
- 上传您的模型文件。
或者,您可以使用 AWS CLI 将文件上传到目标 Amazon Bedrock 区域的 S3 存储桶中:
aws s3 sync ./med-gpt-oss-20b/ s3://amzn-s3-demo-bucket/med-gpt-oss-20b/
40 GB 的上传通常需要 5-10 分钟才能完成。验证文件是否已上传:
aws s3 ls s3://amzn-s3-demo-bucket/med-gpt-oss-20b/ --human-readable
以下屏幕截图显示了 S3 存储桶中文件的示例。

记下您的 S3 URI(例如,s3://amzn-s3-demo-bucket/med-gpt-oss-20b/)以供导入作业使用。
输出文件使用 S3 存储桶的加密配置进行加密。这些文件将根据您设置 S3 存储桶的方式,使用 SSE-S3 服务器端加密或 AWS Key Management Service (AWS KMS) SSE-KMS 加密进行加密。
使用 Amazon Bedrock 自定义导入导入模型
现在您的模型文件已上传到 Amazon S3,您可以将模型导入 Amazon Bedrock,以便对其进行处理并用于推理。完成以下步骤:
- 在 Amazon Bedrock 控制台中,在导航窗格中选择 导入的模型。
- 选择 导入模型。
- 对于 模型名称,输入
gpt-oss-20b。 - 对于 模型导入源,选择 Amazon S3 存储桶。
- 对于 S3 位置,输入
s3://amzn-s3-demo-bucket/med-gpt-oss-20b/。 - 对于 服务访问,选择 创建并使用新的服务角色。Amazon Bedrock 控制台会自动生成一个具有正确信任关系和 Amazon S3 读取权限的角色。
- 选择 导入模型 开始导入作业。

要使用 AWS CLI,请使用以下代码:
aws bedrock create-model-import-job
--job-name "gpt-oss-20b-import-$(date +%Y%m%d-%H%M%S)"
--imported-model-name "gpt-oss-20b"
--role-arn "arn:aws:iam::YOUR-ACCOUNT-ID:role/YOUR-ROLE-NAME"
--model-data-source "s3DataSource={s3Uri=s3://amzn-s3-demo-bucket/med-gpt-oss-20b/}"
对于 20B 参数模型,模型导入通常需要 10-15 分钟才能完成。您可以在 Amazon Bedrock 控制台或使用 AWS CLI 监控进度。完成后,记下您的 importedModelArn,您将使用它来调用模型。
使用与 OpenAI 兼容的 API 调用模型
模型导入完成后,您可以使用熟悉的 OpenAI 聊天补全 API 格式对其进行测试,以验证其是否按预期工作:
- 创建一个名为
test-request.json的文件,其中包含以下内容:
{
"messages": [
{
"role": "system",
"content": "You are a helpful AI assistant."
},
{
"role": "user",
"content": "What are the common symptoms of Type 2 Diabetes?"
}
],
"max_tokens": 500,
"temperature": 0.7
}
- 使用 AWS CLI 将请求发送到导入的模型端点:
aws bedrock-runtime invoke-model
--model-id "arn:aws:bedrock:us-east-1:YOUR-ACCOUNT-ID:imported-model/MODEL-ID"
--body file://test-request.json
--cli-binary-format raw-in-base64-out
response.json
cat response.json | jq '.'
响应以标准的 OpenAI 格式返回:
{
"id": "chatcmpl-f06adcc78daa49ce9dd2c58f616bad0c",
"object": "chat.completion",
"created": 1762807959,
"model": "YOUR-ACCOUNT-ID-MODEL-ID",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Type 2 Diabetes often presents with a range of symptoms...",
"refusal": null,
"function_call": null,
"tool_calls": []
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 98,
"completion_tokens": 499,
"total_tokens": 597
}
}
响应结构与 OpenAI 的格式完全匹配——choices 包含响应,usage 提供代币计数,finish_reason 指示完成状态。现有的 OpenAI 响应解析代码无需修改即可工作。
该模型的一个强大优势是其透明度。reasoning_content 字段为我们提供了模型在生成最终响应之前其内部推理过程的信息。这种级别的透明度在闭源 API 中是不存在的。
清理
完成后,清理资源以避免不必要的费用:
aws bedrock delete-imported-model --model-identifier "arn:aws:bedrock:us-east-1:ACCOUNT:imported-model/MODEL-ID" aws s3 rm s3://amzn-s3-demo-bucket/med-gpt-oss-20b/ --recursive
如果您不再需要 IAM 角色,请使用 IAM 控制台将其删除。
从 OpenAI 迁移到 Amazon Bedrock
从 OpenAI 迁移所需的代码更改最少——只有调用方法会改变,而消息结构保持不变。
对于 OpenAI,请使用以下代码:
import openai
response = openai.ChatCompletion.create(model="....", messages=[...])
对于 Amazon Bedrock,请使用以下代码:
import boto3, json
bedrock = boto3.client('bedrock-runtime')
response = bedrock.invoke_model(
modelId='arn:aws:bedrock:us-east-1:ACCOUNT:imported-model/MODEL-ID',
body=json.dumps({"messages": [...]})
)
迁移是直接的,您将获得可预测的成本、更好的数据隐私以及根据您的特定需求微调模型的潜力。
最佳实践
请考虑以下最佳实践:
- 文件验证 – 上传前,验证
model.safetensors.index.json是否具有正确的元数据结构,引用的 safetensors 文件是否存在,并且分词器是否受支持。本地验证可以节省导入重试时间。 - 安全性 – 在 Amazon Bedrock 控制台上,自动创建具有最小权限角色的 IAM 角色。对于多个模型,使用单独的 S3 前缀来保持隔离。
- 版本控制 – 使用描述性的 S3 路径(
gpt-oss-20b-v1.0/)或带日期的导入作业名称来跟踪部署。
定价
您需要为运行导入到 Amazon Bedrock 的自定义模型所产生的推理付费。有关更多详细信息,请参阅 计算运行自定义模型的成本和 Amazon Bedrock 定价。
结论
在本文中,我们展示了如何使用自定义模型导入在 Amazon Bedrock 上部署 GPT-OSS 模型,同时保持与 OpenAI API 的完全兼容性。现在,您可以以最少的代码更改将现有应用程序迁移到 AWS,并获得企业级优势,包括完全的模型控制、微调能力、可预测的定价和增强的数据隐私。
准备好开始了吗?以下是您的后续步骤:
- 选择您的模型大小 – 从 20B 模型开始以获得更快的响应,或使用 120B 变体来处理复杂的推理任务
- 设置您的环境 – 确保您拥有必需的 AWS 权限和 S3 存储桶访问权限
- 尝试 Amazon Bedrock 控制台 – 使用 Amazon Bedrock 控制台导入您的第一个 GPT-OSS 模型
- 探索高级功能 – 在基本设置工作后,考虑使用您专有的数据进行微调
Amazon Bedrock 自定义模型导入在多个区域可用,并且支持将很快扩展到其他区域。有关最新信息,请参阅 Amazon Bedrock 中按 AWS 区域划分的功能支持。GPT-OSS 模型最初将在美国东部 1(弗吉尼亚北部)区域提供。
有任何问题或反馈?请通过 AWS re:Post for Amazon Bedrock 联系我们的团队——我们很想听听您的体验。
作者简介
Prashant Patel 是 AWS Bedrock 的高级软件开发工程师。他热衷于为企业应用程序扩展大型语言模型。在加入 AWS 之前,他曾在 IBM 从事在 Kubernetes 上部署大规模 AI/ML 工作负载方面的工作。Prashant 拥有纽约大学坦登工程学院的硕士学位。在工作之余,他喜欢旅行和与他的狗玩耍。
Ainesh Sootha 是 AWS 的软件开发工程师。他热衷于性能优化和为企业应用程序扩展大型语言模型。在加入 AWS Bedrock 之前,他从事亚马逊“Just Walk Out”技术的身份验证系统工作。Ainesh 拥有普渡大学计算机工程学士学位。在工作之余,他喜欢弹吉他和读书。
Sandeep Akhouri 是一位经验丰富的产品和上市 (GTM) 领导者,在产品管理、工程和上市方面拥有超过 20 年的经验。在他目前的职位之前,Sandeep 在领先的技术公司(包括 Splunk、KX Systems、Hazelcast 和 Software AG)领导产品管理工作,构建AI/ML 产品。他对智能体 AI、模型定制以及利用生成式 AI 驱动实际影响充满热情。
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区