Je souhaite résoudre les problèmes rencontrés lorsque j'intègre mon conteneur personnalisé dans Amazon SageMaker à des fins d’entraînement ou d'inférence.
Brève description
Personnalisez vos images de conteneur dans SageMaker en suivant l'une des approches suivantes :
- Étendez un conteneur SageMaker prédéfini.
- Apportez votre propre conteneur.
- Créez une image de conteneur à partir de zéro.
Avec ces approches, vous obtenez des erreurs liées à la construction incorrecte de l'image de conteneur. Assurez-vous de configurer correctement le conteneur.
Résolution
Étendre un conteneur SageMaker prédéfini
Utilisez cette approche pour personnaliser votre environnement ou votre cadre en ajoutant des fonctionnalités supplémentaires. Avec cette approche, vous ne créez pas l'image de conteneur à partir de zéro car les bibliothèques de deep learning sont prédéfinies.
Assurez-vous que les variables d'environnement SAGEMAKER_SUBMIT_DIRECTORY et SAGEMAKER_PROGRAM sont définies dans le Dockerfile. Puis, installez les bibliothèques supplémentaires requises dans votre Dockerfile.
Pour installer les bibliothèques supplémentaires requises, exécutez les commandes suivantes :
# SageMaker PyTorch imageFROM 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 la section Étendre un conteneur préintégré.
Apportez votre propre conteneur
Utilisez cette approche lorsque vous disposez d'une image pour le traitement de données, l’entraînement des modèles ou l'inférence en temps réel avec des fonctionnalités et des exigences de sécurité que les images SageMaker prédéfinies ne prennent pas en charge.
Assurez-vous d'avoir installé les bibliothèques SageMaker Toolkit correspondantes à des fins d’entraînement ou d'inférence. Ces boîtes à outils définissent l'emplacement du code et d'autres ressources. Elles définissent également le point d'entrée qui contient le code à exécuter au démarrage du conteneur. Lorsque vous créez une tâche d’entraînement ou un point de terminaison d'inférence SageMaker, SageMaker crée les répertoires suivants :
/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 faire des inférences, le modèle est stocké dans /opt/ml/model. Le code d'inférence (inference.py) est stocké dans /opt/ml/code.
Pour plus d'informations, consultez la section Adaptation de votre propre conteneur Docker pour qu'il fonctionne avec SageMaker.
Construire un conteneur à partir de zéro
Si vous disposez d'un algorithme personnalisé et que vous n’avez pas d'image de conteneur personnalisée, il est recommandé d'utiliser cette approche.
Pour vous assurer que le conteneur s'exécute en tant qu'exécutable, utilisez la forme exec de l'instruction ENTRYPOINT dans votre Dockerfile :
ENTRYPOINT ["python", "cifar10.py"]
Si la tâche d’entraînement est réussie, le script de formation doit se terminer avec 0. Si l’entraînement échoue, il doit avoir un code de sortie différent de zéro.
Assurez-vous que le modèle final est écrit dans /opt/ml/model, et que toutes les dépendances et tous les 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, enregistrez le modèle au format FILENAME.tar.gz. Le conteneur doit implémenter la requête HTTP POST sur /invocations pour l'inférence et la requête HTTP GET sur /ping pour la surveillance de l'état du point de terminaison. Pour plus d'informations, consultez la section Créer un conteneur avec vos propres algorithmes et modèles.
Informations connexes
Utiliser le mode local d'Amazon SageMaker pour vous entraîner sur votre instance de bloc-notes