[ad_1]

Nos complace anunciar una nueva versión de Amazon SageMaker Operadores para Kubernetes que utilizan Controladores AWS para Kubernetes (ACK). ACK es un marco para crear controladores Kubernetes personalizados, donde cada controlador se comunica con una API de servicio de AWS. Estos controladores permiten a los usuarios de Kubernetes aprovisionar fácilmente recursos de AWS, como depósitos, bases de datos o colas de mensajes, a través de la API de Kubernetes.

La versión 1.2.9 de SageMaker ACK Operadores agrega soporte para componentes de inferencia que anteriormente solo estaban disponibles a través de la API de SageMaker y los kits de desarrollo de software (SDK) de AWS. Los componentes de inferencia pueden ayudarle a optimizar los costos de implementación y reducir la latencia. Las nuevas funciones del componente de inferencia le permiten implementar uno o más modelos base (FM) en el mismo punto final de Amazon SageMaker y controlar cuántos aceleradores y cuánto almacenamiento están reservados para cada FM. Esto ayuda a mejorar la utilización de recursos, reduce los costos de implementación del modelo en un 50 % en promedio y le permite escalar los puntos finales junto con sus casos de uso. Para obtener más detalles, consulte Amazon SageMaker agrega nuevas capacidades de inferencia para reducir el costo de implementación y la latencia del modelo base.

La disponibilidad de componentes de inferencia a través del controlador SageMaker permite a los clientes que utilizan Kubernetes como plano de control aprovechar los componentes de inferencia mientras implementan sus modelos en SageMaker.

En esta publicación, mostramos cómo utilizar los operadores ACK de SageMaker para proporcionar componentes de inferencia de SageMaker.

¿Cómo funciona ACK?

Para ilustrar cómo funciona ACK, veamos un ejemplo que utiliza Amazon Simple Storage Service (Amazon S3). En el siguiente diagrama, Alice es nuestra usuaria de Kubernetes. Su aplicación depende de la existencia de un depósito S3 llamado my-bucket.

¿Cómo funciona ACK?

El flujo de trabajo consta de los siguientes pasos:

  1. Alicia llama kubectl applyy pasa un archivo que describe un recurso de Kubernetes personalizado que describe su depósito S3. kubectl apply pasa este archivo, llamado manifiesto, al servidor API de Kubernetes que se ejecuta en el nodo del controlador de Kubernetes.
  2. El servidor API de Kubernetes recibe el manifiesto que describe el depósito de S3 y determina si Alice tiene permisos para crear un recurso personalizado de este tipo. s3.services.k8s.aws/Buckety que el recurso personalizado tenga el formato adecuado.
  3. Si Alice está autorizada y el recurso personalizado es válido, el servidor API de Kubernetes escribe el recurso personalizado en su servidor. etcd Almacenamiento de datos.
  4. Luego le responde a Alice que se ha creado el recurso personalizado.
  5. En este punto, el controlador de servicio ACK de Amazon S3 que se ejecuta en un nodo trabajador de Kubernetes en el contexto de un pod de Kubernetes normal recibe una notificación sobre un nuevo recurso personalizado de este tipo. s3.services.k8s.aws/Bucket Ha sido creado.
  6. Luego, el controlador de servicio ACK de Amazon S3 se comunica con la API de Amazon S3 y llama a la API CreateBucket de S3 para crear el depósito en AWS.
  7. Después de comunicarse con la API de Amazon S3, el controlador del servicio ACK llama al servidor API de Kubernetes para actualizar el estado del recurso personalizado con la información recibida de Amazon S3.

Componentes clave

Las nuevas capacidades de inferencia se basan en los puntos finales de inferencia en tiempo real de SageMaker. Como antes, crea el punto final de SageMaker con una configuración de punto final que define el tipo de instancia y el recuento de instancias inicial para el punto final. El modelo está configurado en una nueva construcción, un componente de inferencia. Aquí especifica la cantidad de aceleradores y la cantidad de almacenamiento que desea asignar a cada copia de un modelo, junto con los artefactos del modelo, la imagen del contenedor y la cantidad de copias del modelo que se implementarán.

Puede utilizar las nuevas capacidades de inferencia de Amazon SageMaker Studio, el SDK de SageMaker Python, los SDK de AWS y la interfaz de línea de comandos de AWS (AWS CLI). También cuentan con el respaldo de AWS CloudFormation. Ahora también puedes usarlos con los operadores de SageMaker para Kubernetes.

Descripción general de la solución

Para esta demostración, usaremos el controlador SageMaker para implementar una copia del modelo Dolly v2 7B y una copia del modelo FLAN-T5 XXL desde Hugging Face Model Hub en un punto final en tiempo real de SageMaker usando las nuevas capacidades de inferencia.

requisitos

Para participar, debe tener instalado un clúster de Kubernetes con SageMaker ACK Controller v1.2.9 o posterior. Para obtener instrucciones sobre cómo implementar un clúster de Amazon Elastic Kubernetes Service (Amazon EKS) con nodos administrados por Linux de Amazon Elastic Compute Cloud (Amazon EC2) mediante eksctl, consulte Introducción a Amazon EKS – eksctl. Para obtener instrucciones sobre cómo instalar el controlador SageMaker, consulte Aprendizaje automático con el controlador ACK SageMaker.

Para alojar los LLM, necesita acceso a instancias aceleradas (GPU). Esta solución utiliza una instancia de ml.g5.12xlarge; Puede verificar la disponibilidad de estas instancias en su cuenta de AWS y, si es necesario, solicitarlas mediante una solicitud de aumento de cuota de servicio, como se muestra en la siguiente captura de pantalla.

Solicitud de aumento de cuotas de servicios

Crear un componente de inferencia

Para crear su componente de inferencia, defina el EndpointConfig, Endpoint, ModelY InferenceComponent Archivos YAML similares a los que se muestran en esta sección. Usar kubectl apply -f <yaml file> para crear los recursos de Kubernetes.

Puede enumerar el estado del recurso a través de kubectl describe <resource-type>; Por ejemplo, kubectl describe inferencecomponent.

También puede crear el componente de inferencia sin un recurso de modelo. Para obtener más detalles, consulte las instrucciones en la documentación de la API.

EndpointConfig YAML

El siguiente es el código para el archivo 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

Punto final YAML

El siguiente es el código para el archivo de punto final:

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

Modelo YAML

El siguiente es el código para el archivo modelo:

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 de componentes de inferencia

En los siguientes archivos YAML, asignamos 2 GPU, 2 CPU y 1024 MB de memoria a cada modelo porque la instancia ml.g5.12xlarge tiene 4 GPU:

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

Llamar modelos

Ahora puedes llamar a los modelos con el siguiente código:

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)

Actualizar un componente de inferencia

Para actualizar un componente de inferencia existente, puede actualizar los archivos YAML y luego usarlos kubectl apply -f <yaml file>. El siguiente es un ejemplo de un archivo actualizado:

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

Eliminar un componente de inferencia

Para eliminar un componente de inferencia existente, use el comando kubectl delete -f <yaml file>.

Disponibilidad y precios

Las nuevas funciones de inferencia de SageMaker ahora están disponibles en las regiones de AWS del Este de EE. UU. (Ohio, Virginia del Norte), Oeste de EE. UU. (Oregón), Asia Pacífico (Yakarta, Mumbai, Seúl, Singapur, Sydney, Tokio), Canadá (Central) y Europa. disponible. Frankfurt, Irlanda, Londres, Estocolmo), Oriente Medio (EAU) y América del Sur (São Paulo). Para obtener detalles sobre los precios, consulte Precios de Amazon SageMaker.

Diploma

En esta publicación, mostramos cómo utilizar los operadores ACK de SageMaker para proporcionar componentes de inferencia de SageMaker. ¡Lance su clúster de Kubernetes hoy e implemente sus FM con las nuevas capacidades de inferencia de SageMaker!


Sobre los autores

Rajesh Ramchander es ingeniero principal de ML en servicios profesionales en AWS. Apoya a los clientes en varias etapas de sus viajes hacia AI/ML y GenAI, desde aquellos que recién comienzan hasta aquellos que lideran su negocio con una estrategia que prioriza la IA.

Amit Arora es un arquitecto especialista en inteligencia artificial y aprendizaje automático en Amazon Web Services, que ayuda a los clientes empresariales a aprovechar los servicios de aprendizaje automático basados ​​en la nube para escalar rápidamente sus innovaciones. También es instructor adjunto en el programa MS Data Science and Analytics de la Universidad de Georgetown en Washington DC.

Suryansh Singh es ingeniero de desarrollo de software en AWS SageMaker y trabaja para desarrollar soluciones de infraestructura distribuida de aprendizaje automático para clientes de AWS a escala.

Saurabh Trikande es gerente senior de productos de Amazon SageMaker Inference. Le apasiona trabajar con los clientes y su objetivo es democratizar el aprendizaje automático. Se centra en los desafíos principales asociados con la implementación de aplicaciones complejas de aprendizaje automático, modelos de aprendizaje automático multiinquilino, optimizaciones de costos y cómo hacer que los modelos de aprendizaje profundo sean más accesibles. En su tiempo libre, Saurabh disfruta hacer senderismo, aprender sobre tecnologías innovadoras, seguir TechCrunch y pasar tiempo con su familia.

Juana LiuJuana Liu es ingeniero de desarrollo de software en el equipo de Amazon SageMaker. Su trabajo actual se centra en ayudar a los desarrolladores a alojar de manera eficiente modelos de aprendizaje automático y mejorar el rendimiento de la inferencia. Le apasiona el análisis de datos espaciales y el uso de la IA para resolver problemas sociales.

[ad_2]