生成数据智能

使用 Kubernetes Operators 在 Amazon SageMaker 中实现新的推理功能,使 LLM 部署成本平均降低 50% |亚马逊网络服务

日期:

我们很高兴地宣布推出新版本 适用于 Kubernetes 的 Amazon SageMaker 操作员 使用 适用于 Kubernetes 的 AWS 控制器 (ACK)。 ACK 是一个用于构建 Kubernetes 自定义控制器的框架,其中每个控制器都与 AWS 服务 API 进行通信。这些控制器允许 Kubernetes 用户只需使用 Kubernetes API 即可配置 AWS 资源,例如存储桶、数据库或消息队列。

发布 v1.2.9 SageMaker ACK Operators 增加了对 推理组件,到目前为止只能通过 SageMaker API 和 AWS 软件开发工具包 (SDK) 获得。推理组件可以帮助您优化部署成本并减少延迟。借助新的推理组件功能,您可以在同一台机器上部署一个或多个基础模型 (FM) 亚马逊SageMaker 端点并控制为每个 FM 保留多少个加速器和多少内存。这有助于提高资源利用率,将模型部署成本平均降低 50%,并让您可以根据用例扩展端点。有关更多详细信息,请参阅 Amazon SageMaker 添加了新的推理功能,有助于降低基础模型部署成本和延迟.

通过 SageMaker 控制器提供推理组件,使使用 Kubernetes 作为控制平面的客户​​能够在 SageMaker 上部署模型时利用推理组件。

在这篇文章中,我们将展示如何使用 SageMaker ACK Operators 部署 SageMaker 推理组件。

ACK 的工作原理

展示 ACK 的工作原理,让我们看一个使用的示例 亚马逊简单存储服务 (亚马逊 S3)。在下图中,Alice 是我们的 Kubernetes 用户。她的应用程序依赖于名为的 S3 存储桶的存在 my-bucket.

ACK 的工作原理

工作流程包括以下步骤:

  1. 爱丽丝拨打电话 kubectl apply,传入一个描述 Kubernetes 的文件 自定义资源 描述她的 S3 存储桶。 kubectl apply 传递这个文件,称为 舱单,到 Kubernetes 控制器节点中运行的 Kubernetes API 服务器。
  2. Kubernetes API 服务器接收描述 S3 存储桶的清单并确定 Alice 是否有 权限 创建自定义资源 s3.services.k8s.aws/Bucket,并且自定义资源的格式正确。
  3. 如果Alice获得授权并且自定义资源有效,则Kubernetes API服务器将自定义资源写入其 etcd 数据存储。
  4. 然后它向 Alice 响应自定义资源已创建。
  5. 此时,ACK服务 调节器 对于 Amazon S3,它在普通 Kubernetes 上下文中的 Kubernetes 工作节点上运行 ,被通知有一个新的自定义资源类型 s3.services.k8s.aws/Bucket 已经被创造了。
  6. 然后,Amazon S3 的 ACK 服务控制器与 Amazon S3 API 进行通信,调用 S3 创建桶 API 在AWS中创建存储桶。
  7. 与 Amazon S3 API 通信后,ACK 服务控制器调用 Kubernetes API 服务器来更新自定义资源的 状态 以及从 Amazon S3 收到的信息。

关键部件

新的推理功能基于 SageMaker 的实时推理端点构建。与之前一样,您使用端点配置创建 SageMaker 端点,该端点配置定义了端点的实例类型和初始实例计数。该模型配置在一个新的构造中,即推理组件。在这里,您指定要分配给每个模型副本的加速器数量和内存量,以及模型工件、容器映像和要部署的模型副本数量。

您可以使用以下新的推理功能 亚马逊SageMaker Studio是, SageMaker Python 开发工具包, AWS开发工具包AWS命令行界面 (AWS CLI)。他们还得到了支持 AWS CloudFormation。现在您还可以将它们与 适用于Kubernetes的SageMaker运营商.

解决方案概述

对于此演示,我们使用 SageMaker 控制器来部署 多莉 v2 7B 型号 和一份副本 FLAN-T5 XXL 型号 来自 拥抱脸模型中心 在 SageMaker 实时端点上使用新的推理功能。

先决条件

要继续操作,您应该有一个安装了 SageMaker ACK 控制器 v1.2.9 或更高版本的 Kubernetes 集群。有关如何配置的说明 Amazon Elastic Kubernetes服务 (Amazon EKS) 集群 亚马逊弹性计算云 (Amazon EC2) 使用 eksctl 的 Linux 托管节点,请参阅 Amazon EKS 入门 – eksctl。有关安装 SageMaker 控制器的说明,请参阅 使用 ACK SageMaker 控制器进行机器学习.

您需要访问加速实例 (GPU) 来托管 LLM。该解决方案使用 ml.g5.12xlarge 的一个实例;您可以检查您的 AWS 账户中这些实例的可用性,并根据需要通过服务配额增加请求来请求这些实例,如以下屏幕截图所示。

服务配额增加请求

创建推理组件

要创建推理组件,请定义 EndpointConfig, Endpoint, ModelInferenceComponent YAML 文件,类似于本节中显示的文件。使用 kubectl apply -f <yaml file> 创建 Kubernetes 资源。

您可以通过以下方式列出资源的状态 kubectl describe <resource-type>; 例如, kubectl describe inferencecomponent.

您还可以在没有模型资源的情况下创建推理组件。请参阅中提供的指导 API文档 以获得更多细节。

端点配置 YAML

以下是EndpointConfig文件的代码:

apiVersion: sagemaker.services.k8s.aws/v1alpha1
kind: EndpointConfig
metadata:
  name: inference-component-endpoint-config
spec:
  endpointConfigName: inference-component-endpoint-config
  executionRoleARN: <EXECUTION_ROLE_ARN>
  productionVariants:
  - variantName: AllTraffic
    instanceType: ml.g5.12xlarge
    initialInstanceCount: 1
    routingConfig:
      routingStrategy: LEAST_OUTSTANDING_REQUESTS

端点 YAML

以下是 Endpoint 文件的代码:

apiVersion: sagemaker.services.k8s.aws/v1alpha1
kind: Endpoint
metadata:
  name: inference-component-endpoint
spec:
  endpointName: inference-component-endpoint
  endpointConfigName: inference-component-endpoint-config

模型 YAML

以下是模型文件的代码:

apiVersion: sagemaker.services.k8s.aws/v1alpha1
kind: Model
metadata:
  name: dolly-v2-7b
spec:
  modelName: dolly-v2-7b
  executionRoleARN: <EXECUTION_ROLE_ARN>
  containers:
  - image: 763104351884.dkr.ecr.us-east-1.amazonaws.com/huggingface-pytorch-tgi-inference:2.0.1-tgi0.9.3-gpu-py39-cu118-ubuntu20.04
    environment:
      HF_MODEL_ID: databricks/dolly-v2-7b
      HF_TASK: text-generation
---
apiVersion: sagemaker.services.k8s.aws/v1alpha1
kind: Model
metadata:
  name: flan-t5-xxl
spec:
  modelName: flan-t5-xxl
  executionRoleARN: <EXECUTION_ROLE_ARN>
  containers:
  - image: 763104351884.dkr.ecr.us-east-1.amazonaws.com/huggingface-pytorch-tgi-inference:2.0.1-tgi0.9.3-gpu-py39-cu118-ubuntu20.04
    environment:
      HF_MODEL_ID: google/flan-t5-xxl
      HF_TASK: text-generation

InferenceComponent YAML

在以下 YAML 文件中,鉴于 ml.g5.12xlarge 实例配备 4 个 GPU,我们为每个模型分配 2 个 GPU、2 个 CPU 和 1,024 MB 内存:

apiVersion: sagemaker.services.k8s.aws/v1alpha1
kind: InferenceComponent
metadata:
  name: inference-component-dolly
spec:
  inferenceComponentName: inference-component-dolly
  endpointName: inference-component-endpoint
  variantName: AllTraffic
  specification:
    modelName: dolly-v2-7b
    computeResourceRequirements:
      numberOfAcceleratorDevicesRequired: 2
      numberOfCPUCoresRequired: 2
      minMemoryRequiredInMb: 1024
  runtimeConfig:
    copyCount: 1

apiVersion: sagemaker.services.k8s.aws/v1alpha1
kind: InferenceComponent
metadata:
  name: inference-component-flan
spec:
  inferenceComponentName: inference-component-flan
  endpointName: inference-component-endpoint
  variantName: AllTraffic
  specification:
    modelName: flan-t5-xxl
    computeResourceRequirements:
      numberOfAcceleratorDevicesRequired: 2
      numberOfCPUCoresRequired: 2
      minMemoryRequiredInMb: 1024
  runtimeConfig:
    copyCount: 1

调用模型

您现在可以使用以下代码调用模型:

import boto3
import json

sm_runtime_client = boto3.client(service_name="sagemaker-runtime")
payload = {"inputs": "Why is California a great place to live?"}

response_dolly = sm_runtime_client.invoke_endpoint(
    EndpointName="inference-component-endpoint",
    InferenceComponentName="inference-component-dolly",
    ContentType="application/json",
    Accept="application/json",
    Body=json.dumps(payload),
)
result_dolly = json.loads(response_dolly['Body'].read().decode())
print(result_dolly)

response_flan = sm_runtime_client.invoke_endpoint(
    EndpointName="inference-component-endpoint",
    InferenceComponentName="inference-component-flan",
    ContentType="application/json",
    Accept="application/json",
    Body=json.dumps(payload),
)
result_flan = json.loads(response_flan['Body'].read().decode())
print(result_flan)

更新推理组件

要更新现有的推理组件,您可以更新 YAML 文件,然后使用 kubectl apply -f <yaml file>。以下是更新文件的示例:

apiVersion: sagemaker.services.k8s.aws/v1alpha1
kind: InferenceComponent
metadata:
  name: inference-component-dolly
spec:
  inferenceComponentName: inference-component-dolly
  endpointName: inference-component-endpoint
  variantName: AllTraffic
  specification:
    modelName: dolly-v2-7b
    computeResourceRequirements:
      numberOfAcceleratorDevicesRequired: 2
      numberOfCPUCoresRequired: 4 # Update the numberOfCPUCoresRequired.
      minMemoryRequiredInMb: 1024
  runtimeConfig:
    copyCount: 1

删除推理组件

要删除现有的推理组件,请使用以下命令 kubectl delete -f <yaml file>.

供货情况和价格

新的 SageMaker 推理功能现已在美国东部(俄亥俄、弗吉尼亚北部)、美国西部(俄勒冈)、亚太地区(雅加达、孟买、首尔、新加坡、悉尼、东京)、加拿大(中部)、欧洲(法兰克福、爱尔兰、伦敦、斯德哥尔摩)、中东(阿联酋)和南美洲(圣保罗)。有关定价详情,请访问 Amazon SageMaker定价.

结论

在这篇文章中,我们展示了如何使用 SageMaker ACK Operators 部署 SageMaker 推理组件。立即使用新的 SageMaker 推理功能启动 Kubernetes 集群并部署 FM!


作者简介

拉杰什·拉姆钱德 是 AWS 专业服务领域的首席 ML 工程师。他为处于 AI/ML 和 GenAI 旅程各个阶段的客户提供帮助,从刚刚起步的客户到以 AI 优先战略引领业务的客户。

阿米特·阿罗拉(Amit Arora) 是 Amazon Web Services 的 AI 和 ML 专家架构师,帮助企业客户使用基于云的机器学习服务来快速扩展他们的创新。 他还是华盛顿特区乔治敦大学 MS 数据科学和分析项目的兼职讲师

苏尔扬什·辛格 是 AWS SageMaker 的软件开发工程师,致力于为 AWS 客户大规模开发 ML 分布式基础设施解决方案。

索拉布·特里坎德 是 Amazon SageMaker Inference 的高级产品经理。 他热衷于与客户合作,并以机器学习民主化的目标为动力。 他专注于与部署复杂的 ML 应用程序、多租户 ML 模型、成本优化以及使深度学习模型的部署更易于访问相关的核心挑战。 在业余时间,Saurabh 喜欢徒步旅行、学习创新技术、关注 TechCrunch 以及与家人共度时光。

约翰娜刘约翰娜刘 是 Amazon SageMaker 团队的一名软件开发工程师。 她目前的工作重点是帮助开发人员有效地托管机器学习模型并提高推理性能。 她热衷于空间数据分析和使用 AI 解决社会问题。

现货图片

最新情报

现货图片

在线答疑

你好呀! 我怎么帮你?