生成數據智能

使用 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 雲形成。現在您也可以將它們與 適用於 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 優先策略引領業務的客戶。

阿米特·阿羅拉 是 Amazon Web Services 的 AI 和 ML 專家架構師,幫助企業客戶使用基於雲的機器學習服務來快速擴展他們的創新。 他還是華盛頓特區喬治敦大學 MS 數據科學和分析項目的兼職講師

蘇爾揚什·辛格 是 AWS SageMaker 的軟體開發工程師,致力於為 AWS 客戶大規模開發 ML 分散式基礎架構解決方案。

索拉布·特里坎德 是 Amazon SageMaker Inference 的高級產品經理。 他熱衷於與客戶合作,並以實現機器學習民主化為目標。 他專注於與部署複雜的 ML 應用程序、多租戶 ML 模型、成本優化以及使深度學習模型的部署更易於訪問相關的核心挑戰。 在業餘時間,Saurabh 喜歡徒步旅行、學習創新技術、關注 TechCrunch 以及與家人共度時光。

約翰娜劉約翰娜劉 是 Amazon SageMaker 團隊的一名軟件開發工程師。 她目前的工作重點是幫助開發人員有效地託管機器學習模型並提高推理性能。 她熱衷於空間數據分析和使用 AI 解決社會問題。

現貨圖片

最新情報

現貨圖片

和我們線上諮詢

你好呀!我怎麼幫你?