Comment résoudre les problèmes liés au transfert de mon conteneur personnalisé vers Amazon SageMaker à des fins d'entraînement ou d'inférence ?

Lecture de 4 minute(s)
0

Je veux résoudre les problèmes liés au transfert de mon conteneur personnalisé vers Amazon SageMaker à des fins d'entraînement ou d'inférence.

Brève description

Vous pouvez personnaliser vos images de conteneur dans SageMaker en utilisant l'une des approches suivantes :

Étendre un conteneur SageMaker préconçu : utilisez cette approche si vous avez besoin de personnaliser votre environnement ou votre cadre en ajoutant des fonctionnalités supplémentaires. Avec cette approche, vous n'avez pas besoin de créer l'image de conteneur à partir de zéro, car les bibliothèques de deep learning sont déjà prédéfinies.

Apportez votre propre conteneur : utilisez cette approche lorsque vous disposez d'une image déjà existante pour le traitement des données, l'entraînement de modèles ou l'inférence en temps réel, avec des fonctions supplémentaires et des exigences de sécurité qui ne sont pas actuellement prises en charge par les images SageMaker préconçues.

Créer une image de conteneur à partir de zéro : si vous avez un algorithme personnalisé et que vous n'avez pas encore d'image de conteneur personnalisée, l'utilisation de cette approche constitue une bonne pratique.

Quelle que soit cette approche, les erreurs que vous obtenez peuvent être principalement liées à la création incorrecte de l'image de conteneur. Par conséquent, assurez-vous que le conteneur est configuré correctement.

Solution

Étendre un conteneur SageMaker préconçu

  • Assurez-vous que les variables d'environnement SAGEMAKER_SUBMIT_DIRECTORY et SAGEMAKER_PROGRAM sont définies dans le Dockerfile.
  • Assurez-vous d'avoir installé les bibliothèques supplémentaires requises dans votre Dockerfile. Vous pouvez le faire en exécutant les commandes suivantes :
# SageMaker PyTorch image
FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:1.5.1-cpu-py36-ubuntu16.04
ENV PATH="/opt/ml/code:${PATH}"

# this environment variable is used by the SageMaker PyTorch container to determine our user code directory.
ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code

# install the libraries using pip
COPY requirements.txt./requirements.txt
RUN pip install requirements.txt

# /opt/ml and all subdirectories are utilized by SageMaker, use the /code subdirectory to store your user code.
COPY cifar10.py /opt/ml/code/cifar10.py
# Defines cifar10.py as script
entrypoint 
ENV SAGEMAKER_PROGRAM cifar10.py
  • Une fois la création de l'image réussie, exécutez le conteneur en mode local. Assurez-vous que l'image fonctionne comme prévu.

Pour plus d'informations, consultez Extension d'un conteneur préconçu.

Apportez votre propre conteneur

Assurez-vous d'avoir installé les bibliothèques SageMaker Toolkit correspondantes pour l'entraînement ou l'inférence. Ces boîtes à outils définissent l'emplacement du code et des autres ressources, ainsi que le point d'entrée qui contient le code qui doit être exécuté au démarrage du conteneur. Lorsque vous créez une tâche d'entraînement ou un point de terminaison d'inférence SageMaker, les répertoires suivants sont créés par SageMaker :

/opt/ml
    ├── input
    │
    ├── model
    │
    ├── code
    │
    ├── output
    │
    └── failure

Lorsque vous exécutez une tâche d'entraînement, le répertoire /opt/ml/input contient des informations sur le canal de données utilisé pour accéder aux données stockées dans Amazon Simple Storage Service (Amazon S3). Le script d'entraînement (train.py) ainsi que ses dépendances sont stockés dans opt/ml/code. Assurez-vous que le script écrit le modèle final dans le répertoire /opt/ml/model une fois la tâche d'entraînement terminée.

Lorsque vous hébergez un modèle entraîné sur SageMaker pour effectuer des inférences, le modèle est stocké dans /opt/ml/model et le code d'inférence (inference.py) est stocké dans /opt/ml/code.

Pour plus d'informations, consultez Adaptation de votre propre conteneur Docker au fonctionnement avec SageMaker.

Créer une image de conteneur à partir de zéro

  • Pour vous assurer que le conteneur se lance comme un exécutable, utilisez la forme exec de l'instruction ENTRYPOINT dans votre Dockerfile :
ENTRYPOINT ["python", "cifar10.py"]
  • Pour une tâche d'entraînement, le script d'entraînement doit se terminer en renvoyant 0 si l'entraînement est réussi et un code de sortie non nul si l'entraînement échoue.
  • Assurez-vous que le modèle final est écrit dans /opt/ml/model et que toutes les dépendances et artefacts sont stockés dans /opt/ml/output. Si une tâche d'entraînement échoue, le script doit écrire les informations sur l'échec dans /opt/ml/output/failure.
  • Lorsque vous créez un point de terminaison d'inférence, assurez-vous que le modèle est enregistré au format NOMFICHIER.tar.gz. Le conteneur doit implémenter une requête HTTP POST sur /invocations pour l'inférence et une requête HTTP GET sur /ping pour la surveillance de l'état du point de terminaison.

Pour plus d'informations, consultez Création d'un conteneur avec vos propres algorithmes et modèles.


Informations connexes

Use the Amazon SageMaker local mode to train on your notebook instance (Utiliser le mode local Amazon SageMaker pour entraîner votre instance de bloc-notes)

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans