AWS Machine Learning

在泰国、马来西亚、新加坡、印度尼西亚和台湾通过全球跨区域推理在 Amazon Bedrock 上访问 OpenAI GPT 模型

AWS发布教程,讲解如何在泰国、马来西亚、新加坡、印尼和台湾五个区域通过Amazon Bedrock的全球跨区域推理调用OpenAI GPT-6 Sol、Luna和Astra三款模型,涵盖Converse与OpenAI兼容API调用、IAM与SCP权限、配额管理及监控。三款模型均支持文本和图像输入、客户端工具调用与提示缓存,但Astra不接受none推理级别,部分区域需先手动激活。

The three global OpenAI GPT-6 inference profiles among the system-defined profiles in the Amazon Bedrock console.
配图来源 · AWS Machine Learning

当需求超过本地容量时,单区域推理可能会受到限流。泰国、马来西亚、新加坡、印度尼西亚和台湾的团队需要在该容量之外访问最新的 OpenAI 模型。 Amazon Bedrock 通过来自所有五个 AWS 区域的全球跨区域推理提供 OpenAI GPT-6 Sol 和 GPT-6 Luna,并通过亚太地区(新加坡)提供 GPT-6 Astra。本文向您展示如何配置调用、设置权限以及从源区域监控推理。

GPT-6 Sol、GPT-6 Luna 和 GPT-6 Astra 均可通过上述区域的全球跨区域推理在 bedrock-runtime 端点上使用。请参阅 Amazon Bedrock 用户指南中的 跨区域推理 。有关每个配置文件中源区域和目标区域的完整列表,请参阅 推理配置文件支持的区域和模型.

在本文中,我们介绍全球跨区域推理配置文件,并使用 Converse API、OpenAI 兼容 API 以及编码客户端从亚太地区(新加坡)调用它们。然后我们介绍 AWS Identity and Access Management (IAM) 和服务控制策略 (SCP) 配置、配额管理和监控。

OpenAI GPT-6 的全球跨区域推理配置文件

GPT-6 系列提供三个模型,每个模型都可通过全球跨区域推理使用。

  • GPT-6 Sol 为整周执行的复杂任务带来强大的推理和编码能力。
  • GPT-6 Luna 使专注且可重复的任务能够以高吞吐量执行。
  • GPT-6 Astra 处理复杂推理、编码和长文档工作。

所有三个模型都接受文本和图像输入、客户端工具使用以及提示缓存。它们在推理力度上有所不同。GPT-6 Sol 和 GPT-6 Luna 接受 none、low、medium、high、xhigh 和 max。GPT-6 Astra 接受相同的级别但除 none 之外。关于 GPT-6 Sol 和 GPT-6 Luna,请参阅 通过 Amazon Bedrock 上的 GPT-6 Sol 和 GPT-6 Luna,为日常工作带来更多智能。关于 GPT-6 Astra,请参阅 Take on your most ambitious work with GPT-6 Astra on Amazon Bedrock.

全球跨区域推理将请求路由到部署了该模型的受支持的商业 AWS 区域,使您能够广泛访问 Amazon Bedrock 容量。您可以通过传递全球跨区域推理配置文件 ID(代替模型 ID)来调用它。源区域是您发起 API 调用的地方。Amazon Bedrock 会选择目标区域进行处理。计费、配额跟踪、AWS CloudTrail 和 Amazon CloudWatch 都保留在您的源区域中。

下表列出了本文涉及的全球跨区域推理配置文件 ID 以及覆盖的源区域。

全球跨区域推理配置文件 源区域 目标区域

global.openai.gpt-6-sol

global.openai.gpt-6-luna

亚太地区(新加坡)ap-southeast-1

亚太地区(雅加达)ap-southeast-3

亚太地区(马来西亚)ap-southeast-5

亚太地区(泰国)ap-southeast-7

亚太地区(台北)ap-east-2

已部署该模型的支持的商用 AWS 区域
global.openai.gpt-6-astra 亚太地区(新加坡)ap-southeast-1 已部署该模型的支持的商用 AWS 区域

推理配置文件的可用性和区域支持会随着 AWS 新增区域和配置文件而变化,因此在构建之前请在模型卡片上确认这两项: GPT-6 Sol, GPT-6 Luna以及 GPT-6 Astra。有关每 token 的费率,请参阅 Amazon Bedrock 定价.

开始在 Amazon Bedrock 上使用 OpenAI 模型

先完成前提条件,然后通过 Converse API、OpenAI 兼容 API 或您现有的编码客户端调用三个配置文件中的任意一个。

前提条件

  1. 一个具有调用该配置文件权限的 IAM 身份。“安全性和权限”部分中的 IAM 策略仅授予这些示例所需的权限。
  2. 您的源区域已启用。只需启用您发起调用的区域。目标区域无需启用,它们运行在 Amazon Bedrock 托管容量上。新加坡(ap-southeast-1)是默认启用的区域。雅加达(ap-southeast-3)、马来西亚(ap-southeast-5)、泰国(ap-southeast-7)和台北(ap-east-2)是选择性启用区域,您必须先将其启用。更多信息,请参阅 在您的账户中启用或禁用 AWS 区域.
  3. 最新版本的 AWS SDK 或 CLI。OpenAI 兼容示例还需要 OpenAI SDK 和 Amazon Bedrock 令牌生成器。请使用以下命令安装: pip install boto3 openai aws-bedrock-token-generator.

Amazon Bedrock 控制台在系统定义的推理配置文件下列出全部三个全球跨区域推理配置文件。见图 1。

The three global OpenAI GPT-6 inference profiles among the system-defined profiles in the Amazon Bedrock console.

图 1:Amazon Bedrock 控制台系统定义配置文件中的三个全球 OpenAI GPT-6 推理配置文件

通过 Amazon Bedrock Runtime 调用 GPT-6 模型

每个模型在此终端节点上支持三种访问路径:Amazon Bedrock Converse API、OpenAI Responses API 和 OpenAI Chat Completions API。OpenAI 兼容 API 是通过 /openai/v1 路径调用的,而不是通过 AWS SDK,并且该终端节点接受 Signature Version 4 (SigV4) 或 Amazon Bedrock API 密钥。在所有情况下,都将全球跨区域推理配置文件 ID 作为 model 传入。

Converse API。 此示例从亚太地区(新加坡)调用 GPT-6 Sol 并记录响应。将 BEDROCK_PROFILE_ID 设置为 global.openai.gpt-6-luna 或 global.openai.gpt-6-astra 可切换模型,或调用 converse_stream 进行流式传输。

import logging
import os
import boto3

# AWS_REGION overrides this default, so set it to your source Region or unset it.
REGION = os.environ.get("AWS_REGION", "ap-southeast-1")
PROFILE_ID = os.environ.get("BEDROCK_PROFILE_ID", "global.openai.gpt-6-sol")
PROMPT = (
    "In three bullet points, explain when a workload should use "
    "cross-Region inference instead of calling a model in a single Region."
)

logging.basicConfig(format="%(levelname)s %(message)s")
log = logging.getLogger("bedrock-cris")
log.setLevel(logging.INFO)

client = boto3.client("bedrock-runtime", region_name=REGION)

# AccessDeniedException points at the IAM policy. ValidationException usually
# means the model ID is not a global cross-Region inference profile.
response = client.converse(
    modelId=PROFILE_ID,
    messages=[{"role": "user", "content": [{"text": PROMPT}]}],
    inferenceConfig={"maxTokens": 1024},
    # GPT-6 Sol and Luna accept none through max. GPT-6 Astra rejects none.
    additionalModelRequestFields={"reasoning": {"effort": "low"}},
)

# Any effort above none can prepend a reasoningContent block, so pick the text
# block by key rather than by position.
text = "".join(b["text"] for b in response["output"]["message"]["content"] if "text" in b)

log.info("Called %s from %s", PROFILE_ID, REGION)
log.info("Stop reason: %s", response["stopReason"])
log.info("Response:\n%s", text)

OpenAI Chat Completions API。 将 OpenAI SDK 指向区域终端节点并传入相同的配置文件 ID。

import logging
import os
from aws_bedrock_token_generator import provide_token
from openai import OpenAI

REGION = os.environ.get("AWS_REGION", "ap-southeast-1")
PROFILE_ID = os.environ.get("BEDROCK_PROFILE_ID", "global.openai.gpt-6-sol")
PROMPT = "List three uses for a message queue."

logging.basicConfig(format="%(levelname)s %(message)s")
log = logging.getLogger("bedrock-cris")
log.setLevel(logging.INFO)

# provide_token mints a short-term key from your AWS credentials, valid up to 12 hours.
client = OpenAI(
    base_url=f"https://bedrock-runtime.{REGION}.amazonaws.com/openai/v1",
    api_key=provide_token(region=REGION),
)

response = client.chat.completions.create(
    model=PROFILE_ID,
    messages=[{"role": "user", "content": PROMPT}],
    max_completion_tokens=256,
)

log.info("Called %s from %s", PROFILE_ID, REGION)
log.info("Response:\n%s", response.choices[0].message.content)

迁移现有 OpenAI 客户端时:

  • 在每个请求上设置 model 参数,包括引用先前响应的请求。
  • 使用受支持的工具类型: function, mcp, custom, namespace,以及 tool_search.
  • 直接在客户端中配置推理配置文件 ID,而不是查询模型端点。

设置 ChatGPT 桌面应用和 Codex CLI

ChatGPT 桌面应用和 Codex CLI 共享 ~/.codex/config.toml,因此一处更改即可同时覆盖两者。在两个内置的 Amazon Bedrock 提供程序中,只有 amazon-bedrock-runtime 接受推理配置文件。

model = "global.openai.gpt-6-astra"
model_provider = "amazon-bedrock-runtime"
[model_providers.amazon-bedrock-runtime.aws]
region = "ap-southeast-1"

SigV4 签名意味着无需轮换密钥。添加 profile = "<your-profile>" 对于非默认 profile,并显式设置 region ,因为客户端否则会回退到 AWS_REGION。将另一个 profile ID 替换 model 即可更换模型。

Codex 为这些 profile 报告 272,000 token 的上下文窗口,这是它自带的数值而非服务限制。可通过 model_context_window提高它。此配置需要 Codex CLI 0.148 或更高版本。

图 2 展示了应用中的结果。

The ChatGPT desktop app running GPT-6 Astra on Amazon Bedrock.

图 2:在 Amazon Bedrock 上运行 GPT-6 Astra 的 ChatGPT 桌面应用

安全与权限

Amazon Bedrock 提供了一系列推理控制手段。其中两项在此处很重要。AWS Identity and Access Management (IAM) 策略控制哪些角色可以调用哪些 profile,而服务控制策略(SCP)应用组织范围的控制,包括区域范围。本节涵盖这两者,以及请求数据的落地位置。

用于全局跨区域推理的 IAM 权限

要通过全局跨区域推理 profile 调用这些模型中的任何一个,您的 IAM 策略需要四条语句:

  1. 对源区域中推理 profile 和 project/default 资源的访问权限。
  2. 对源区域中基础模型的访问权限,范围限定在该推理 profile。
  3. 基础模型的区域无关 Amazon Resource Name (ARN), arn:aws:bedrock:::foundation-model/openai.gpt-6-sol,并将 aws:RequestedRegion 设置为 unspecified 以允许跨区域路由。
  4. bedrock:CallWithBearerToken 用于 API 密钥认证。

此 IAM 策略授予通过全局跨区域推理调用 GPT-6 Sol 的权限,来源为 ap-southeast-1调用 GPT-6 Sol 的权限。请将其中的 AWS 账户 ID 和 ap-southeast-1 替换为您的源区域。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "GrantGlobalCrisProfileAndProjectAccess",
      "Effect": "Allow",
      "Action": ["bedrock:InvokeModel"],
      "Resource": [
        "arn:aws:bedrock:ap-southeast-1:<ACCOUNT>:inference-profile/global.openai.gpt-6-sol",
        "arn:aws:bedrock:ap-southeast-1:<ACCOUNT>:project/default"
      ],
      "Condition": {
        "StringEquals": { "aws:RequestedRegion": "ap-southeast-1" }
      }
    },
    {
      "Sid": "GrantGlobalCrisInRegionModelAccess",
      "Effect": "Allow",
      "Action": ["bedrock:InvokeModel"],
      "Resource": ["arn:aws:bedrock:ap-southeast-1::foundation-model/openai.gpt-6-sol"],
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": "ap-southeast-1",
          "bedrock:InferenceProfileArn": "arn:aws:bedrock:ap-southeast-1:<ACCOUNT>:inference-profile/global.openai.gpt-6-sol"
        }
      }
    },
    {
      "Sid": "GrantGlobalCrisGlobalModelAccess",
      "Effect": "Allow",
      "Action": ["bedrock:InvokeModel"],
      "Resource": ["arn:aws:bedrock:::foundation-model/openai.gpt-6-sol"],
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": "unspecified",
          "bedrock:InferenceProfileArn": "arn:aws:bedrock:ap-southeast-1:<ACCOUNT>:inference-profile/global.openai.gpt-6-sol"
        }
      }
    },
    {
      "Sid": "AllowBearerTokenAuth",
      "Effect": "Allow",
      "Action": ["bedrock:CallWithBearerToken"],
      "Resource": "*"
    }
  ]
}

如果您使用流式传输(converse_stream 或 stream=True),请在前三条语句的 Action 中添加 bedrock:InvokeModelWithResponseStream 。Converse 授权为 bedrock:InvokeModel。如果您只使用 SigV4 凭证调用 Converse,则可去掉第四条语句。

要切换模型,请将 openai.gpt-6-sol 替换为 openai.gpt-6-luna 或 openai.gpt-6-astra 。完整参考请参阅 全球跨区域推理的 IAM 策略要求.

全球跨区域推理的服务控制策略注意事项

全球跨区域推理请求不携带区域名称。Amazon Bedrock 将 aws:RequestedRegion 设置为 unspecified,因此 SCP 中的区域允许列表会拒绝该调用,而且错误信息只指明策略类型,不指明是哪个策略。这是企业账户中首次调用失败的常见原因。

与其扩大允许列表,不如缩小例外范围。Amazon Bedrock 会在授权期间填充 bedrock:InferenceProfileArn 条件键,因此 SCP 可以允许这些配置文件,同时对其他所有内容保留区域控制。以下 SCP 正是这样做的。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyOutsideApprovedRegionsExceptBedrockInvoke",
      "Effect": "Deny",
      "NotAction": [
        "iam:*", "sts:*", "organizations:*", "account:*",
        "route53:*", "cloudfront:*", "waf:*", "wafv2:*", "shield:*",
        "support:*", "trustedadvisor:*", "health:*",
        "budgets:*", "ce:*", "cur:*", "tax:*", "billing:*",
        "bedrock:Invoke*"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": { "aws:RequestedRegion": ["ap-southeast-1"] }
      }
    },
    {
      "Sid": "DenyBedrockInferenceOutsideApprovedRegionsUnlessCris",
      "Effect": "Deny",
      "Action": ["bedrock:Invoke*"],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": { "aws:RequestedRegion": ["ap-southeast-1"] },
        "ArnNotLike": {
          "bedrock:InferenceProfileArn": [
            "arn:aws:bedrock:*:*:inference-profile/global.*"
          ]
        }
      }
    }
  ]
}

第一条声明对所有服务强制执行您的区域允许列表,Amazon Bedrock 推理除外。第二条声明拒绝在这些区域之外进行该推理,除非其通过全局跨区域推理配置文件路由。对于地理配置文件,请将其前缀(例如 inference-profile/us.*)添加到 ArnNotLike 列表中,因为地理请求携带真实的区域名称。请将您的源区域保留在允许列表中,并将您的组织使用的全局服务添加到 NotAction.

一种更粗暴的替代方法是将 unspecified 添加到您现有的允许列表中,这虽然有效,但会对所有其他服务开放相同的例外。有关可直接使用的策略文件,请参阅 aws-samples service-control-policy-examples 仓库.

数据保留与滥用检测

对于自动化的离线滥用检测,被分类器标记的流量由 AWS 保留最多 30 天,并以程序化方式处理。在跨区域推理下,该保留发生在目标区域,对于全局配置文件而言,即模型部署所在的任何受支持的 AWS 商用区域。符合条件的客户可以通过其 AWS 客户团队申请完全零数据保留。欲了解更多信息,请参阅 Amazon Bedrock 滥用检测 以及 数据保留.

如果您的组织有数据驻留要求,请尽早将此提交给您的风险与合规团队。请参阅这五个国家的 AWS 金融服务合规中心 国家/地区页面。我们建议您就与您的业务相关的要求的合规性获取您自己的建议。

配额管理

GPT-6 在 bedrock-runtime 上的配额以每分钟令牌数(TPM)计量,并针对您调用的源区域进行跟踪。输入和缓存写入令牌按 1:1 计算,每个输出令牌消耗 10 个配额令牌。例如,一个包含 2,000 个输入令牌和 1,000 个输出令牌的请求会消耗 12,000 个配额令牌。

Amazon Bedrock 会预先保留完整的 max_tokens ,因此请将其设置为接近您预期的补全量。一个配额涵盖 InvokeModel、Converse、Responses 和 Chat Completions。请在 Service Quotas 控制台 上从您的源区域查看并提高该配额。在生产环境之前,请尽早请求提高配额,并在 EstimatedTPMQuotaUsage 命名空间中 AWS/Bedrock 达到您分配额的 70–80 百分比时设置告警。请参阅 How tokens are counted in Amazon Bedrock 以及 Amazon Bedrock endpoints and quotas 以获取当前值。

监控与日志记录

您的运维界面保留在您的源区域中。 Amazon CloudWatch 指标、AWS CloudTrail 事件、模型调用日志、配额核算以及账单都保留在你发起调用的区域中。你按该区域的费率付费,而不是按处理区域的费率。

CloudTrail 会记录每个请求在哪里被处理。 AWS 将全局跨区域推理配置文件的目的地描述为其商业区域,而不是逐一列明。 GetInferenceProfile 返回的是与区域无关的模型 ARN 和源区域模型 ARN,而不是目的地列表。你的每个请求记录位于 additionalEventData.inferenceRegion 的 CloudTrail 中。此端点上的推理属于管理事件,默认记录且无额外费用。CloudTrail 事件历史保留 90 天,因此更长的时间范围需要跟踪(trail)或模型调用日志记录。使用以下命令检索 CloudTrail 事件。

aws cloudtrail lookup-events \
  --region ap-southeast-1 \
  --lookup-attributes AttributeKey=EventSource,AttributeValue=bedrock.amazonaws.com \
  --start-time <START> \
  --end-time <END> \
  --max-results 1 \
  --query 'Events[0].CloudTrailEvent' --output text | python3 -m json.tool

将时间窗口设置在你刚发起的调用附近,因为 CloudTrail 交付有几分钟的延迟。如果最近的事件是一次失败的调用,它会带有一个 errorCode 而没有 inferenceRegion。提高 --max-results 并选择一个不带 errorCode.

{
  "eventName": "Converse",
  "eventSource": "bedrock.amazonaws.com",
  "awsRegion": "ap-southeast-1",
  "managementEvent": true,
  "requestParameters": {
    "modelId": "global.openai.gpt-6-sol",
    "inferenceConfig": { "maxTokens": 1024 }
  },
  "additionalEventData": {
    "inferenceRegion": "us-east-1"
  }
}

的事件。指标和编码代理的使用情况保留在 CloudWatch 中。 在开发人员通过编码代理使用 GPT-6 的场景中,CloudWatch Coding Agent Insights 在 GenAI Observability 下添加了现成的仪表板,按用户、团队和成本中心细分 token 使用情况。这些代理原生发出 OpenTelemetry 指标。关于 Codex,请参阅 为 OpenAI Codex 设置 OpenTelemetry.

清理

本文添加了一个 IAM 策略,以及可选的 SCP 语句和日志记录目标。请分离或删除您附加的 IAM 策略,如果添加了 SCP 条目则将其还原。删除以下位置中的模型调用日志记录目标: Amazon Simple Storage Service (Amazon S3) 或 Amazon CloudWatch Logs(如果创建了的话),以避免产生存储费用。全局跨区域推理配置文件是系统定义的,因此没有需要删除的内容。

结论

本文展示了如何通过全球跨区域推理,从五个亚太源区域调用 GPT-6 Sol 和 GPT-6 Luna,并从亚太(新加坡)调用 GPT-6 Astra, bedrock-runtime。传入全局跨区域推理配置文件 ID 作为 model 参数,并按照本文配置 IAM 策略和 SCP 例外。同一端点也提供 OpenAI 兼容的 API,因此现有的 OpenAI 集成只需更改基础 URL 和密钥即可迁移过来。

要开始使用,请附加本文中的 IAM 策略,并通过它发送第一个请求 global.openai.gpt-6-sol。请将每分钟令牌配额设定为10倍的消耗速率,并在CloudTrail中确认 additionalEventData.inferenceRegion 显示在您的来电中。

更多信息请参阅 Amazon Bedrock 用户指南, 通过跨区域推理在多个AWS区域之间路由模型推理请求,以及 Amazon Bedrock 定价.

 


关于作者

原始出处

AWS Machine Learning

内容说明

原始发布及相关权利归来源方。

机器翻译 · 请以原文为准