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 DJL Serving
DJL Serving est une solution de service de modèle autonome universelle à hautes performances. Elle utilise plusieurs modèles ou flux de travail de deep learning et les rend disponibles via un point de terminaison HTTP.
Vous pouvez utiliser l'un des conteneurs de deep learning (DLC) de DJL Serving pour servir vos modèles sur AWS. Pour en savoir plus sur les types de modèles et les frameworks pris en charge, consultez leréférentiel DJL Serving GitHub
DJL Serving propose de nombreuses fonctionnalités qui vous aident à déployer vos modèles avec des performances élevées :
-
Facilité d'utilisation : DJL Serving peut fonctionner avec la plupart des modèles sans aucune modification. Vous apportez les artefacts de votre modèle et DJL Serving peut les héberger.
-
Prise en charge de plusieurs appareils et accélérateurs : DJL Serving prend en charge le déploiement de modèles sur des CPU, des GPU et AWS Inferentia.
-
Performances : DJL Serving exécute une inférence multithreads sur une seule machine virtuelle Java (JVM) afin d'augmenter le débit.
-
Traitement par lots dynamique : DJL Serving prend en charge le traitement par lots dynamique pour augmenter le débit.
-
Mise à l'échelle automatique : DJL Serving met automatiquement à l'échelle les applications de travail en fonction de la charge de trafic.
-
Support multimoteur : DJL Serving peut héberger simultanément des modèles utilisant différents frameworks (par exemple, PyTorch et TensorFlow).
-
Modèles ensemblistes et de flux de travail : DJL Serving prend en charge le déploiement de flux de travail complexes composés de plusieurs modèles et peut exécuter des parties du flux de travail sur des CPU et d'autres parties sur des GPU. Les modèles d'un flux de travail peuvent exploiter différents frameworks.
Les sections suivantes expliquent comment configurer un point de terminaison avec DJL Serving sur 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 :
-
Assurez-vous que le client docker
est configuré sur votre système. -
Connectez-vous à Amazon Elastic Container Registry et définissez les variables d'environnement suivantes :
export ACCOUNT_ID=<your_account_id>export REGION=<your_region>aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com -
Extrayez l'image Docker.
docker pull 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118Pour toutes les images de conteneurs DJL Serving disponibles, consultez les conteneurs d'inférence de grands modèles
et les conteneurs d'inférence de CPU DJL Serving . Lorsque vous choisissez une image dans les tableaux des liens précédents, remplacez la région AWS dans la colonne d'exemple d'URL par la région dans laquelle vous vous trouvez. Les conteneurs DLC sont disponibles dans les régions répertoriées dans le tableau en haut de la page Images de conteneurs de deep learning disponibles (langue française non garantie).
Personnalisation de votre conteneur
Vous pouvez ajouter des packages aux images DLC de base pour personnaliser votre conteneur. Supposons que vous souhaitiez ajouter un package à l'image Docker 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118. Vous devez créer un fichier Docker avec l'image souhaitée comme image de base, ajouter les packages requis et envoyer l'image vers Amazon ECR.
Pour ajouter un package, exécutez les étapes suivantes :
-
Spécifiez les instructions pour exécuter les bibliothèques ou les packages souhaités dans le fichier Docker de l'image de base.
FROM 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118 ## add custom packages/libraries RUN git clone https://github.com/awslabs/amazon-sagemaker-examples -
Créez l'image Docker à partir de votre fichier Docker. Spécifiez votre référentiel Amazon ECR, le nom de l'image de base et une balise pour l'image. Si vous ne possédez pas de référentiel Amazon ECR, consultez Utilisation d'Amazon ECR avec l'AWS CLI dans le Guide de l'utilisateur Amazon ECR pour savoir comment en créer un.
docker build -f Dockerfile -t <registry>/<image_name>:<image_tag> -
Transmettez l'image Docker dans le référentiel Amazon ECR.
docker push $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/<image_name>:<image_tag>
Vous devriez maintenant disposer d'une image de conteneur personnalisée que vous pouvez utiliser pour le service de modèles. Pour plus d'exemples sur la personnalisation de votre conteneur, consultez Création d'images personnalisées pour les conteneurs AWS Deep Learning
Préparation des artefacts de votre modèle
Avant de déployer votre modèle sur SageMaker AI, vous devez regrouper ses artefacts dans un fichier .tar.gz. DJL Serving accepte les artefacts suivants dans vos archives :
-
Point de contrôle du modèle : fichiers qui stockent les poids de votre modèle.
-
serving.properties: fichier de configuration que vous pouvez ajouter pour chaque modèle. Placezserving.propertiesdans le même répertoire que votre fichier de modèle. -
model.py: le code du gestionnaire d'inférence. Cela ne s'applique que lors de l'utilisation du mode Python. Si vous ne spécifiez pasmodel.py, djl-serving utilise l'un des gestionnaires par défaut.
Voici un exemple de structure model.tar.gz :
- model_root_dir # root directory - serving.properties - model.py # your custom handler file for Python, if you choose not to use the default handlers provided by DJL Serving - model binary files # used for Java mode, or if you don't want to use option.model_id and option.s3_url for Python mode
DJL Serving prend en charge les moteurs Java alimentés par des moteurs DJL ou Python. Les artefacts précédents ne sont pas tous obligatoires ; les artefacts requis varient en fonction du mode que vous choisissez. Par exemple, en mode Python, il suffit de spécifier option.model_id dans le fichier serving.properties ; il n'est pas nécessaire de spécifier le point de contrôle du modèle à l'intérieur des conteneurs LMI. En mode Java, vous devez empaqueter le point de contrôle du modèle. Pour plus de détails sur la configuration serving.properties et le fonctionnement de différents moteurs, consultez Modes de fonctionnement de DJL Serving
Utilisez des points de terminaison à modèle unique pour le déploiement avec DJL Serving
Après avoir préparé les artefacts de votre modèle, vous pouvez déployer ce dernier sur un point de terminaison SageMaker AI. Cette section explique comment déployer un modèle unique sur un point de terminaison avec DJL Serving. Si vous déployez plusieurs modèles, ignorez cette section et passez à Utilisation de points de terminaison multimodèles pour le déploiement avec DJL Serving.
L'exemple suivant montre une méthode pour créer un objet de modèle à l'aide du kit Amazon SageMaker Python SDK. Vous devez spécifier les champs suivants :
-
image_uri: vous pouvez soit récupérer l'une des images de base de DJL Serving, comme indiqué dans cet exemple, soit spécifier une image Docker personnalisée à partir de votre référentiel Amazon ECR, si vous avez suivi les instructions indiquées dans Personnalisation de votre conteneur. -
model_s3_url: il doit s'agir d'un URI Amazon S3 pointant vers votre fichier.tar.gz. -
model_name: spécifiez le nom de l'objet de modèle.
import boto3 import sagemaker from sagemaker.model import Model from sagemaker import image_uris, get_execution_role aws_region = "aws-region" sagemaker_session = sagemaker.Session(boto_session=boto3.Session(region_name=aws_region)) role = get_execution_role() def create_model(model_name, model_s3_url): # Get the DJL DeepSpeed image uri image_uri = image_uris.retrieve( framework="djl-deepspeed", region=sagemaker_session.boto_session.region_name, version="0.20.0" ) model = Model( image_uri=image_uri, model_data=model_s3_url, role=role, name=model_name, sagemaker_session=sagemaker_session, ) return model
Utilisation de points de terminaison multimodèles pour le déploiement avec DJL Serving
Si vous souhaitez déployer plusieurs modèles sur un point de terminaison, SageMaker AI propose des points de terminaison multimodèles, qui constituent une solution évolutive et rentable pour déployer un grand nombre de modèles. DJL Serving prend également en charge le chargement simultané de plusieurs modèles et l'exécution d'une inférence sur chacun des modèles simultanément. Les conteneurs DJL Serving respectent les contrats de points de terminaison multimodèles SageMaker AI et peuvent être utilisés pour déployer des points de terminaison multimodèles.
Chaque modèle d'artefact individuel doit être empaqueté de la même manière que celle décrite dans la section Préparation des artefacts de votre modèle précédente. Vous pouvez définir des configurations spécifiques au modèle dans le fichier serving.properties et le code du gestionnaire d'inférence spécifique au modèle dans model.py. Pour un point de terminaison multimodèle, les modèles doivent être organisés de la manière suivante :
root_dir |-- model_1.tar.gz |-- model_2.tar.gz |-- model_3.tar.gz . . .
Le kit Amazon SageMaker Python SDK utilise l'objet MultiDataModelmodel_data_prefix au constructeur MultiDataModel.
DJL Serving fournit également plusieurs paramètres de configuration pour gérer les besoins en mémoire du modèle, tels que required_memory_mb et reserved_memory_mb, qui peuvent être configurés pour chaque modèle dans le fichier serving.properties
La fonctionnalité de mise à l'échelle automatique de DJL Serving permet de garantir facilement que les modèles sont mis à l'échelle pour le trafic entrant. Par défaut, DJL Serving détermine le nombre maximum d'applications de travail pour un modèle pouvant être pris en charge en fonction du matériel disponible (tel que les cœurs de CPU ou les dispositifs GPU). Vous pouvez définir des limites inférieures et supérieures pour chaque modèle afin de garantir qu'un niveau de trafic minimum puisse toujours être atteint et qu'un seul modèle ne consomme pas toutes les ressources disponibles. Vous pouvez définir les propriétés suivantes dans le fichier serving.properties
gpu.minWorkers: nombre minimum d'applications de travail pour les GPU.gpu.maxWorkers: nombre maximum d'applications de travail pour les GPU.cpu.minWorkers: nombre minimum d'applications de travail pour les CPU.cpu.maxWorkers: nombre maximum d'applications de travail pour les CPU.
Pour un exemple de bout en bout sur le déploiement d’un point de terminaison multimodèle sur SageMaker AI à l’aide d’un conteneur DJL Serving, consultez l’exemple de bloc-notes Multi-Model-Inference-Demo.ipynb