Intelligence de données Platon.
Recherche verticale et IA.

Utilisez les opérateurs Kubernetes pour bénéficier de nouvelles fonctionnalités d'inférence dans Amazon SageMaker qui réduisent les coûts de déploiement LLM de 50 % en moyenne | Services Web Amazon

Date :

Nous sommes ravis d'annoncer une nouvelle version du Opérateurs Amazon SageMaker pour Kubernetes utilisant l' Contrôleurs AWS pour Kubernetes (ACK). ACK est un framework permettant de créer des contrôleurs personnalisés Kubernetes, où chaque contrôleur communique avec une API de service AWS. Ces contrôleurs permettent aux utilisateurs de Kubernetes de provisionner des ressources AWS telles que des compartiments, des bases de données ou des files d'attente de messages simplement en utilisant l'API Kubernetes.

Libération v1.2.9 des opérateurs SageMaker ACK ajoute la prise en charge de composants d'inférence, qui jusqu'à présent n'étaient disponibles que via l'API SageMaker et les kits de développement logiciel (SDK) AWS. Les composants d'inférence peuvent vous aider à optimiser les coûts de déploiement et à réduire la latence. Grâce aux nouvelles fonctionnalités des composants d'inférence, vous pouvez déployer un ou plusieurs modèles de base (FM) sur le même Amazon Sage Maker point final et contrôler le nombre d’accélérateurs et la quantité de mémoire réservée pour chaque FM. Cela permet d'améliorer l'utilisation des ressources, de réduire les coûts de déploiement des modèles de 50 % en moyenne et de faire évoluer les points de terminaison en fonction de vos cas d'utilisation. Pour plus de détails, voir Amazon SageMaker ajoute de nouvelles fonctionnalités d'inférence pour aider à réduire les coûts et la latence de déploiement du modèle de base.

La disponibilité des composants d'inférence via le contrôleur SageMaker permet aux clients qui utilisent Kubernetes comme plan de contrôle de tirer parti des composants d'inférence lors du déploiement de leurs modèles sur SageMaker.

Dans cet article, nous montrons comment utiliser les opérateurs SageMaker ACK pour déployer les composants d'inférence SageMaker.

Comment fonctionne ACK

Démontrer comment fonctionne ACK, regardons un exemple utilisant Service de stockage simple Amazon (Amazon S3). Dans le diagramme suivant, Alice est notre utilisateur Kubernetes. Son application dépend de l'existence d'un bucket S3 nommé my-bucket.

Comment fonctionne ACK

Le flux de travail comprend les étapes suivantes :

  1. Alice appelle kubectl apply, en transmettant un fichier qui décrit un Kubernetes ressource personnalisée décrivant son compartiment S3. kubectl apply transmet ce fichier, appelé un manifeste, au serveur API Kubernetes exécuté dans le nœud du contrôleur Kubernetes.
  2. Le serveur API Kubernetes reçoit le manifeste décrivant le compartiment S3 et détermine si Alice a autorisations pour créer une ressource personnalisée de genre s3.services.k8s.aws/Bucket, et que la ressource personnalisée est correctement formatée.
  3. Si Alice est autorisée et que la ressource personnalisée est valide, le serveur API Kubernetes écrit la ressource personnalisée dans son etcd magasin de données.
  4. Il répond ensuite à Alice que la ressource personnalisée a été créée.
  5. À ce stade, le service ACK contrôleur pour Amazon S3, qui s'exécute sur un nœud de travail Kubernetes dans le contexte d'un Kubernetes normal Cosse, est informé qu'une nouvelle ressource personnalisée de type s3.services.k8s.aws/Bucket a été créé.
  6. Le contrôleur de service ACK pour Amazon S3 communique ensuite avec l'API Amazon S3, en appelant le API S3 CreateBucket pour créer le compartiment dans AWS.
  7. Après avoir communiqué avec l'API Amazon S3, le contrôleur de service ACK appelle le serveur API Kubernetes pour mettre à jour les paramètres de la ressource personnalisée. statuts avec les informations reçues d'Amazon S3.

Éléments essentiels

Les nouvelles capacités d'inférence s'appuient sur les points de terminaison d'inférence en temps réel de SageMaker. Comme auparavant, vous créez le point de terminaison SageMaker avec une configuration de point de terminaison qui définit le type d'instance et le nombre d'instances initial pour le point de terminaison. Le modèle est configuré dans une nouvelle construction, un composant d'inférence. Ici, vous spécifiez le nombre d'accélérateurs et la quantité de mémoire que vous souhaitez allouer à chaque copie d'un modèle, ainsi que les artefacts du modèle, l'image du conteneur et le nombre de copies de modèle à déployer.

Vous pouvez utiliser les nouvelles fonctionnalités d'inférence de Amazon SageMakerStudio, Kit de développement logiciel (SDK) SageMaker Python, SDK AWSet Interface de ligne de commande AWS (AWS CLI). Ils sont également soutenus par AWS CloudFormation. Maintenant, vous pouvez également les utiliser avec Opérateurs SageMaker pour Kubernetes.

Vue d'ensemble de la solution

Pour cette démo, nous utilisons le contrôleur SageMaker pour déployer une copie du Modèle Dolly v2 7B et une copie du Modèle FLAN-T5 XXL du Hub de modèle de visage étreignant sur un point de terminaison en temps réel SageMaker à l'aide des nouvelles fonctionnalités d'inférence.

Pré-requis

Pour suivre, vous devez disposer d'un cluster Kubernetes avec le contrôleur SageMaker ACK v1.2.9 ou supérieur installé. Pour obtenir des instructions sur la façon de provisionner un Service Amazon Elastic Kubernetes (Amazon EKS) avec Cloud de calcul élastique Amazon (Amazon EC2) Nœuds gérés Linux utilisant eksctl, voir Premiers pas avec Amazon EKS – eksctl. Pour obtenir des instructions sur l'installation du contrôleur SageMaker, reportez-vous à Apprentissage automatique avec le contrôleur ACK SageMaker.

Vous devez accéder à des instances accélérées (GPU) pour héberger les LLM. Cette solution utilise une instance de ml.g5.12xlarge ; vous pouvez vérifier la disponibilité de ces instances dans votre compte AWS et demander ces instances si nécessaire via une demande d'augmentation des quotas de service, comme indiqué dans la capture d'écran suivante.

Demande d'augmentation des quotas de service

Créer un composant d'inférence

Pour créer votre composant d'inférence, définissez le EndpointConfig, Endpoint, Modelet InferenceComponent Fichiers YAML, similaires à ceux présentés dans cette section. Utiliser kubectl apply -f <yaml file> pour créer les ressources Kubernetes.

Vous pouvez lister l'état de la ressource via kubectl describe <resource-type>; par exemple, kubectl describe inferencecomponent.

Vous pouvez également créer le composant d'inférence sans ressource de modèle. Reportez-vous aux conseils fournis dans le Documentation de l'API pour plus de détails.

EndpointConfig YAML

Voici le code du fichier 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 du point de terminaison

Voici le code du fichier Endpoint :

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

Modèle YAML

Voici le code du fichier modèle :

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 du composant d'inférence

Dans les fichiers YAML suivants, étant donné que l'instance ml.g5.12xlarge est livrée avec 4 GPU, nous allouons 2 GPU, 2 CPU et 1,024 XNUMX Mo de mémoire à chaque modèle :

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

Invoquer des modèles

Vous pouvez maintenant appeler les modèles à l'aide du code suivant :

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)

Mettre à jour un composant d'inférence

Pour mettre à jour un composant d'inférence existant, vous pouvez mettre à jour les fichiers YAML, puis utiliser kubectl apply -f <yaml file>. Voici un exemple de fichier mis à jour :

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

Supprimer un composant d'inférence

Pour supprimer un composant d'inférence existant, utilisez la commande kubectl delete -f <yaml file>.

Disponibilité et prix

Les nouvelles fonctionnalités d'inférence SageMaker sont disponibles aujourd'hui dans les régions AWS USA Est (Ohio, Virginie du Nord), USA Ouest (Oregon), Asie-Pacifique (Jakarta, Mumbai, Séoul, Singapour, Sydney, Tokyo), Canada (Centre), Europe ( Francfort, Irlande, Londres, Stockholm), Moyen-Orient (EAU) et Amérique du Sud (São Paulo). Pour plus de détails sur les prix, visitez Tarification d'Amazon SageMaker.

Conclusion

Dans cet article, nous avons montré comment utiliser les opérateurs SageMaker ACK pour déployer les composants d'inférence SageMaker. Lancez votre cluster Kubernetes et déployez vos FM à l'aide des nouvelles capacités d'inférence de SageMaker dès aujourd'hui !


À propos des auteurs

Rajesh Ramchander est ingénieur principal en ML dans les services professionnels chez AWS. Il aide les clients à différentes étapes de leur parcours IA/ML et GenAI, de ceux qui débutent jusqu'à ceux qui dirigent leur entreprise avec une stratégie axée sur l'IA.

Amit Arora est un architecte spécialiste de l'IA et du ML chez Amazon Web Services, aidant les entreprises clientes à utiliser des services d'apprentissage automatique basés sur le cloud pour faire évoluer rapidement leurs innovations. Il est également chargé de cours auxiliaire dans le cadre du programme de science et d'analyse des données MS à l'Université de Georgetown à Washington DC.

Suryansh Singh est ingénieur en développement logiciel chez AWS SageMaker et travaille au développement de solutions d'infrastructure distribuées par ML pour les clients AWS à grande échelle.

Saurabh Trikandé est chef de produit senior pour Amazon SageMaker Inference. Il est passionné par le travail avec les clients et est motivé par l'objectif de démocratiser l'apprentissage automatique. Il se concentre sur les principaux défis liés au déploiement d'applications ML complexes, de modèles ML multi-locataires, d'optimisations de coûts et de rendre le déploiement de modèles d'apprentissage en profondeur plus accessible. Dans ses temps libres, Saurabh aime faire de la randonnée, découvrir des technologies innovantes, suivre TechCrunch et passer du temps avec sa famille.

Johna LiuJohna Liu est ingénieur en développement logiciel au sein de l'équipe Amazon SageMaker. Son travail actuel vise à aider les développeurs à héberger efficacement des modèles d'apprentissage automatique et à améliorer les performances d'inférence. Elle est passionnée par l'analyse de données spatiales et l'utilisation de l'IA pour résoudre des problèmes de société.

spot_img

Dernières informations

spot_img

Discutez avec nous

Salut! Comment puis-je t'aider?