随着组织在生产中扩展生成式 AI 工作负载,确保可靠的 GPU 计算已成为最持久的运营挑战之一。大型语言模型 (LLM) 和多模态架构需要特定的实例类型,当容量不可用时,端点在服务一个请求之前就会失败。
在 Amazon SageMaker AI 上构建实时推理端点意味着在创建时承诺使用单一实例类型。当该类型容量不足时,端点无法达到运行状态。您更新配置,选择不同的实例类型,然后重试,重复循环直到配置尝试成功。
今天,Amazon SageMaker AI 为新的和现有的推理端点引入了容量感知实例池。您定义优先级列表的实例类型,当容量在创建、扩展和缩减期间受到限制时,SageMaker AI 会自动遍历您的列表。您的端点可以在可用的 AI 基础设施上自动配置,无需手动干预。此功能适用于单模型端点、基于推理组件的端点和异步推理端点。
本文介绍了实例池的工作原理以及如何开始使用,无论是创建新端点还是迁移现有端点。
问题
当您将模型部署到 SageMaker AI 推理端点(无论是实时还是异步)时,您指定单一实例类型。如果该类型没有可用容量,端点创建失败。此限制出现在端点生命周期的每个阶段。
- 端点创建因容量而失败。当您首选的实例类型不可用时,SageMaker AI 返回容量不足错误。要获得运行中的端点,需要手动迭代替代方案,每次尝试都花费大量时间才能知道结果。
- 自动缩放无法增长群组。当扩展事件触发且您的实例类型容量不足时,自动缩放器会无限重试同一类型。流量持续增加,而端点保持在当前大小。
- 缩减没有优先级意识。使用单一实例类型,没有首选与回退硬件的概念。每个实例都可以被移除,没有区别。
- 可观测性聚合且不可操作。Amazon CloudWatch 指标在端点级别汇总。在调查延迟或容量问题时,指标表明有问题,但不知道是哪个实例类型导致的。
工作原理:基于优先级的实例池
您在端点配置中定义一个称为实例池的排序实例类型列表。每当容量受限时,SageMaker AI 会自动遍历该列表。
- 您的端点上线。SageMaker AI 首先尝试您的首选实例类型。如果容量不可用,它会立即尝试第二选择,然后是第三选择。无需手动重试。您的端点可在几分钟内在第一个可用的 AI 基础设施上达到 InService 状态。
- 您的端点保持运行。当自动缩放触发且您首选的实例类型受限时,SageMaker AI 会在优先级列表中的下一个可用类型上进行扩展,从而保持流量流动。
- 您的群组趋向于首选硬件。在缩减期间,SageMaker AI 首先移除最低优先级(回退)实例。在后续扩展事件中,它再次首先尝试最高优先级类型。随着首选硬件变得可用,您的群组自然地随时间向它回移,无需手动干预。
- 您看到一切。每个现有的 CloudWatch 指标现在都包含一个 InstanceType 维度,因此您可以跟踪单个端点内每个实例类型的延迟、吞吐量、GPU 利用率和实例计数。
要了解更多信息,请参阅 Amazon SageMaker AI 文档并探索 GitHub 上的示例笔记本。
每个实例类型的正确模型
回退实例类型通常在 GPU 内存、计算能力和架构上有所不同。为高内存多 GPU 实例优化的模型不一定能在较小的单 GPU 回退上运行。有两种方法可以将池列表中的每个实例类型与正确配置的模型匹配。
选项 1:自带优化模型
如果您已经知道实例类型目标,请为每个目标准备模型工件。对于您的高端主实例,您可能会跨多个 GPU 使用张量并行。对于中端回退,您可以应用推测解码来加速推理。对于最低优先级的回退,您可以使用 INT4 量化以适应较小的内存预算。
为每个配置创建一个单独的 SageMaker AI 模型,并使用 ModelNameOverride 在每个 InstancePools 条目中引用它(对于单模型端点)或在每个实例类型的 Specifications 中引用(对于基于推理组件的端点)。当 SageMaker AI 回退到较低优先级的池时,它会部署您为该硬件准备的模型。
选项 2:使用 SageMaker AI 推理建议
如果您不想手动优化每个硬件目标,SageMaker AI 推理建议可以为您生成特定于硬件的配置。提供您的基础模型,SageMaker AI 会使用推测解码和量化等技术在您的目标实例类型中生成优化的配置。
建议作业为每个目标实例类型返回一个结果。每个结果在 AIRecommendationModelDetails 响应中包含一个 ModelPackageArn 和一个 InferenceSpecificationName,标识该特定硬件的配置。您使用这两个字段为每个结果创建一个 SageMaker AI 模型,然后在其对应的池条目中使用 ModelNameOverride 引用它——与选项 1 相同的模式,服务处理优化工作。
混合群组的自动缩放
自动缩放遵循您在创建时定义的相同优先级逻辑。扩展首先尝试最高优先级的池,如果容量不可用则回退到下一个池。缩减首先移除最低优先级的实例,在群组收缩时保留您的首选硬件。
构建加权缩放指标
因为您的群组包含具有不同吞吐量的实例类型,默认的聚合指标可能会错误地表示实际使用情况。考虑一个处理 18 个并发请求的 p5 实例和一个处理 7 个的 g6,将这些原始数字平均为 12.5 并不能准确反映任一类型上的负载。
您现在可以使用 CloudWatch 指标数学基于每种类型的利用率比率构建加权指标。每个项将类型观察到的并发度除以其最大容量,产生一个介于 0.0–1.0 之间的值。平均这些比率给出群组级别的使用信号,与 TargetValue 相同的 0.0–1.0 范围。将 TargetValue 设置为 0.7 意味着:当加权平均值超过群组中所有实例类型容量的 70% 时进行扩展。
监控您的群组
所有现有的 CloudWatch 指标现在都包含一个新的 InstanceType 维度:ModelLatency、ConcurrentRequestsPerModel、GPUUtilization、InstanceCount 和 InvocationsPerInstance——按硬件类型在单个端点内细分。您可以构建仪表板和警报,独立跟踪每个实例类型。
DescribeEndpoint 返回每个池的当前实例计数,因此您始终知道您的群组组成。
流量路由
对于具有实例池的端点,我们建议通过在生产变体中设置 RoutingConfig 来启用最少未完成请求 (LOR) 路由。LOR 将每个传入请求路由到每个模型副本中飞行请求最少的实例。因为高容量实例处理请求更快,它们更快地排空队列并在稳态下保持较低的飞行计数。这意味着它们自然接收比例更高的流量,无需任何手动权重配置。
更新和回滚
同时支持蓝绿部署和滚动部署。
蓝绿部署在转移流量之前使用相同的基于优先级的回退逻辑配置一个完整的新(绿色)群组。如果健康检查通过,流量切换。如果失败,自动回滚保留您的蓝色群组,并且您的端点在整个过程中保持 InService。
滚动部署以可配置的批次(每次 5-50% 的实例)更新您的群组,比完整的蓝绿群组需要更少的额外容量——对于大模型或高需求的 GPU 实例类型尤其有价值。SageMaker AI 在配置每个新批次时应用基于优先级的回退逻辑。如果在烘烤期间 CloudWatch 警报触发,流量自动回滚。
先决条件
在开始之前,请确保您拥有:
- 具有 sagemaker:CreateEndpointConfig、sagemaker:CreateEndpoint 和 sagemaker:UpdateEndpoint IAM 权限的 AWS 账户
- 至少一个带有 Amazon S3 中工件的 SageMaker 模型
- Boto3 版本 1.43.1 或更高(用于 Python SDK 中的 InstancePools 支持)
- (可选)每个目标实例类型的独立优化模型工件,或来自 SageMaker AI 推理建议的 ModelPackage
实例池支持适用于所有商业 AWS 区域。您可以通过 AWS 管理控制台、AWS 命令行界面 (AWS CLI) 或 AWS SDK 开始使用。
配置端点的工作流程
有两种方法可以配置实例池:用于新的 Amazon SageMaker AI 端点或用于您现有的 Amazon SageMaker AI 端点。
如果你是创建新端点,以下图表解释了工作流程:
- 选择您的实例类型并分配优先级(1 为最高)。
- 为每个实例类型准备优化模型,或运行 SageMaker AI 推理建议生成它们。
- 使用列出您优先级的 InstancePools 创建端点配置。
- 创建端点。SageMaker AI 自动处理容量解析。
- 使用新的 InstanceType 维度设置每类型 CloudWatch 监控。
如果你是迁移现有端点,以下图表解释了工作流程:
- 创建新的端点配置:将 InstanceType 替换为 InstancePools,将您当前的实例类型保持在 Priority: 1。
- 调用 UpdateEndpoint,您的端点在蓝绿过渡期间保持 InService。
- 可选地添加加权利用率缩放指标,如果您的回退实例类型在吞吐量上差异显著。
设置
采用实例池需要对端点配置进行一个字段更改:将 ProductionVariant 中的单个 InstanceType 字段替换为 InstancePools 列表。您的模型、缩放策略和监控仪表板继续工作,无需修改。
迁移现有端点
之前:单一实例类型:
import boto3 sm = boto3.client("sagemaker")
sm.create_endpoint_config( EndpointConfigName="my-config", ProductionVariants=[{ "VariantName": "primary", "ModelName": "my-llm", "InitialInstanceCount": 2, "InstanceType": "ml.g6e.48xlarge", # 单一类型 — 无容量回退 }], )
之后:优先级排序的实例池:
sm.create_endpoint_config( EndpointConfigName="my-config-v2", ProductionVariants=[{ "VariantName": "primary", "ModelName": "my-llm", "InitialInstanceCount": 2, "VariantInstanceProvisionTimeoutInSeconds": 1200, # 见下面的说明 "InstancePools": [ {"InstanceType": "ml.g6e.48xlarge", "Priority": 1}, # 您当前的类型 {"InstanceType": "ml.g6.48xlarge", "Priority": 2}, # 相同系列,第一个回退 {"InstanceType": "ml.p4d.24xlarge", "Priority": 3}, # 更广泛的回退 ], }], )
您的端点在蓝绿过渡期间保持 InService。
sm.update_endpoint( EndpointName="my-endpoint", EndpointConfigName="my-config-v2", )
注意:VariantInstanceProvisionTimeoutInSeconds 是一个与实例池支持一起引入的新字段。它设置了从池中获取实例的总窗口:SageMaker AI 在此窗口内继续重试容量不足错误,并在超时后移动到下一个池。有效范围是 300-3600 秒。1200 秒对于大型 GPU 实例类型来说是合理的起始值。此计时器仅涵盖实例获取,模型下载和容器启动时间由现有的 ModelDataDownloadTimeoutInSeconds 和 ContainerStartupHealthCheckTimeoutInSeconds 字段分别管理。要在每个实例类型上部署不同的优化模型,请将 ModelNameOverride 添加到任何池条目。您可以在上一节中看到模型配置选项。
基于推理组件的端点
sm.create_inference_component( InferenceComponentName="my-ic", EndpointName="my-heterogeneous-endpoint", VariantName="primary", Specifications=[ { "InstanceType": "ml.p5.48xlarge", "ModelName": "my-model-p5-optimized", "ComputeResourceRequirements": { "NumberOfAcceleratorDevicesRequired": 8, "MinMemoryRequiredInMb": 65536, }, }, { "InstanceType": "ml.g6.48xlarge", "ModelName": "my-model-g6-optimized", "ComputeResourceRequirements": { "NumberOfAcceleratorDevicesRequired": 8, "MinMemoryRequiredInMb": 32768, }, }, ], RuntimeConfig={"CopyCount": 4}, )
异步推理端点
实例池同样适用于异步推理端点。在您的 CreateEndpointConfig 调用中添加 AsyncInferenceConfig 块以及 InstancePools 定义——基于优先级的配置和回退逻辑同样适用。这对于缩放到零实例的异步工作负载特别有用:当端点重新向上缩放以处理排队的请求时,SageMaker AI 首先使用您可用的最高优先级池进行配置,为您提供无需手动干预的弹性冷启动行为。
结论
Amazon SageMaker AI 实例池允许您为推理端点定义优先级列表的实例类型,SageMaker AI 根据该顺序自动管理容量。
在端点创建、扩展和缩减期间,SageMaker AI 会遍历您首选的实例类型,因此当您的首选硬件不可用时,您无需手动重试部署。开始使用很简单:将端点配置中的 InstanceType 替换为 InstancePools,然后调用 UpdateEndpoint。您现有的模型、自动缩放策略和监控仪表板无需重大更改即可继续工作。
通过每实例类型的 CloudWatch 指标和来自 DescribeEndpoint 的详细池计数,您还可以清晰实时地了解哪些实例类型正在为您的群组提供动力。无论您是在优化成本、处理 GPU 容量限制,还是构建可以从零冷启动的弹性异步管道,实例池都为您提供了灵活性和自动化,使 ML 推理运行更顺畅,运营开销更低。
此功能今天可用,无需额外费用。您按与标准单类型端点相同的费率支付实际配置的实例类型。要了解更多信息,请参阅 Amazon SageMaker AI 文档并探索 GitHub 上的示例笔记本。