As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Implante modelos com o TorchServe
O TorchServe é o servidor modelo recomendado para o PyTorch, pré-instalado no contêiner de aprendizado profundo (DLC) do PyTorch da AWS. Essa ferramenta poderosa oferece aos clientes uma experiência consistente e fácil de usar, oferecendo alto desempenho na implantação de vários modelos do PyTorch em várias instâncias da AWS, incluindo CPU, GPU, Neuron e Graviton, independentemente do tamanho ou da distribuição do modelo.
O TorchServe oferece apoio a uma ampla variedade de atributos avançados, incluindo lotes dinâmicos, microlotes, teste de modelo A/B, streaming, torch XLA, TensorRT, ONNX e IPEX. Ele também integra perfeitamente a solução de modelos grandes do PyTorch, o PiPPy, permitindo o manuseio eficiente de modelos grandes. Além disso, o TorchServe estende seu compatibilidade com bibliotecas de código aberto mais conhecidas, como DeepSpeed, Accelerate, Fast Transformers e muito mais, expandindo ainda mais seus recursos. Com o TorchServe, os usuários da AWS podem implantar e servir com confiança seus modelos do PyTorch, aproveitando sua versatilidade e desempenho otimizado em várias configurações de hardware e tipos de modelo. Para obter informações mais detalhadas, você pode consultar a documentação do PyTorch
A tabela a seguir lista os DLCs do PyTorch da AWS compatíveis com o TorchServe.
| Tipo de instância | Link do DLC do PyTorch do SageMaker AI |
|---|---|
CPU e GPU |
|
Neuron |
|
Graviton |
As seções a seguir descrevem a configuração para criar e testar DLCs do PyTorch no Amazon SageMaker AI.
Começar
Para começar, verifique se você tem os seguintes pré-requisitos:
-
Verifique se você tem acesso a uma conta da AWS. Configure seu ambiente para que a AWS CLI possa acessar sua conta por meio de um usuário do IAM da AWS ou de um perfil do IAM. Recomendamos usar uma perfil do IAM. Para fins de teste em sua conta pessoal, você pode anexar as seguintes políticas de permissões gerenciadas à perfil do IAM:
-
Configure localmente suas dependências, conforme mostrado no seguinte exemplo:
from datetime import datetime import os import json import logging import time # External Dependencies: import boto3 from botocore.exceptions import ClientError import sagemaker sess = boto3.Session() sm = sess.client("sagemaker") region = sess.region_name account = boto3.client("sts").get_caller_identity().get("Account") smsess = sagemaker.Session(boto_session=sess) role = sagemaker.get_execution_role() # Configuration: bucket_name = smsess.default_bucket() prefix = "torchserve" output_path = f"s3://{bucket_name}/{prefix}/models" print(f"account={account}, region={region}, role={role}") -
Recupere a imagem do DLC do PyTorch, conforme mostrado no exemplo a seguir.
As imagens do DLC do PyTorch do SageMaker AI estão disponíveis em todas as regiões da AWS. Para obter mais informações, consulte a lista de imagens de contêineres do DLC
. baseimage = sagemaker.image_uris.retrieve( framework="pytorch", region="<region>", py_version="py310", image_scope="inference", version="2.0.1", instance_type="ml.g4dn.16xlarge", ) -
Crie um espaço de trabalho local.
mkdir -p workspace/
Adição de um pacote
As seções a seguir descrevem como adicionar e pré-instalar pacotes na sua imagem do DLC do PyTorch.
Casos de uso do BYOC
As etapas a seguir descrevem como adicionar um pacote à sua imagem do DLC do PyTorch. Para obter mais informações sobre como personalizar seu contêiner, consulte Criação de imagens personalizadas dos contêineres de aprendizado profundo da AWS
-
Suponha que você queira adicionar um pacote à imagem do docker do DLC do PyTorch. Crie um Dockerfile no diretório
docker, conforme mostrado no seguinte exemplo:mkdir -p workspace/docker cat workspace/docker/Dockerfile ARG BASE_IMAGE FROM $BASE_IMAGE #Install any additional libraries RUN pip install transformers==4.28.1 -
Crie e publique a imagem do docker personalizada usando o script build_and_push.sh
a seguir. # Download script build_and_push.sh to workspace/docker ls workspace/docker build_and_push.sh Dockerfile # Build and publish your docker image reponame = "torchserve" versiontag = "demo-0.1" ./build_and_push.sh {reponame} {versiontag} {baseimage} {region} {account}
Casos de uso de pré-instalação do SageMaker AI
O exemplo a seguir mostra como pré-instalar um pacote no seu contêiner do DLC do PyTorch. Você deve criar um arquivo requirements.txt localmente no diretório workspace/code.
mkdir -p workspace/code cat workspace/code/requirements.txt transformers==4.28.1
Crie artefatos do modelo TorchServe
No exemplo a seguir, usamos o modelo MNISTworkspace/mnist, implementamos mnist_handler.pytorch-model-archiver para criar os artefatos do modelo e carregar no Amazon S3.
-
Configure os parâmetros do modelo em
model-config.yaml.ls -al workspace/mnist-dev mnist.py mnist_handler.py mnist_cnn.pt model-config.yaml # config the model cat workspace/mnist-dev/model-config.yaml minWorkers: 1 maxWorkers: 1 batchSize: 4 maxBatchDelay: 200 responseTimeout: 300 -
Crie os artefatos do modelo usando torch-model-archiver
. torch-model-archiver --model-name mnist --version 1.0 --model-file workspace/mnist-dev/mnist.py --serialized-file workspace/mnist-dev/mnist_cnn.pt --handler workspace/mnist-dev/mnist_handler.py --config-file workspace/mnist-dev/model-config.yaml --archive-format tgzSe quiser pré-instalar um pacote, você deve incluir o diretório
codeno arquivotar.gz.cd workspace torch-model-archiver --model-name mnist --version 1.0 --model-file mnist-dev/mnist.py --serialized-file mnist-dev/mnist_cnn.pt --handler mnist-dev/mnist_handler.py --config-file mnist-dev/model-config.yaml --archive-format no-archive cd mnist mv ../code . tar cvzf mnist.tar.gz . -
Carregue
mnist.tar.gzno Amazon S3.# upload mnist.tar.gz to S3 output_path = f"s3://{bucket_name}/{prefix}/models" aws s3 cp mnist.tar.gz {output_path}/mnist.tar.gz
Uso de endpoints de modelo único para implantar com o TorchServe
O exemplo a seguir mostra como criar um endpoint de inferência em tempo real de modelo único, implantar o modelo no endpoint e testar o endpoint usando o Amazon SageMaker Python SDK
from sagemaker.model import Model from sagemaker.predictor import Predictor # create the single model endpoint and deploy it on SageMaker AI model = Model(model_data = f'{output_path}/mnist.tar.gz', image_uri = baseimage, role = role, predictor_cls = Predictor, name = "mnist", sagemaker_session = smsess) endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) predictor = model.deploy(instance_type='ml.g4dn.xlarge', initial_instance_count=1, endpoint_name = endpoint_name, serializer=JSONSerializer(), deserializer=JSONDeserializer()) # test the endpoint import random import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} res = predictor.predict(dummy_data)
Usando endpoints multimodelo para implantar com o TorchServe
Os endpoints multimodelo são uma solução escalável e econômica para a hospedagem de um grande número de modelos atrás de um endpoint. Eles melhoram a utilização do endpoint compartilhando a mesma frota de recursos e contêiner de serviço para hospedar todos os seus modelos. Eles também reduzem as despesas indiretas de implantação porque o SageMaker AI gerencia dinamicamente o carregamento e o descarregamento de modelos, além de escalar recursos com base em padrões de tráfego. Os endpoints multimodelo são particularmente úteis para modelos de aprendizado profundo e IA generativa que exigem poder computacional acelerado.
Ao usar o TorchServe nos endpoints multimodelo do SageMaker AI, você pode acelerar seu desenvolvimento usando uma pilha de serviços que já conhece e, ao mesmo tempo, utilizar o compartilhamento de recursos e o gerenciamento simplificado de modelos que os endpoints multimodelo do SageMaker AI oferecem.
O exemplo a seguir mostra como criar um endpoint multimodelo, implantar o modelo ao endpoint, e testar o endpoint usando o Amazon SageMaker Python SDK
from sagemaker.multidatamodel import MultiDataModel from sagemaker.model import Model from sagemaker.predictor import Predictor # create the single model endpoint and deploy it on SageMaker AI model = Model(model_data = f'{output_path}/mnist.tar.gz', image_uri = baseimage, role = role, sagemaker_session = smsess) endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) mme = MultiDataModel( name = endpoint_name, model_data_prefix = output_path, model = model, sagemaker_session = smsess) mme.deploy( initial_instance_count = 1, instance_type = "ml.g4dn.xlarge", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer()) # list models list(mme.list_models()) # create mnist v2 model artifacts cp mnist.tar.gz mnistv2.tar.gz # add mnistv2 mme.add_model(mnistv2.tar.gz) # list models list(mme.list_models()) predictor = Predictor(endpoint_name=mme.endpoint_name, sagemaker_session=smsess) # test the endpoint import random import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} res = predictor.predict(date=dummy_data, target_model="mnist.tar.gz")
Métricas
O TorchServe oferece apoio a métricas tanto no nível do sistema quanto no nível do modelo. Você pode ativar métricas no modo de formato de log ou no modo do Prometheus por meio da variável de ambiente TS_METRICS_MODE. Você pode usar o arquivo de configuração central de métricas do TorchServe metrics.yaml para especificar os tipos de métricas a serem rastreadas, como contagens de solicitações, latência, uso de memória, utilização de GPU e muito mais. Ao consultar esse arquivo, você pode obter informações sobre o desempenho e a integridade dos modelos implantados e monitorar com eficácia o comportamento do servidor TorchServe em tempo real. Para obter informações mais detalhadas, consulte a documentação de métricas do TorchServe
Você pode acessar os logs de métricas do TorchServe semelhantes ao formato do StatsD por meio do filtro de log do Amazon CloudWatch Logs. Veja a seguir um exemplo de log de métricas do TorchServe:
CPUUtilization.Percent:0.0|#Level:Host|#hostname:my_machine_name,timestamp:1682098185 DiskAvailable.Gigabytes:318.0416717529297|#Level:Host|#hostname:my_machine_name,timestamp:1682098185