使用 Kubernetes Operator 在 Amazon SageMaker 中实现新的推理功
利用 Kubernetes Operators 实现 Amazon SageMaker 新推理功能,平均降低 50 LLM 部署成本
由 Rajesh Ramchander、Amit Arora、Suryansh Singh、Saurabh Trikande 和 Johna Liu 于 2024 年 4 月 19 日发布于 高级300、Amazon SageMaker、公告、人工智能、技术使用指南。
关键要点
Amazon SageMaker 更新的 Kubernetes Operators 现已推出,通过 AWS 控制器为 KubernetesACK框架提供支持,可以更方便地部署推理组件。新的推理组件功能使部署基础模型FMs变得更加高效,不仅降低了模型部署的延迟,同时还能将成本平均降低 50。用户可以通过 SageMaker 控制器来轻松利用这些推理组件,增强 Kubernetes 中模型部署的灵活性。我们很高兴宣布,更新版的 Amazon SageMaker Operators for Kubernetes 现已发布,并且该版本使用 AWS Controllers for Kubernetes (ACK)。ACK 是一种构建 Kubernetes 自定义控制器的框架,允许 Kubernetes 用户通过 Kubernetes API 轻松地配置 AWS 资源,例如存储桶、数据库或消息队列。
在 v129 版本中,SageMaker ACK Operator 增加了对 推理组件的支持,以前这些组件仅通过 SageMaker API 和 AWS 软件开发工具包SDK可用。通过新推理组件功能,您可以在同一个 Amazon SageMaker 端点上部署一个或多个基础模型FMs,并控制每个模型的加速器数量和内存。此过程有助于提高资源利用率,降低模型部署成本,并与您的用例一起扩展端点规模。有关更多细节,请参见 Amazon SageMaker 增加新的推理功能,以帮助降低基础模型的部署成本和延迟。
推理组件通过 SageMaker 控制器的可用性使得使用 Kubernetes 作为控制平面的客户可以在 SageMaker 上部署模型时,充分利用推理组件的优势。
在本文中,我们展示了如何使用 SageMaker ACK Operators 来部署 SageMaker 推理组件。
ACK 的工作原理
为了演示 ACK 的工作原理,我们来看看使用 Amazon Simple Storage ServiceS3的示例。在以下示例中,Alice 是我们 Kubernetes 用户,她的应用程序依赖于名为 mybucket 的 S3 存储桶的存在。
工作流包括以下步骤:
Alice 调用 kubectl apply,传入描述她的 S3 存储桶的 Kubernetes 自定义资源的文件。kubectl apply 将此文件称为 清单传递给运行在 Kubernetes 控制节点上的 Kubernetes API 服务器。Kubernetes API 服务器接收描述 S3 存储桶的清单,并确定 Alice 是否有权限 创建 自定义资源 s3servicesk8saws/Bucket,并确认自定义资源的格式是否正确。如果 Alice 被授权且自定义资源有效,Kubernetes API 服务器将自定义资源写入其 etcd 数据存储中。然后,将响应发送给 Alice,告知她自定义资源已创建。此时,运行在 Kubernetes 工作节点的 ACK 服务 控制器 将收到“新创建了类型为 s3servicesk8saws/Bucket 的自定义资源”的通知。ACK 服务控制器随后与 Amazon S3 API 进行通信,调用 S3 CreateBucket API 在 AWS 中创建存储桶。在与 Amazon S3 API 通信后,ACK 服务控制器调用 Kubernetes API 服务器,更新自定义资源的 状态,以接收来自 Amazon S3 的信息。关键组件
新的推理功能建立在 SageMaker 的实时推理端点之上。用户依旧需要通过端点配置来创建 SageMaker 端点,该配置定义了端点的实例类型和初始实例数量。模型则在新的构造推理组件中进行配置。在这里,用户需要指定要分配给每个模型副本的加速器数量和内存大小,以及模型的工件、容器图像和要部署的模型副本数量。
您可以通过 Amazon SageMaker Studio、SageMaker Python SDK、AWS SDKs 和 AWS 命令行界面AWS CLI来使用新的推理能力。此外,它们也受到了 AWS CloudFormation 的支持。现在,您也可以通过 Kubernetes 的 SageMaker Operators 使用它们。
解决方案概述
在本示例中,我们使用 SageMaker 控制器在 SageMaker 实时端点上部署 Dolly v2 7B 模型 和 FLANT5 XXL 模型,以利用新的推理能力。
前提条件
要跟随本教程,您需要一个已安装 SageMaker ACK 控制器 v129 或更高版本的 Kubernetes 集群。如需了解如何使用 eksctl 来配置一个 Amazon Elastic Kubernetes ServiceAmazon EKS集群,其中包含 Amazon Elastic Compute CloudAmazon EC2Linux 托管节点,请查阅 使用 Amazon EKS 入门 eksctl。有关安装 SageMaker 控制器的说明,请参考 使用 ACK SageMaker 控制器进行机器学习。
您需要拥有加速实例GPU,以便托管 LLM。该解决方案使用一个 mlg512xlarge 实例;您可以检查这些实例在您的 AWS 账户中的可用性,并根据需要请求这些实例,以通过如下所示的服务配额增量请求进行配置。
创建推理组件
要创建推理组件,请定义 EndpointConfig、Endpoint、Model 和 InferenceComponent 的 YAML 文件,类似于本节中显示的文件。使用 kubectl apply f ltyaml 文件gt 来创建 Kubernetes 资源。
您可以通过 kubectl describe lt资源类型gt 列出资源状态;例如,kubectl describe inferencecomponent。
此外,您还可以在没有模型资源的情况下创建推理组件。有关更多详细信息,请参考 API 文档。
EndpointConfig YAML
以下是 EndpointConfig 文件的代码:
yamlapiVersion sagemakerservicesk8saws/v1alpha1kind EndpointConfigmetadata name inferencecomponentendpointconfigspec endpointConfigName inferencecomponentendpointconfig executionRoleARN ltEXECUTIONROLEARNgt productionVariants variantName AllTraffic instanceType mlg512xlarge initialInstanceCount 1 routingConfig routingStrategy LEASTOUTSTANDINGREQUESTS
Endpoint YAML
以下是 Endpoint 文件的代码:
yamlapiVersion sagemakerservicesk8saws/v1alpha1kind Endpointmetadata name inferencecomponentendpointspec endpointName inferencecomponentendpoint endpointConfigName inferencecomponentendpointconfig
Model YAML
以下是 Model 文件的代码:
yamlapiVersion sagemakerservicesk8saws/v1alpha1kind Modelmetadata name dollyv27bspec modelName dollyv27b executionRoleARN containers image 763104351884dkrecruseast1amazonawscom/huggingfacepytorchtgiinference201tgi093gpupy39cu118ubuntu2004 environment HFMODELID databricks/dollyv27b HFTASK textgeneration
apiVersion sagemakerservicesk8saws/v1alpha1kind Modelmetadata name flant5xxlspec modelName flant5xxl executionRoleARN containers image 763104351884dkrecruseast1amazonawscom/huggingfacepytorchtgiinference201tgi093gpupy39cu118ubuntu2004 environment HFMODELID google/flant5xxl HFTASK textgeneration
clash for abdroidInferenceComponent YAMLs
在以下 YAML 文件中,由于 mlg512xlarge 实例配备 4 个 GPU,因此我们给每个模型分配 2 个 GPU、2 个 CPU 和 1024 MB 的内存:
yamlapiVersion sagemakerservicesk8saws/v1alpha1kind InferenceComponentmetadata name inferencecomponentdollyspec inferenceComponentName inferencecomponentdolly endpointName inferencecomponentendpoint variantName AllTraffic specification modelName dollyv27b computeResourceRequirements numberOfAcceleratorDevicesRequired 2 numberOfCPUCoresRequired 2 minMemoryRequiredInMb 1024 runtimeConfig copyCount 1
apiVersion sagemakerservicesk8saws/v1alpha1kind InferenceComponentmetadata name inferencecomponentflanspec inferenceComponentName inferencecomponentflan endpointName inferencecomponentendpoint variantName AllTraffic specification modelName flant5xxl computeResourceRequirements numberOfAcceleratorDevicesRequired 2 numberOfCPUCoresRequired 2 minMemoryRequiredInMb 1024 runtimeConfig copyCount 1
调用模型
您现在可以使用以下代码调用模型:
pythonimport boto3import json
smruntimeclient = boto3client(servicename=sagemakerruntime)payload = {inputs 为什么加利福尼亚是个适合居住的地方?}

responsedolly = smruntimeclientinvokeendpoint( EndpointName=inferencecomponentendpoint InferenceComponentName=inferencecomponentdolly ContentType=application/json Accept=application/json Body=jsondumps(payload))resultdolly = jsonloads(responsedolly[Body]read()decode())print(resultdolly)
responseflan = smruntimeclientinvokeendpoint( EndpointName=inferencecomponentendpoint InferenceComponentName=inferencecomponentflan ContentType=application/json Accept=application/json Body=jsondumps(payload))resultflan = jsonloads(responseflan[Body]read()decode())print(resultflan)
更新推理组件
要更新现有推理组件,可以更新 YAML 文件,然后使用 kubectl apply f ltyaml 文件gt。以下是更新文件的示例:
yamlapiVersion sagemakerservicesk8saws/v1alpha1kind InferenceComponentmetadata name inferencecomponentdollyspec inferenceComponentName inferencecomponentdolly endpointName inferencecomponentendpoint variantName AllTraffic specification modelName dollyv27b computeResourceRequirements numberOfAcceleratorDevicesRequired 2 numberOfCPUCoresRequired 4 # 更新 CPU 核心数量。 minMemoryRequiredInMb 1024 runtimeConfig copyCount 1
删除推理组件
要删除现有推理组件,可以使用命令 kubectl delete f ltyaml 文件gt。
可用性与定价
新的 SageMaker 推理功能现在在以下 AWS 区域可用:美国东部俄亥俄州、北弗吉尼亚、美国西部俄勒冈州、亚太地区雅加达、孟买、首尔、新加坡、悉尼、东京、加拿大中部、欧洲法兰克福、爱尔兰、伦敦、斯德哥尔摩、中东阿联酋和南美圣保罗。有关定价详情,请访问 Amazon SageMaker 定价。
结论
在本文中,我们展示了如何使用 SageMaker ACK Operators 部署 SageMaker 推理组件。赶快启动您的 Kubernetes 集群,今天就利用新的 SageMaker 推理能力来部署您的基础模型吧!
关于作者
Rajesh Ramchander是 AWS 专业服务的首席机器学习工程师。他帮助客户在人工智能/机器学习和生成式 AI 旅程的各个阶段,从刚刚起步的客户到那些以 AI 优先策略引领业务的客户。
Amit Arora是亚马逊网络服务的 AI 和机器学习专家架构师,帮助企业客户快速扩展他们基于云的机器学习服务。他也是乔治城大学数据科学与分析硕士项目的兼职讲师。
Suryansh Singh是 AWS SageMaker 的软件开发工程师,致力于开发可大规模提供给客户的机器学习分布式基础设施解决方案。
Saurabh Trikande 是亚马逊 SageMaker 推理的高级产品经理。他非常热衷于与客户合作,致力于实现机器学习的民主化。他专注于与复杂机器学习应用的部署、多租户机器学习模型、成本优化以及使深度学习模型部署更加可及的核心挑战。在空闲时间,Saurabh 喜欢徒步旅行