Amazon Bedrock Workshop全球网络优化:Route 53与推理服务路由
你是否还在为跨区域部署Amazon Bedrock推理服务而烦恼?是否因流量突增导致服务响应延迟甚至中断?本文将为你提供一站式解决方案,通过Route 53与推理服务路由的深度整合,实现全球网络优化,提升服务可用性和性能。读完本文,你将掌握如何利用推理配置文件(Inference Profiles)实现智能路由、如何与Route 53协同工作以及如何监控和优化全球部署的Bedrock服务。
跨区域推理:突破地域限制的智能路由
在全球化部署中,Amazon Bedrock的跨区域推理功能为用户提供了前所未有的灵活性和可靠性。推理配置文件(Inference Profiles)作为一项托管功能,允许你在无需复杂设置的情况下实现跨区域推理,智能路由流量以应对峰值负载,确保最佳可用性和性能。
推理配置文件的核心优势
推理配置文件带来了多项关键优势,使其成为全球部署的理想选择:
- 跨区域容量访问:允许生成式AI工作负载根据需求扩展到不同区域的容量
- 区域无关模型:访问与区域无关的模型以实现更高吞吐量
- 流量突发弹性:增强对流量突发的弹性应对能力
- 预定义区域集选择:能够在预定义的区域集之间进行选择,以适应应用需求
- 现有API兼容性:与现有API兼容,无需大规模重构
- 零额外成本:不增加额外费用,保持与源区域相同的模型定价
这些优势使得开发人员可以专注于构建差异化应用逻辑,而不必担心底层基础设施的复杂性。
推理配置文件的两种模式
Amazon Bedrock的跨区域推理提供两种主要模式,以适应不同的应用场景:
1. 源区域基础模型模式
在此模式下,推理配置文件仅为源区域中存在的模型配置。系统会实现故障转移机制,允许请求在源区域繁忙或达到配额限制时重新路由到推理配置文件中配置的其他区域。Amazon Bedrock会实时智能检查哪个区域有冗余容量可用,以确定请求的最佳路由。
需要注意的是,如果源区域没有某个特定模型可用,则无法通过跨区域推理功能在其他区域访问该模型。
2. 推理配置文件可用模式
部分精选模型通过跨区域推理功能提供,Amazon Bedrock会抽象掉区域细节,自动管理托管和推理路由。这些基础模型存在于预定义的区域集中,开发人员可以构建与区域设置无关的应用程序,从而实现可靠的吞吐量、访问领先基础模型以及吞吐量的可扩展性。
实践指南:使用推理配置文件
使用推理配置文件与使用基础模型的方式类似,都是通过模型ID或ARN来引用。推理配置文件也有自己的ID和ARN,区别在于前缀。推理配置文件的模型ID通常以区域前缀(如"us."或"eu.")开头,以便识别。在ARN中,区别体现在从": ::foundation-model/ "变为": ::inference-profile/ . "。
通过Converse API使用推理配置文件
Amazon Bedrock现在支持统一消息API(Converse API),提供无缝的应用程序构建体验。使用推理配置文件只需在API调用中指定相应的模型ID即可。
from time import time
system_prompt = "You are an expert on AWS services and always provide correct and concise answers."
input_message = "Should I be storing documents in Amazon S3 or EFS for cost effective applications?"
modelId = ('Foundation Model', 'anthropic.claude-3-haiku-20240307-v1:0')
inferenceProfileId = ('Inference Profile', 'us.anthropic.claude-3-haiku-20240307-v1:0')
for inference_type, id in [modelId, inferenceProfileId]:
start = time()
response = bedrock_runtime.converse(
modelId=id,
system=[{"text": system_prompt}],
messages=[{
"role": "user",
"content": [{"text": input_message}]
}]
)
end = time()
print(f"::{inference_type}::Response time: {int(end-start)} second(s)")
print(f"::model:id:{id}::Response time: {int(end-start)} second(s)")
print(f"::{inference_type}::Response output: {response['output']['message']['content']}")
你还可以使用完整的ARN代替模型ID:
inference_profile_id = "us.anthropic.claude-3-sonnet-20240229-v1:0"
inference_profile_arn = f"arn:aws:bedrock:{region_name}:{account_id}:inference-profile/{inference_profile_id}"
print(inference_profile_arn)
response = bedrock_runtime.converse(
modelId=inference_profile_arn,
system=[{"text": system_prompt}],
messages=[{
"role": "user",
"content": [{"text": input_message}]
}]
)
print(response['output']['message']['content'][0]['text'])
通过InvokeModel API使用推理配置文件
大多数生产环境中的生成式AI应用程序都基于InvokeModel API构建,第三方工具也广泛使用此API。跨区域推理功能同样兼容此API,并且支持Amazon Bedrock中的所有模型。
import json
body = json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 1024,
"temperature": 0.1,
"top_p": 0.9,
"system": system_prompt,
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": f"{input_message}",
}
]
}
]
})
accept = 'application/json'
contentType = 'application/json'
modelId = ('Foundation Model', 'anthropic.claude-3-sonnet-20240229-v1:0')
inferenceProfileId = ('Inference Profile', 'us.anthropic.claude-3-sonnet-20240229-v1:0')
for inference_type, id in [modelId, inferenceProfileId]:
start = time()
response = bedrock_runtime.invoke_model(body=body, modelId=id, accept=accept, contentType=contentType)
end = time()
response_body = json.loads(response.get('body').read())
print(f"::{inference_type}::Response time: {int(end-start)} second(s)")
print(f"::{inference_type}::Response output: {response_body['content'][0]['text']}")
与Route 53协同工作:全球流量管理
虽然Amazon Bedrock的推理配置文件已经提供了智能的跨区域路由能力,但与Amazon Route 53的结合可以进一步优化全球网络性能。Route 53作为AWS的DNS服务,可以根据地理位置、延迟、健康状况等因素将用户路由到最佳区域的Bedrock服务端点。
Route 53与推理配置文件的协同策略
- 地理位置路由:将用户请求路由到离他们最近的区域,减少网络延迟
- 延迟基础路由:根据实时网络延迟数据,将请求路由到响应最快的区域
- 故障转移路由:在主区域不可用时自动切换到备用区域
- 加权路由:可以将一定比例的流量路由到不同区域,用于A/B测试新模型或配置
通过将Route 53的智能路由策略与Bedrock的推理配置文件相结合,你可以构建一个真正全球化、高可用、低延迟的生成式AI应用架构。
实现架构
以下是一个典型的全球部署架构,结合了Route 53和Bedrock推理配置文件:
用户请求 → Route 53 (根据策略路由) → 区域API网关 → Lambda函数 → Bedrock推理配置文件 → 跨区域推理服务
在这个架构中,Route 53负责顶层的地理或性能感知路由,而Bedrock的推理配置文件则在区域级别提供进一步的优化和弹性。
与LangChain集成:简化开发流程
为了进一步简化开发流程,Amazon Bedrock可以与流行的开源框架LangChain无缝集成。以下是使用LangChain与Bedrock推理配置文件的示例:
安装依赖
!pip install --quiet langchain_aws langchain_community
使用ChatBedrockConverse
from langchain_aws import ChatBedrockConverse
messages = [
(
"system",
"You are a helpful assistant that shapes sentences into poetic form. Translate the user sentence.",
),
("human", "I love programming."),
]
llm = ChatBedrockConverse(
model='us.anthropic.claude-3-sonnet-20240229-v1:0',
temperature=0,
max_tokens=None,
client=bedrock_runtime,
)
print(llm.invoke(messages).content)
使用ChatBedrock与推理配置文件
from langchain_aws import ChatBedrock
messages = [
(
"system",
"You are a helpful assistant that shapes sentences into poetic form. Translate the user sentence.",
),
("human", "I love programming."),
]
model_parameter = {"temperature": 0.0, "top_p": .5, "max_tokens_to_sample": 200}
llm = ChatBedrock(
model_id='us.anthropic.claude-3-sonnet-20240229-v1:0',
model_kwargs=model_parameter,
beta_use_converse_api=True,
client=bedrock_runtime,
region_name='us-east-1'
)
print(llm.invoke(messages).content)
这些集成示例展示了如何轻松地将Bedrock的跨区域推理能力融入到现有的LangChain工作流中。
监控、日志和指标:确保最佳性能
使用跨区域推理时,请求可能会被路由到不同的区域。为了确保服务的透明度和可管理性,Amazon Bedrock提供了全面的监控和日志功能。
模型调用日志
当使用跨区域推理时,如果请求被重新路由,Bedrock模型调用日志会在JSON日志条目的inferenceRegion元素中提及使用的区域。这有助于跟踪请求的实际处理位置。
启用CloudWatch日志
以下代码片段演示了如何启用模型调用日志到CloudWatch日志组,并创建CloudWatch指标过滤器来选择和计数所有被路由到其他区域的模型调用:
import json
# 代码片段用于启用模型调用日志记录到CloudWatch日志组
# 并创建指标过滤器来监控跨区域推理请求
# 创建IAM角色,授予Bedrock将日志发送到CloudWatch的权限
iam = boto3.client('iam')
role_name = "BedrockCloudWatchLoggingRole"
assume_role_policy_document = json.dumps({
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "bedrock.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
})
try:
role = iam.create_role(
RoleName=role_name,
AssumeRolePolicyDocument=assume_role_policy_document,
Description="Allow Bedrock to log to CloudWatch"
)
# 附加策略以允许写入CloudWatch日志
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
iam.attach_role_policy(
RoleName=role_name,
PolicyArn=policy_arn
)
except iam.exceptions.EntityAlreadyExistsException:
role = iam.get_role(RoleName=role_name)
# 启用Bedrock模型调用日志
bedrock_client.put_model_invocation_logging_configuration(
loggingConfig={
"cloudWatchConfig": {
"logGroupName": "/aws/bedrock/model-invocations",
"roleArn": role['Role']['Arn'],
"largeDataDeliveryS3Config": {
"bucketName": f"bedrock-logs-{account_id}-{region_name}",
"keyPrefix": "large-data-logs/"
}
},
"s3Config": {
"bucketName": f"bedrock-logs-{account_id}-{region_name}",
"keyPrefix": "model-invocations/"
},
"textDataDeliveryEnabled": True
}
)
# 创建CloudWatch指标过滤器来跟踪跨区域调用
cloudwatch = boto3.client('cloudwatch')
log_group_name = "/aws/bedrock/model-invocations"
metric_filter_name = "CrossRegionInvocations"
metric_namespace = "BedrockMetrics"
metric_name = "CrossRegionInvocationsCount"
filter_pattern = '{ $.inferenceRegion != "" && $.inferenceRegion != $.region }'
cloudwatch.put_metric_filter(
logGroupName=log_group_name,
filterName=metric_filter_name,
filterPattern=filter_pattern,
metricTransformations=[
{
"metricName": metric_name,
"metricNamespace": metric_namespace,
"metricValue": "1",
"defaultValue": 0
}
]
)
这段代码创建了一个新的IAM角色,启用了Bedrock模型调用日志,并创建了一个CloudWatch指标过滤器来计算所有被路由到其他区域的模型调用。你可以根据需要调整此代码,为特定目标区域构建指标,并基于区域监控延迟。
最佳实践与性能优化
为了充分利用Amazon Bedrock的跨区域推理功能,结合Route 53的全球流量管理,以下是一些最佳实践和性能优化建议:
- 选择合适的推理配置文件:根据应用需求选择最适合的区域集和模型
- 合理设置超时和重试策略:考虑跨区域调用可能增加的延迟,适当调整超时设置
- 实施缓存策略:对于频繁重复的查询,考虑实施结果缓存以减少推理调用
- 监控区域性能:持续监控不同区域的性能指标,以便及时调整策略
- 定期测试故障转移:定期测试跨区域故障转移功能,确保在实际故障发生时能够正常工作
- 考虑数据驻留要求:注意不同地区的数据隐私法规,确保合规性
总结与展望
Amazon Bedrock的推理配置文件为构建全球分布式生成式AI应用提供了强大的基础。通过与Route 53的智能DNS路由相结合,你可以创建一个既具有高可用性又能提供低延迟体验的全球服务架构。
随着生成式AI技术的不断发展,我们可以期待Amazon Bedrock在跨区域推理和全球网络优化方面提供更多创新功能。未来可能会看到更精细的流量控制、更智能的路由算法以及与AWS全球网络基础设施的更深层次集成。
无论你是在构建企业级AI助手、内容生成平台还是智能客服系统,通过本文介绍的方法和最佳实践,你都能够构建一个真正全球化、高性能、高可用的生成式AI应用。
项目资源
- 官方文档:07_Cross_Region_Inference/Getting_started_with_Cross-region_Inference.ipynb
- 项目教程:README.md
- 跨区域推理示例:07_Cross_Region_Inference
- LangChain集成示例:06_OpenSource_examples/text-generation-with-langchain
希望本文能帮助你更好地理解和应用Amazon Bedrock的跨区域推理功能。如果你有任何问题或建议,欢迎在评论区留言讨论。别忘了点赞、收藏并关注我们,以获取更多关于Amazon Bedrock和生成式AI的实用教程和最佳实践!
下一期,我们将深入探讨如何使用Amazon CloudFront进一步优化全球内容分发,敬请期待!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



