Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Déploiement de modèles avec TorchServe
TorchServe est le modèle de serveur recommandé pour PyTorch, préinstallé dans le conteneur de deep learning (DLC) AWS PyTorch. Ce puissant outil offre aux clients une expérience cohérente et conviviale, offrant des performances élevées lors du déploiement de plusieurs modèles PyTorch sur différentes instances AWS, notamment les CPU, les GPU, Neuron et Graviton, quelle que soit la taille ou la distribution du modèle.
TorchServe prend en charge un large éventail de fonctionnalités avancées, notamment le traitement par lots dynamiques, le traitement par micro-lots, les tests de modèles A/B, le streaming, Torch XLA, tensorRT, ONNX et IPEX. De plus, il intègre parfaitement la solution pour grands modèles de PyTorch, PiPPY, permettant une gestion efficace des grands modèles. De plus, TorchServe étend son support aux bibliothèques open source populaires telles que DeepSpeed, Accelerate, Fast Transformers, etc., élargissant ainsi encore ses capacités. Avec TorchServe, les utilisateurs AWS peuvent déployer et servir leurs modèles PyTorch en toute confiance, en tirant parti de sa polyvalence et de ses performances optimisées sur différentes configurations matérielles et types de modèles. Pour des informations plus détaillées, vous pouvez consulter la documentation de PyTorch
Le tableau suivant répertorie les conteneurs DLC AWS PyTorch pris en charge par TorchServe.
| Type d’instance | Lien vers les conteneurs DLC PyTorch SageMaker AI |
|---|---|
CPU et GPU |
|
Neuron |
|
Graviton |
Les sections suivantes décrivent la configuration pour créer et tester les conteneurs DLC PyTorch sur Amazon SageMaker AI.
Premiers pas
Avant de démarrer, vérifiez que les conditions préalables suivantes sont respectées :
-
Assurez-vous d'avoir accès à un compte AWS. Configurez votre environnement afin que l'AWS CLI puisse accéder à votre compte via un utilisateur IAM ou un rôle IAM AWS. Nous vous recommandons d'utiliser un rôle IAM. À des fins de test dans votre compte personnel, vous pouvez associer les politiques d'autorisations gérées suivantes au rôle IAM :
-
Configurez vos dépendances de façon locale, comme indiqué dans l'exemple suivant :
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}") -
Récupérez l'image du conteneur DLC PyTorch, comme indiqué dans l'exemple suivant.
Les images du conteneur DLC PyTorch SageMaker AI sont disponibles dans toutes les régions AWS. Pour plus d'informations, consultez la liste des images des conteneurs 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", ) -
Créez un espace de travail local.
mkdir -p workspace/
Ajout d'un package
Les sections suivantes expliquent comment ajouter et préinstaller des packages à votre image de conteneur DLC PyTorch.
Cas d'utilisation BYOC
Les étapes suivantes expliquent comment ajouter un package à votre image de conteneur DLC PyTorch. Pour plus d'informations sur la personnalisation de votre conteneur, consultez Création d'images personnalisées pour les conteneurs AWS Deep Learning
-
Supposons que vous souhaitiez ajouter un package à l'image docker du conteneur DLC PyTorch. Créez un Dockerfile dans le répertoire
docker, comme indiqué dans l'exemple suivant :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 -
Créez et publiez l'image Docker personnalisée à l'aide du script build_and_push.sh
suivant. # 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}
Cas d’utilisation de la préinstallation de SageMaker AI
L'exemple suivant vous montre comment préinstaller un package dans votre conteneur DLC PyTorch. Vous devez créer un fichier requirements.txt localement dans le répertoire workspace/code.
mkdir -p workspace/code cat workspace/code/requirements.txt transformers==4.28.1
Création d'artefacts de modèles TorchServe
Dans l'exemple suivant, nous utilisons le modèle MNISTworkspace/mnist, implémentons mnist_handler.pytorch-model-archiver pour créer les artefacts du modèle et les télécharger sur Amazon S3.
-
Configurez les paramètres du modèle dans
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 -
Créez les artefacts du modèle à l'aide de 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 tgzSi vous souhaitez préinstaller un package, vous devez inclure le répertoire
codedans le fichiertar.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 . -
Charger
mnist.tar.gzdans 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
Utilisation de points de terminaison à modèle unique pour le déploiement avec TorchServe
L'exemple suivant vous montre comment créer un point de terminaison d'inférence en temps réel à modèle unique, déployer le modèle sur le point de terminaison et tester le point de terminaison à l'aide du kit 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)
Utilisation de points de terminaison multimodèle pour le déploiement avec TorchServe
Les points de terminaison multimodèles offrent une solution évolutive et économique pour l'hébergement d'un grand nombre de modèles au-delà d'un point de terminaison. Ils améliorent l'utilisation des points de terminaison en partageant la même flotte de ressources et un conteneur de service pour héberger tous vos modèles. Ils réduisent également les frais de déploiement, car SageMaker AI gère le chargement et le déchargement dynamiques des modèles, ainsi que la mise à l’échelle des ressources en fonction des modèles de trafic. Les points de terminaison multimodèles sont particulièrement utiles pour le deep learning et les modèles d'IA générative qui nécessitent une puissance de calcul accélérée.
En utilisant TorchServe sur les points de terminaison multimodèles SageMaker AI, vous pouvez accélérer votre développement en utilisant une pile de service que vous connaissez bien, tout en tirant parti du partage des ressources et de la gestion simplifiée des modèles fournis par les points de terminaison multimodèles SageMaker AI.
L'exemple suivant vous montre comment créer un point de terminaison multimodèle, déployer le modèle sur le point de terminaison et tester le point de terminaison à l'aide du kit 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étriques
TorchServe prend en charge les métriques au niveau du système et au niveau du modèle. Vous pouvez activer les métriques en mode journal ou en mode Prometheus via la variable d'environnement TS_METRICS_MODE. Vous pouvez utiliser le fichier de configuration des métriques central TorchServe metrics.yaml pour spécifier les types de métriques à suivre, tels que le nombre de demandes, la latence, l'utilisation de la mémoire, l'utilisation de GPU, etc. En consultant ce fichier, vous pouvez obtenir des informations sur les performances et l'état des modèles déployés et surveiller efficacement le comportement du serveur TorchServe en temps réel. Pour plus d'informations détaillées, consultez la documentation des métriques TorchServe
Vous pouvez accéder aux journaux de métriques TorchServe similaires au format StatsD via le filtre de journal Amazon CloudWatch. Voici un exemple de journal des métriques 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