Inteligência de dados generativa

Use operadores do Kubernetes para obter novos recursos de inferência no Amazon SageMaker que reduzem os custos de implantação do LLM em 50%, em média | Amazon Web Services

Data:

Temos o prazer de anunciar uma nova versão do Operadores do Amazon SageMaker para Kubernetes usando o Controladores AWS para Kubernetes (ACK). ACK é uma estrutura para construção de controladores personalizados do Kubernetes, onde cada controlador se comunica com uma API de serviço da AWS. Esses controladores permitem que os usuários do Kubernetes provisionem recursos da AWS, como buckets, bancos de dados ou filas de mensagens, simplesmente usando a API do Kubernetes.

Solte v1.2.9 dos operadores ACK do SageMaker adiciona suporte para componentes de inferência, que até agora estavam disponíveis apenas por meio da API SageMaker e dos AWS Software Development Kits (SDKs). Os componentes de inferência podem ajudá-lo a otimizar os custos de implantação e reduzir a latência. Com os novos recursos do componente de inferência, você pode implantar um ou mais modelos básicos (FMs) no mesmo Amazon Sage Maker endpoint e controlar quantos aceleradores e quanta memória é reservada para cada FM. Isso ajuda a melhorar a utilização de recursos, reduz os custos de implantação de modelos em 50%, em média, e permite escalar endpoints junto com seus casos de uso. Para mais detalhes, consulte O Amazon SageMaker adiciona novos recursos de inferência para ajudar a reduzir os custos e a latência de implantação do modelo básico.

A disponibilidade de componentes de inferência por meio do controlador SageMaker permite que os clientes que usam Kubernetes como plano de controle aproveitem os componentes de inferência enquanto implantam seus modelos no SageMaker.

Nesta postagem, mostramos como usar os operadores ACK do SageMaker para implantar componentes de inferência do SageMaker.

Como funciona o ACK

Para demonstrar como funciona o ACK, vejamos um exemplo usando Serviço de armazenamento simples da Amazon (Amazon S3). No diagrama a seguir, Alice é nossa usuária do Kubernetes. Sua aplicação depende da existência de um bucket S3 denominado my-bucket.

Como funciona o ACK

O fluxo de trabalho consiste nas seguintes etapas:

  1. Alice emite uma chamada para kubectl apply, passando um arquivo que descreve um Kubernetes recurso personalizado descrevendo seu balde S3. kubectl apply passa esse arquivo, chamado de manifestar, para o servidor API do Kubernetes em execução no nó do controlador do Kubernetes.
  2. O servidor da API Kubernetes recebe o manifesto que descreve o bucket S3 e determina se Alice possui permissões para criar um recurso personalizado de tipo s3.services.k8s.aws/Buckete se o recurso personalizado está formatado corretamente.
  3. Se Alice estiver autorizada e o recurso personalizado for válido, o servidor da API Kubernetes grava o recurso personalizado em seu etcd banco de dados.
  4. Em seguida, ele responde a Alice que o recurso personalizado foi criado.
  5. Neste ponto, o serviço ACK controlador para Amazon S3, que está sendo executado em um nó de trabalho do Kubernetes no contexto de um Kubernetes normal Vagem, é notificado de que um novo recurso personalizado do tipo s3.services.k8s.aws/Bucket foi criado.
  6. O controlador de serviço ACK do Amazon S3 se comunica então com a API do Amazon S3, chamando o API S3 CreateBucket para criar o bucket na AWS.
  7. Depois de se comunicar com a API do Amazon S3, o controlador de serviço ACK chama o servidor da API do Kubernetes para atualizar o recurso personalizado estado com informações recebidas do Amazon S3.

Componentes chave

Os novos recursos de inferência baseiam-se nos terminais de inferência em tempo real do SageMaker. Como antes, você cria o endpoint SageMaker com uma configuração de endpoint que define o tipo de instância e a contagem inicial de instâncias do endpoint. O modelo se configura em um novo construto, um componente de inferência. Aqui, você especifica o número de aceleradores e a quantidade de memória que deseja alocar para cada cópia de um modelo, juntamente com os artefatos do modelo, a imagem do contêiner e o número de cópias do modelo a serem implantadas.

Você pode usar os novos recursos de inferência de Estúdio Amazon SageMaker, SDK Python do SageMaker, SDKs da AWS e Interface de linha de comando da AWS (AWS CLI). Eles também são apoiados por Formação da Nuvem AWS. Agora você também pode usá-los com Operadores SageMaker para Kubernetes.

Visão geral da solução

Para esta demonstração, usamos o controlador SageMaker para implantar uma cópia do Modelo Dolly v2 7B e uma cópia do Modelo FLAN-T5 XXL do Hub de modelo de rosto de abraço em um endpoint em tempo real do SageMaker usando os novos recursos de inferência.

Pré-requisitos

Para acompanhar, você deve ter um cluster Kubernetes com o controlador SageMaker ACK v1.2.9 ou superior instalado. Para obter instruções sobre como provisionar um Serviço Amazon Elastic Kubernetes (Amazon EKS) cluster com Amazon Elastic Compute Nuvem (Amazon EC2) Nós gerenciados pelo Linux usando eksctl, consulte Conceitos básicos do Amazon EKS – eksctl. Para obter instruções sobre como instalar o controlador SageMaker, consulte Aprendizado de máquina com o controlador ACK SageMaker.

Você precisa de acesso a instâncias aceleradas (GPUs) para hospedar os LLMs. Esta solução usa uma instância de ml.g5.12xlarge; você pode verificar a disponibilidade dessas instâncias em sua conta AWS e solicitá-las conforme necessário por meio de uma solicitação de aumento de cotas de serviço, conforme mostrado na captura de tela a seguir.

Solicitação de aumento de cotas de serviço

Crie um componente de inferência

Para criar seu componente de inferência, defina o EndpointConfig, Endpoint, Model e InferenceComponent Arquivos YAML, semelhantes aos mostrados nesta seção. Usar kubectl apply -f <yaml file> para criar os recursos do Kubernetes.

Você pode listar o status do recurso via kubectl describe <resource-type>; por exemplo, kubectl describe inferencecomponent.

Também é possível criar o componente de inferência sem um recurso de modelo. Consulte as orientações fornecidas no Documentação da API para mais detalhes.

EndpointConfig YAML

A seguir está o código do arquivo 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

Ponto final YAML

A seguir está o código do arquivo Endpoint:

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

A seguir está o código do arquivo 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

YAMLs de componente de inferência

Nos arquivos YAML a seguir, como a instância ml.g5.12xlarge vem com 4 GPUs, estamos alocando 2 GPUs, 2 CPUs e 1,024 MB de memória para cada modelo:

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

Invocar modelos

Agora você pode invocar os modelos usando o seguinte 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)

Atualizar um componente de inferência

Para atualizar um componente de inferência existente, você pode atualizar os arquivos YAML e depois usar kubectl apply -f <yaml file>. Veja a seguir um exemplo de arquivo atualizado:

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

Excluir um componente de inferência

Para excluir um componente de inferência existente, use o comando kubectl delete -f <yaml file>.

Disponibilidade e preços

Os novos recursos de inferência do SageMaker estão disponíveis hoje nas regiões da AWS Leste dos EUA (Ohio, Norte da Virgínia), Oeste dos EUA (Oregon), Ásia-Pacífico (Jacarta, Mumbai, Seul, Cingapura, Sydney, Tóquio), Canadá (Central), Europa ( Frankfurt, Irlanda, Londres, Estocolmo), Oriente Médio (Emirados Árabes Unidos) e América do Sul (São Paulo). Para detalhes de preços, visite Preços do Amazon SageMaker.

Conclusão

Nesta postagem, mostramos como usar os operadores ACK do SageMaker para implantar componentes de inferência do SageMaker. Ative seu cluster Kubernetes e implante seus FMs usando os novos recursos de inferência do SageMaker hoje mesmo!


Sobre os autores

Rajesh Ramchander é engenheiro principal de ML em serviços profissionais na AWS. Ele ajuda os clientes em vários estágios de sua jornada de IA/ML e GenAI, desde aqueles que estão apenas começando até aqueles que estão liderando seus negócios com uma estratégia que prioriza a IA.

Amit Arora é um arquiteto especialista em IA e ML na Amazon Web Services, ajudando clientes corporativos a usar serviços de aprendizado de máquina baseados em nuvem para dimensionar rapidamente suas inovações. Ele também é professor adjunto no programa de ciência e análise de dados MS na Georgetown University em Washington DC

Suryansh Singh é engenheiro de desenvolvimento de software na AWS SageMaker e trabalha no desenvolvimento de soluções de infraestrutura distribuídas por ML para clientes da AWS em escala.

Saurabh Trikande é gerente de produto sênior da Amazon SageMaker Inference. Ele é apaixonado por trabalhar com clientes e motivado pelo objetivo de democratizar o aprendizado de máquina. Ele se concentra nos principais desafios relacionados à implantação de aplicativos de ML complexos, modelos de ML multilocatários, otimizações de custo e à implantação de modelos de aprendizado profundo mais acessíveis. Em seu tempo livre, Saurabh gosta de caminhar, aprender sobre tecnologias inovadoras, seguir o TechCrunch e passar tempo com sua família.

Joana LiuJoana Liu é um engenheiro de desenvolvimento de software na equipe do Amazon SageMaker. Seu trabalho atual se concentra em ajudar os desenvolvedores a hospedar modelos de aprendizado de máquina com eficiência e melhorar o desempenho de inferência. Ela é apaixonada por análise de dados espaciais e usa IA para resolver problemas sociais.

local_img

Inteligência mais recente

local_img

Fale Conosco

Olá! Como posso ajudá-lo?