Generativ dataintelligens

Använd Kubernetes Operators för nya slutledningsmöjligheter i Amazon SageMaker som minskar LLM-distributionskostnaderna med 50 % i genomsnitt | Amazon webbtjänster

Datum:

Vi är glada över att kunna presentera en ny version av Amazon SageMaker-operatörer för Kubernetes med AWS-kontroller för Kubernetes (ACK). ACK är ett ramverk för att bygga Kubernetes anpassade kontroller, där varje kontrollenhet kommunicerar med ett AWS-tjänst-API. Dessa kontroller tillåter Kubernetes-användare att tillhandahålla AWS-resurser som hinkar, databaser eller meddelandeköer helt enkelt genom att använda Kubernetes API.

Släpp v1.2.9 av SageMaker ACK Operators lägger till stöd för slutledningskomponenter, som fram till nu endast var tillgängliga via SageMaker API och AWS Software Development Kits (SDK). Inferenskomponenter kan hjälpa dig att optimera distributionskostnaderna och minska latensen. Med de nya inferenskomponentfunktionerna kan du distribuera en eller flera grundmodeller (FM) på samma Amazon SageMaker endpoint och kontrollera hur många acceleratorer och hur mycket minne som är reserverat för varje FM. Detta hjälper till att förbättra resursutnyttjandet, minskar modelldistributionskostnaderna i genomsnitt med 50 % och låter dig skala slutpunkter tillsammans med dina användningsfall. För mer information, se Amazon SageMaker lägger till nya slutledningsfunktioner för att hjälpa till att minska implementeringskostnader och latens för grundmodeller.

Tillgängligheten av inferenskomponenter genom SageMaker-kontrollern gör det möjligt för kunder som använder Kubernetes som sitt kontrollplan att dra fördel av inferenskomponenter medan de distribuerar sina modeller på SageMaker.

I det här inlägget visar vi hur man använder SageMaker ACK Operators för att distribuera SageMaker inferenskomponenter.

Hur ACK fungerar

Att demonstrera hur ACK fungerar, låt oss titta på ett exempel med hjälp av Amazon enkel lagringstjänst (Amazon S3). I följande diagram är Alice vår Kubernetes-användare. Hennes ansökan beror på att det finns en S3-skopa med namnet my-bucket.

Hur ACK fungerar

Arbetsflödet består av följande steg:

  1. Alice ringer till kubectl apply, skickar in en fil som beskriver en Kubernetes anpassad resurs beskriver hennes S3 hink. kubectl apply skickar denna fil, som kallas a uppenbart, till Kubernetes API-server som körs i Kubernetes styrenhetsnod.
  2. Kubernetes API-server tar emot manifestet som beskriver S3-hinken och avgör om Alice har behörigheter att skapa en anpassad resurs av slag s3.services.k8s.aws/Bucketoch att den anpassade resursen är korrekt formaterad.
  3. Om Alice är auktoriserad och den anpassade resursen är giltig, skriver Kubernetes API-server den anpassade resursen till sin etcd datalagring.
  4. Den svarar sedan till Alice att den anpassade resursen har skapats.
  5. Vid denna tidpunkt, ACK-tjänsten styrenhet för Amazon S3, som körs på en Kubernetes-arbetsnod inom ramen för en normal Kubernetes Pod, meddelas att en ny anpassad resurs av slag s3.services.k8s.aws/Bucket Har skapats.
  6. ACK-tjänststyrenheten för Amazon S3 kommunicerar sedan med Amazon S3 API och anropar S3 CreateBucket API för att skapa hinken i AWS.
  7. Efter att ha kommunicerat med Amazon S3 API, anropar ACK-tjänstkontrollanten Kubernetes API-server för att uppdatera den anpassade resursens status med information den fått från Amazon S3.

Nyckelkomponenter

De nya slutledningsfunktionerna bygger på SageMakers slutpunkter i realtid. Som tidigare skapar du SageMaker-slutpunkten med en slutpunktskonfiguration som definierar instanstypen och det initiala antalet instanser för slutpunkten. Modellen är konfigurerad i en ny konstruktion, en slutledningskomponent. Här anger du antalet acceleratorer och mängden minne som du vill allokera till varje kopia av en modell, tillsammans med modellartefakter, behållarbild och antalet modellkopior som ska distribueras.

Du kan använda de nya slutledningsfunktionerna från Amazon SageMaker Studio, den SageMaker Python SDK, AWS SDK: eroch AWS-kommandoradsgränssnitt (AWS CLI). De får också stöd av AWS molnformation. Nu kan du också använda dem med SageMaker-operatörer för Kubernetes.

Lösningsöversikt

För denna demo använder vi SageMaker-kontrollern för att distribuera en kopia av Dolly v2 7B modell och en kopia av FLAN-T5 XXL modell från Hugging Face Model Hub på en SageMaker-slutpunkt i realtid med de nya slutledningsfunktionerna.

Förutsättningar

För att följa med bör du ha ett Kubernetes-kluster med SageMaker ACK-kontrollern v1.2.9 eller högre installerad. För instruktioner om hur man tillhandahåller en Amazon Elastic Kubernetes-tjänst (Amazon EKS) kluster med Amazon Elastic Compute Cloud (Amazon EC2) Linux-hanterade noder med eksctl, se Komma igång med Amazon EKS – eksctl. För instruktioner om hur du installerar SageMaker-styrenheten, se Maskininlärning med ACK SageMaker Controller.

Du behöver tillgång till accelererade instanser (GPU) för att vara värd för LLM:erna. Denna lösning använder en instans av ml.g5.12xlarge; du kan kontrollera tillgängligheten för dessa instanser i ditt AWS-konto och begära dessa instanser efter behov via en begäran om ökning av servicekvoter, som visas i följande skärmdump.

Begäran om ökad servicekvot

Skapa en slutledningskomponent

För att skapa din slutledningskomponent, definiera EndpointConfig, Endpoint, Modeloch InferenceComponent YAML-filer, liknande de som visas i det här avsnittet. Använda sig av kubectl apply -f <yaml file> för att skapa Kubernetes-resurserna.

Du kan lista resursens status via kubectl describe <resource-type>; till exempel, kubectl describe inferencecomponent.

Du kan också skapa slutledningskomponenten utan en modellresurs. Se vägledningen i API dokumentation för mer detaljer.

EndpointConfig YAML

Följande är koden för EndpointConfig-filen:

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

Slutpunkt YAML

Följande är koden för Endpoint-filen:

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

Modell YAML

Följande är koden för modellfilen:

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 YAMLs

I följande YAML-filer, med tanke på att ml.g5.12xlarge-instansen kommer med 4 GPU:er, allokerar vi 2 GPU:er, 2 processorer och 1,024 XNUMX MB minne till varje modell:

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

Åberopa modeller

Du kan nu anropa modellerna med följande kod:

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)

Uppdatera en slutledningskomponent

För att uppdatera en befintlig slutledningskomponent kan du uppdatera YAML-filerna och sedan använda kubectl apply -f <yaml file>. Följande är ett exempel på en uppdaterad fil:

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

Ta bort en slutledningskomponent

För att ta bort en befintlig slutledningskomponent, använd kommandot kubectl delete -f <yaml file>.

Tillgänglighet och prissättning

De nya SageMakers slutledningsfunktioner är tillgängliga idag i AWS-regionerna USA East (Ohio, N. Virginia), USA West (Oregon), Asia Pacific (Jakarta, Mumbai, Seoul, Singapore, Sydney, Tokyo), Kanada (Central), Europa ( Frankfurt, Irland, London, Stockholm), Mellanöstern (FAE) och Sydamerika (São Paulo). För prisinformation, besök Amazon SageMaker Prissättning.

Slutsats

I det här inlägget visade vi hur man använder SageMaker ACK Operators för att distribuera SageMaker inferenskomponenter. Starta upp ditt Kubernetes-kluster och distribuera dina FM-enheter med de nya SageMakers slutledningsfunktioner idag!


Om författarna

Rajesh Ramchander är Principal ML Engineer in Professional Services på AWS. Han hjälper kunder i olika skeden av deras AI/ML- och GenAI-resa, från de som precis har börjat hela vägen till de som leder sin verksamhet med en AI-first-strategi.

Amit Arora är en AI- och ML-specialistarkitekt på Amazon Web Services, som hjälper företagskunder att använda molnbaserade maskininlärningstjänster för att snabbt skala sina innovationer. Han är också adjungerad lektor i MS datavetenskap och analysprogrammet vid Georgetown University i Washington DC

Suryansh Singh är mjukvaruutvecklingsingenjör på AWS SageMaker och arbetar med att utveckla ML-distribuerade infrastrukturlösningar för AWS-kunder i stor skala.

Saurabh Trikande är senior produktchef för Amazon SageMaker Inference. Han brinner för att arbeta med kunder och motiveras av målet att demokratisera maskininlärning. Han fokuserar på kärnutmaningar relaterade till att distribuera komplexa ML-applikationer, multi-tenant ML-modeller, kostnadsoptimeringar och att göra implementeringen av djupinlärningsmodeller mer tillgänglig. På sin fritid gillar Saurabh att vandra, lära sig om innovativ teknik, följa TechCrunch och umgås med sin familj.

Johna LiuJohna Liu är en mjukvaruutvecklingsingenjör i Amazon SageMaker-teamet. Hennes nuvarande arbete fokuserar på att hjälpa utvecklare att effektivt vara värd för maskininlärningsmodeller och förbättra slutledningsprestanda. Hon brinner för rumslig dataanalys och att använda AI för att lösa samhällsproblem.

plats_img

Senaste intelligens

plats_img

Chatta med oss

Hallå där! Hur kan jag hjälpa dig?