Generative Datenintelligenz

Nutzen Sie Kubernetes-Operatoren für neue Inferenzfunktionen in Amazon SageMaker, die die LLM-Bereitstellungskosten um durchschnittlich 50 % senken | Amazon Web Services

Datum:

Wir freuen uns, eine neue Version des anzukündigen Amazon SageMaker-Operatoren für Kubernetes Verwendung der AWS-Controller für Kubernetes (ACK). ACK ist ein Framework zum Erstellen benutzerdefinierter Kubernetes-Controller, wobei jeder Controller mit einer AWS-Service-API kommuniziert. Mit diesen Controllern können Kubernetes-Benutzer AWS-Ressourcen wie Buckets, Datenbanken oder Nachrichtenwarteschlangen einfach über die Kubernetes-API bereitstellen.

Loslassen v1.2.9 der SageMaker ACK-Operatoren fügt Unterstützung für hinzu Inferenzkomponenten, die bisher nur über die SageMaker-API und die AWS Software Development Kits (SDKs) verfügbar waren. Inferenzkomponenten können Ihnen helfen, die Bereitstellungskosten zu optimieren und die Latenz zu reduzieren. Mit den neuen Inferenzkomponentenfunktionen können Sie ein oder mehrere Basismodelle (FMs) darauf bereitstellen Amazon Sage Maker Endpunkt und steuern Sie, wie viele Beschleuniger und wie viel Speicher für jedes FM reserviert sind. Dies trägt zur Verbesserung der Ressourcennutzung bei, senkt die Kosten für die Modellbereitstellung im Durchschnitt um 50 % und ermöglicht Ihnen die Skalierung von Endpunkten zusammen mit Ihren Anwendungsfällen. Weitere Einzelheiten finden Sie unter Amazon SageMaker fügt neue Inferenzfunktionen hinzu, um die Kosten und Latenz für die Bereitstellung des Basismodells zu reduzieren.

Die Verfügbarkeit von Inferenzkomponenten über den SageMaker-Controller ermöglicht es Kunden, die Kubernetes als Steuerungsebene verwenden, die Vorteile von Inferenzkomponenten zu nutzen, während sie ihre Modelle auf SageMaker bereitstellen.

In diesem Beitrag zeigen wir, wie Sie SageMaker-ACK-Operatoren verwenden, um SageMaker-Inferenzkomponenten bereitzustellen.

Wie ACK funktioniert

Demonstrieren wie ACK funktioniertSchauen wir uns ein Beispiel mit an Amazon Simple Storage-Service (Amazon S3). Im folgenden Diagramm ist Alice unsere Kubernetes-Benutzerin. Ihre Anwendung hängt von der Existenz eines S3-Buckets mit dem Namen ab my-bucket.

Wie ACK funktioniert

Der Arbeitsablauf besteht aus den folgenden Schritten:

  1. Alice ruft an kubectl apply, indem eine Datei übergeben wird, die ein Kubernetes beschreibt benutzerdefinierte Ressource beschreibt ihren S3-Eimer. kubectl apply übergibt diese Datei, genannt a Manifest, an den Kubernetes-API-Server, der im Kubernetes-Controller-Knoten ausgeführt wird.
  2. Der Kubernetes-API-Server empfängt das Manifest, das den S3-Bucket beschreibt, und stellt fest, ob Alice dies getan hat Berechtigungen um eine benutzerdefinierte Ressource zu erstellen Art s3.services.k8s.aws/Bucketund dass die benutzerdefinierte Ressource ordnungsgemäß formatiert ist.
  3. Wenn Alice autorisiert ist und die benutzerdefinierte Ressource gültig ist, schreibt der Kubernetes-API-Server die benutzerdefinierte Ressource auf seinen Server etcd Datenspeicher.
  4. Anschließend antwortet es Alice, dass die benutzerdefinierte Ressource erstellt wurde.
  5. Zu diesem Zeitpunkt der ACK-Dienst Controller für Amazon S3, das auf einem Kubernetes-Worker-Knoten im Kontext eines normalen Kubernetes läuft Schote, wird benachrichtigt, dass eine neue benutzerdefinierte Ressource dieser Art vorliegt s3.services.k8s.aws/Bucket wurde erschaffen.
  6. Der ACK-Service-Controller für Amazon S3 kommuniziert dann mit der Amazon S3-API und ruft auf S3 CreateBucket-API um den Bucket in AWS zu erstellen.
  7. Nach der Kommunikation mit der Amazon S3-API ruft der ACK-Service-Controller den Kubernetes-API-Server auf, um die benutzerdefinierten Ressourcen zu aktualisieren Status mit Informationen, die es von Amazon S3 erhalten hat.

Schlüsselkomponenten

Die neuen Inferenzfunktionen bauen auf den Echtzeit-Inferenzendpunkten von SageMaker auf. Wie zuvor erstellen Sie den SageMaker-Endpunkt mit einer Endpunktkonfiguration, die den Instanztyp und die anfängliche Instanzanzahl für den Endpunkt definiert. Das Modell wird in einem neuen Konstrukt, einer Inferenzkomponente, konfiguriert. Hier geben Sie die Anzahl der Beschleuniger und die Speichermenge an, die Sie jeder Kopie eines Modells zuweisen möchten, zusammen mit den Modellartefakten, dem Container-Image und der Anzahl der bereitzustellenden Modellkopien.

Sie können die neuen Inferenzfunktionen von nutzen Amazon SageMaker-Studio, der SageMaker Python-SDK, AWS-SDKs und AWS-Befehlszeilenschnittstelle (AWS CLI). Sie werden auch unterstützt von AWS CloudFormation. Jetzt können Sie sie auch mit verwenden SageMaker-Operatoren für Kubernetes.

Lösungsüberblick

Für diese Demo verwenden wir den SageMaker-Controller, um eine Kopie davon bereitzustellen Dolly v2 7B-Modell und eine Kopie der FLAN-T5 XXL-Modell von dem Modellhub mit umarmendem Gesicht auf einem SageMaker-Echtzeitendpunkt mithilfe der neuen Inferenzfunktionen.

Voraussetzungen:

Um mitzumachen, sollten Sie über einen Kubernetes-Cluster verfügen, auf dem der SageMaker ACK-Controller v1.2.9 oder höher installiert ist. Anweisungen zur Bereitstellung eines Amazon Elastic Kubernetes-Service (Amazon EKS) Cluster mit Amazon Elastic Compute-Cloud (Amazon EC2) Von Linux verwaltete Knoten mit eksctl, siehe Erste Schritte mit Amazon EKS – eksctl. Anweisungen zur Installation des SageMaker-Controllers finden Sie unter Maschinelles Lernen mit dem ACK SageMaker Controller.

Für das Hosten der LLMs benötigen Sie Zugriff auf beschleunigte Instanzen (GPUs). Diese Lösung verwendet eine Instanz von ml.g5.12xlarge; Sie können die Verfügbarkeit dieser Instanzen in Ihrem AWS-Konto überprüfen und diese Instanzen bei Bedarf über eine Anfrage zur Erhöhung der Servicekontingente anfordern, wie im folgenden Screenshot gezeigt.

Antrag auf Erhöhung der Servicekontingente

Erstellen Sie eine Inferenzkomponente

Um Ihre Inferenzkomponente zu erstellen, definieren Sie die EndpointConfig, Endpoint, Model und InferenceComponent YAML-Dateien, ähnlich den in diesem Abschnitt gezeigten. Verwenden kubectl apply -f <yaml file> um die Kubernetes-Ressourcen zu erstellen.

Sie können den Status der Ressource über auflisten kubectl describe <resource-type>; beispielsweise, kubectl describe inferencecomponent.

Sie können die Inferenzkomponente auch ohne Modellressource erstellen. Beachten Sie die Anleitung im API-Dokumentation für weitere Informationen an.

EndpointConfig YAML

Das Folgende ist der Code für die EndpointConfig-Datei:

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

Endpunkt-YAML

Das Folgende ist der Code für die Endpoint-Datei:

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

Das Folgende ist der Code für die Modelldatei:

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

In den folgenden YAML-Dateien weisen wir jedem Modell 5.12 GPUs, 4 CPUs und 2 MB Speicher zu, da die ml.g2xlarge-Instanz über 1,024 GPUs verfügt:

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

Rufen Sie Modelle auf

Sie können die Modelle nun mit dem folgenden Code aufrufen:

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)

Aktualisieren Sie eine Inferenzkomponente

Um eine vorhandene Inferenzkomponente zu aktualisieren, können Sie die YAML-Dateien aktualisieren und dann verwenden kubectl apply -f <yaml file>. Das Folgende ist ein Beispiel für eine aktualisierte Datei:

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

Löschen Sie eine Inferenzkomponente

Um eine vorhandene Inferenzkomponente zu löschen, verwenden Sie den Befehl kubectl delete -f <yaml file>.

Verfügbarkeit und Preisgestaltung

Die neuen SageMaker-Inferenzfunktionen sind ab sofort in den AWS-Regionen USA Ost (Ohio, Nord-Virginia), USA West (Oregon), Asien-Pazifik (Jakarta, Mumbai, Seoul, Singapur, Sydney, Tokio), Kanada (Zentral) und Europa verfügbar. Frankfurt, Irland, London, Stockholm), Naher Osten (VAE) und Südamerika (São Paulo). Einzelheiten zu den Preisen finden Sie unter Amazon SageMaker Preise.

Zusammenfassung

In diesem Beitrag haben wir gezeigt, wie Sie SageMaker-ACK-Operatoren verwenden, um SageMaker-Inferenzkomponenten bereitzustellen. Starten Sie noch heute Ihren Kubernetes-Cluster und stellen Sie Ihre FMs mit den neuen Inferenzfunktionen von SageMaker bereit!


Über die Autoren

Rajesh Ramchander ist Principal ML Engineer im Bereich Professional Services bei AWS. Er unterstützt Kunden in verschiedenen Phasen ihrer KI/ML- und GenAI-Reise, von denen, die gerade erst anfangen, bis hin zu denen, die ihr Unternehmen mit einer AI-First-Strategie führen.

Amit Arora ist ein KI- und ML-Spezialistenarchitekt bei Amazon Web Services und unterstützt Unternehmenskunden bei der Nutzung cloudbasierter maschineller Lerndienste, um ihre Innovationen schnell zu skalieren. Er ist außerdem außerordentlicher Dozent im MS Data Science and Analytics-Programm an der Georgetown University in Washington DC

Suryansh Singh ist Softwareentwicklungsingenieur bei AWS SageMaker und arbeitet an der Entwicklung ML-verteilter Infrastrukturlösungen für AWS-Kunden in großem Maßstab.

Saurabh Trikande ist Senior Product Manager für Amazon SageMaker Inference. Er arbeitet leidenschaftlich gerne mit Kunden zusammen und ist motiviert von dem Ziel, maschinelles Lernen zu demokratisieren. Er konzentriert sich auf die Kernherausforderungen im Zusammenhang mit der Bereitstellung komplexer ML-Anwendungen, mandantenfähigen ML-Modellen, Kostenoptimierungen und der leichteren Bereitstellung von Deep-Learning-Modellen. In seiner Freizeit wandert Saurabh gerne, lernt etwas über innovative Technologien, folgt TechCrunch und verbringt Zeit mit seiner Familie.

John LiuJohn Liu ist Software Development Engineer im Amazon SageMaker-Team. Ihre aktuelle Arbeit konzentriert sich darauf, Entwicklern dabei zu helfen, Modelle für maschinelles Lernen effizient zu hosten und die Inferenzleistung zu verbessern. Ihre Leidenschaft gilt der räumlichen Datenanalyse und dem Einsatz von KI zur Lösung gesellschaftlicher Probleme.

spot_img

Neueste Intelligenz

spot_img

Chat mit uns

Hallo! Wie kann ich dir helfen?