Intelligenza generativa dei dati

Utilizza gli operatori Kubernetes per nuove funzionalità di inferenza in Amazon SageMaker che riducono i costi di distribuzione LLM in media del 50% | Servizi Web di Amazon

Data:

Siamo entusiasti di annunciare una nuova versione di Operatori Amazon SageMaker per Kubernetes usando il Controller AWS per Kubernetes (ACK). ACK è un framework per la creazione di controller personalizzati Kubernetes, in cui ciascun controller comunica con un'API del servizio AWS. Questi controller consentono agli utenti Kubernetes di effettuare il provisioning di risorse AWS come bucket, database o code di messaggi semplicemente utilizzando l'API Kubernetes.

Rilasciare v1.2.9 degli operatori ACK di SageMaker aggiunge il supporto per componenti di inferenza, che fino ad ora erano disponibili solo tramite l'API SageMaker e i kit di sviluppo software (SDK) AWS. I componenti di inferenza possono aiutarti a ottimizzare i costi di distribuzione e ridurre la latenza. Con le nuove funzionalità dei componenti di inferenza, puoi distribuire uno o più modelli di base (FM) sullo stesso Amazon Sage Maker endpoint e controllare quanti acceleratori e quanta memoria è riservata per ciascuna FM. Ciò contribuisce a migliorare l'utilizzo delle risorse, riduce i costi di distribuzione del modello in media del 50% e consente di adattare gli endpoint in base ai casi d'uso. Per maggiori dettagli, vedere Amazon SageMaker aggiunge nuove funzionalità di inferenza per contribuire a ridurre i costi di distribuzione e la latenza del modello di base.

La disponibilità di componenti di inferenza tramite il controller SageMaker consente ai clienti che utilizzano Kubernetes come piano di controllo di sfruttare i componenti di inferenza durante la distribuzione dei propri modelli su SageMaker.

In questo post mostriamo come utilizzare gli operatori ACK di SageMaker per distribuire i componenti di inferenza di SageMaker.

Come funziona ACK

Dimostrare come funziona ACK, diamo un'occhiata a un esempio utilizzando Servizio di archiviazione semplice Amazon (Amazon S3). Nel diagramma seguente, Alice è il nostro utente Kubernetes. La sua applicazione dipende dall'esistenza di un bucket S3 denominato my-bucket.

Come funziona ACK

Il flusso di lavoro è costituito dai seguenti passaggi:

  1. Alice lancia una chiamata a kubectl apply, passando un file che descrive un Kubernetes risorsa personalizzata descrivendo il suo secchiello S3. kubectl apply passa questo file, chiamato a manifesto, al server API Kubernetes in esecuzione nel nodo del controller Kubernetes.
  2. Il server API Kubernetes riceve il manifest che descrive il bucket S3 e determina se Alice lo ha fatto permessi per creare una risorsa personalizzata di tipo s3.services.k8s.aws/Buckete che la risorsa personalizzata sia formattata correttamente.
  3. Se Alice è autorizzata e la risorsa personalizzata è valida, il server API Kubernetes scrive la risorsa personalizzata nel suo file etcd archivio dati.
  4. Quindi risponde ad Alice che la risorsa personalizzata è stata creata.
  5. A questo punto, il servizio ACK controllore per Amazon S3, che è in esecuzione su un nodo di lavoro Kubernetes nel contesto di un normale Kubernetes Baccello, viene notificato che è disponibile una nuova risorsa personalizzata di tipo kind s3.services.k8s.aws/Bucket è stato creato.
  6. Il controller del servizio ACK per Amazon S3 comunica quindi con l'API Amazon S3, chiamando il file API S3 CreateBucket per creare il bucket in AWS.
  7. Dopo aver comunicato con l'API Amazon S3, il controller del servizio ACK chiama il server API Kubernetes per aggiornare le risorse personalizzate status con le informazioni ricevute da Amazon S3.

Componenti chiave

Le nuove funzionalità di inferenza si basano sugli endpoint di inferenza in tempo reale di SageMaker. Come in precedenza, crei l'endpoint SageMaker con una configurazione dell'endpoint che definisce il tipo di istanza e il conteggio iniziale delle istanze per l'endpoint. Il modello è configurato in un nuovo costrutto, un componente di inferenza. Qui puoi specificare il numero di acceleratori e la quantità di memoria che desideri allocare a ciascuna copia di un modello, insieme agli artefatti del modello, all'immagine del contenitore e al numero di copie del modello da distribuire.

È possibile utilizzare le nuove funzionalità di inferenza da Amazon Sage Maker Studio, le SDK Python di SageMaker, SDK AWSe Interfaccia della riga di comando di AWS (AWS CLI). Sono inoltre supportati da AWS CloudFormazione. Ora puoi anche usarli con Operatori SageMaker per Kubernetes.

Panoramica della soluzione

Per questa demo utilizziamo il controller SageMaker per distribuire una copia del file Modello Dolly v2B e una copia del Modello FLAN-T5 XXL dal Hub del modello del viso che abbraccia su un endpoint in tempo reale SageMaker utilizzando le nuove funzionalità di inferenza.

Prerequisiti

Per proseguire, dovresti avere un cluster Kubernetes con il controller SageMaker ACK v1.2.9 o versione successiva installato. Per istruzioni su come eseguire il provisioning di un Servizio Amazon Elastic Kubernetes (Amazon EKS) con Cloud di calcolo elastico di Amazon (Amazon EC2) Nodi gestiti Linux che utilizzano eksctl, vedere Iniziare con Amazon EKS – eksctl. Per istruzioni sull'installazione del controller SageMaker, fare riferimento a Apprendimento automatico con il controller ACK SageMaker.

È necessario accedere alle istanze accelerate (GPU) per ospitare i LLM. Questa soluzione utilizza un'istanza di ml.g5.12xlarge; puoi verificare la disponibilità di queste istanze nel tuo account AWS e richiederle secondo necessità tramite una richiesta di aumento delle quote di servizio, come mostrato nello screenshot seguente.

Richiesta di aumento delle quote di servizio

Creare un componente di inferenza

Per creare il componente di inferenza, definisci il file EndpointConfig, Endpoint, Modele InferenceComponent File YAML, simili a quelli mostrati in questa sezione. Utilizzo kubectl apply -f <yaml file> per creare le risorse Kubernetes.

È possibile elencare lo stato della risorsa tramite kubectl describe <resource-type>; per esempio, kubectl describe inferencecomponent.

È inoltre possibile creare il componente di inferenza senza una risorsa modello. Fare riferimento alle indicazioni fornite nel Documentazione delle API per ulteriori dettagli.

EndpointConfig YAML

Quello che segue è il codice per il file 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

Endpoint YAML

Di seguito è riportato il codice per il file Endpoint:

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

Modello YAML

Quello che segue è il codice per il file modello:

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

YAML InferenceComponent

Nei seguenti file YAML, dato che l'istanza ml.g5.12xlarge è dotata di 4 GPU, stiamo assegnando 2 GPU, 2 CPU e 1,024 MB di memoria a ciascun modello:

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

Invocare modelli

Ora puoi richiamare i modelli utilizzando il seguente codice:

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)

Aggiorna un componente di inferenza

Per aggiornare un componente di inferenza esistente, puoi aggiornare i file YAML e quindi utilizzare kubectl apply -f <yaml file>. Di seguito è riportato un esempio di file aggiornato:

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

Elimina un componente di inferenza

Per eliminare un componente di inferenza esistente, utilizzare il comando kubectl delete -f <yaml file>.

Disponibilità e prezzi

Le nuove funzionalità di inferenza di SageMaker sono oggi disponibili nelle regioni AWS Stati Uniti orientali (Ohio, N. Virginia), Stati Uniti occidentali (Oregon), Asia Pacifico (Giacarta, Mumbai, Seul, Singapore, Sydney, Tokyo), Canada (Centrale), Europa ( Francoforte, Irlanda, Londra, Stoccolma), Medio Oriente (EAU) e Sud America (San Paolo). Per i dettagli sui prezzi, visitare Prezzi di Amazon SageMaker.

Conclusione

In questo post, abbiamo mostrato come utilizzare gli operatori ACK di SageMaker per distribuire i componenti di inferenza di SageMaker. Avvia il tuo cluster Kubernetes e distribuisci i tuoi FM utilizzando le nuove funzionalità di inferenza di SageMaker oggi stesso!


Informazioni sugli autori

Rajesh Ramchander è Principal ML Engineer in Servizi professionali presso AWS. Aiuta i clienti nelle varie fasi del loro percorso verso l'intelligenza artificiale/ML e la GenAI, da quelli che hanno appena iniziato fino a quelli che stanno guidando la propria attività con una strategia incentrata sull'intelligenza artificiale.

Amit Arora è un AI e ML Specialist Architect presso Amazon Web Services, che aiuta i clienti aziendali a utilizzare i servizi di machine learning basati su cloud per scalare rapidamente le loro innovazioni. È anche docente a contratto nel programma MS data science and analytics presso la Georgetown University di Washington DC

Suryansh Singh è un ingegnere di sviluppo software presso AWS SageMaker e lavora allo sviluppo di soluzioni di infrastruttura distribuita ML per i clienti AWS su larga scala.

Saurabh Trikande è un Senior Product Manager per Amazon SageMaker Inference. È appassionato di lavorare con i clienti ed è motivato dall'obiettivo di democratizzare l'apprendimento automatico. Si concentra sulle sfide principali relative all'implementazione di applicazioni ML complesse, modelli ML multi-tenant, ottimizzazioni dei costi e rendere più accessibile l'implementazione di modelli di deep learning. Nel tempo libero, Saurabh ama fare escursioni, conoscere tecnologie innovative, seguire TechCrunch e trascorrere del tempo con la sua famiglia.

Giovanni LiuGiovanni Liu è un Software Development Engineer nel team di Amazon SageMaker. Il suo lavoro attuale si concentra sull'aiutare gli sviluppatori a ospitare in modo efficiente modelli di machine learning e migliorare le prestazioni di inferenza. È appassionata di analisi dei dati spaziali e utilizza l'intelligenza artificiale per risolvere i problemi della società.

spot_img

L'ultima intelligenza

spot_img

Parla con noi

Ciao! Come posso aiutarla?