Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Implementa modelli con TorchServe
TorchServe è il server modello consigliato per PyTorch, preinstallato nel PyTorch Deep Learning Container di AWS (DLC). Questo potente strumento offre ai clienti un'esperienza coerente e intuitiva che fornisce prestazioni elevate nell'implementazione di più modelli PyTorch su varie istanze AWS, ivi compresi CPU, GPU, Neuron e Graviton, indipendentemente dall'implementazione o dalle dimensioni dei modelli.
TorchServe supporta un'ampia gamma di funzionalità avanzate, tra cui la creazione dinamica di batch, il microbatching, i test A/B dei modelli, lo streaming, torch XLA, TensorRT, ONNX e IPEX. Inoltre, integra perfettamente la soluzione per modelli di grandi dimensioni di PyTorch, PiPPY, consentendo una gestione efficiente di modelli di grandi dimensioni. Inoltre, TorchServe estende il suo supporto alle librerie open source più diffuse come DeepSpeed, Accelerate, Fast Transformers e altre, ampliando ulteriormente le sue funzionalità. Con TorchServe, gli utenti AWS possono implementare e fornire con sicurezza i propri modelli PyTorch, sfruttandone la versatilità e le prestazioni ottimizzate su varie configurazioni hardware e tipi di modelli. Per informazioni più dettagliate, è possibile consultare la documentazione di PyTorch
La tabella seguente elenca le DLC PyTorch AWS supportate da TorchServe.
| Tipo di istanza | Link al DLC PyTorch di SageMaker AI |
|---|---|
CPU e GPU |
|
Neuron |
|
Graviton |
Le seguenti sezioni descrivono la configurazione per creare e testare i DLC PyTorch su Amazon SageMaker AI.
Nozioni di base
Per iniziare, assicurati di rispettare i seguenti prerequisiti:
-
Assicurati di avere accesso a un account AWS. Configura il tuo ambiente in modo tale che AWS CLI possa accedere al tuo account tramite un ruolo IAM o un utente IAM AWS. Consigliamo di utilizzare un ruolo IAM. Ai fini del test nel tuo account personale, puoi collegare le seguenti policy di autorizzazione gestita al ruolo IAM:
-
Configurazione locale delle dipendenze, come indicato nell'esempio seguente:
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}") -
Recupera l'immagine delle DLC PyTorch, come mostrato nell'esempio seguente.
Le immagini del DLC PyTorch di SageMaker AI sono disponibili in tutte le Regioni AWS. Per ulteriori informazioni, consulta l'elenco di immagini dei container 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", ) -
Creare un'area di lavoro locale
mkdir -p workspace/
Aggiunta di un pacchetto
Le seguenti sezioni descrivono come aggiungere e preinstallare pacchetti all'immagine della DLC PyTorch.
Casi d'uso di BYOC
Nelle istruzioni seguenti viene descritto come aggiungere un pacchetto alla propria immagine della DLC PyTorch. Per ulteriori informazioni sulla personalizzazione del proprio container, consulta Creazione di immagini personalizzate di container di Deep Learning di AWS
-
Supponiamo di voler aggiungere un pacchetto all'immagine docker della DLC PyTorch. Crea un Dockerfile nella directory
docker, come mostrato nell'esempio seguente: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 -
Crea e pubblica l'immagine docker personalizzata utilizzando il seguente script build_and_push.sh
. # 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}
Casi d’uso di preinstallazione di SageMaker AI
Nell'esempio seguente viene illustrato come preinstallare un pacchetto nel container della DLC PyTorch. È necessario creare un file requirements.txt localmente nella directory workspace/code.
mkdir -p workspace/code cat workspace/code/requirements.txt transformers==4.28.1
Crea artefatti del modello TorchServe
Nel seguente esempio, utilizziamo il modello MNIST pre-addestrato.workspace/mnist, implementiamo mnist_handler.pytorch-model-archiver per creare gli artefatti del modello e caricarli su Amazon S3.
-
Configura i parametri del modello in
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 -
Realizza gli artefatti del modello 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 si desidera preinstallare un pacchetto, è necessario includere la directory
codenel filetar.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 . -
Carica
mnist.tar.gzAmazon 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
Utilizzo di endpoint a modello singolo da implementare con TorchServe
L'esempio seguente mostra come creare un endpoint di inferenza in tempo reale a modello singolo, implementare il modello sull'endpoint e testarlo utilizzando 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)
Utilizzo di endpoint multi-modello da implementare con TorchServe
Gli endpoint multi-modello costituiscono una soluzione scalabile ed economica per l'hosting di un numero elevato di modelli dietro un unico endpoint. Migliorano l'utilizzo degli endpoint condividendo lo stesso parco di risorse e fornendo container per l'hosting di tutti i tuoi modelli. Riducono inoltro il sovraccarico di implementazione, perché SageMaker AI gestisce dinamicamente il caricamento e lo scaricamento dei modelli, oltre a scalare le risorse in base ai pattern di traffico. Gli endpoint multimodello sono particolarmente utili per i modelli di deep learning e di intelligenza artificiale generativa che richiedono una potenza di calcolo accelerata.
Utilizzando TorchServe sugli endpoint multi-modello di SageMaker AI, puoi velocizzare lo sviluppo con uno stack di distribuzione con cui hai dimestichezza, sfruttando al contempo la condivisione delle risorse e la gestione semplificata dei modelli fornite dagli endpoint multi-modello di SageMaker AI.
L'esempio seguente mostra come creare un endpoint multi-modello, implementare il modello sull'endpoint e testare l'endpoint utilizzando 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")
Metriche
TorchServe supporta parametri sia a livello di sistema che a livello di modello. È possibile abilitare i parametri in modalità formato log o in modalità Prometheus tramite la variabile di ambiente TS_METRICS_MODE. È possibile utilizzare il file di configurazione dei parametri centrali TorchServe metrics.yaml per specificare i tipi di parametri da tracciare, come il conteggio delle richieste, la latenza, l'utilizzo della memoria, l'utilizzo della GPU e altro. Facendo riferimento a questo file, è possibile ottenere informazioni sulle prestazioni e sullo stato dei modelli implementati e monitorare efficacemente il comportamento del server TorchServe in tempo reale. Per informazioni più dettagliate, consulta la documentazione sui parametri di TorchServe
È possibile accedere ai log dei parametri di TorchServe simili al formato StatSD tramite il filtro Amazon CloudWatch log. Di seguito è riportato un esempio di log dei parametri 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