AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Comment résoudre une erreur d'algorithme dans ma tâche de traitement SageMaker AI ?
Je souhaite résoudre une erreur d'algorithme qui s'affiche lorsque j'exécute une tâche de traitement Amazon SageMaker AI.
Brève description
Lorsque vous exécutez une tâche de traitement SageMaker AI, vous pouvez recevoir l’erreur « Failure reason AlgorithmError: , exit code: 1 » (Motif de l’erreur AlgorithmError : , code de sortie : 1) pour les raisons suivantes :
- Un problème de dépendance Python a été détecté.
- Une erreur d'exécution Python se produit et vous recevez un code de sortie différent de zéro.
- Vous utilisez un conteneur Docker conçu pour une architecture de processeur différente.
Résolution
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.
Identifier la cause de l’erreur
Pour identifier la cause de l'erreur, utilisez Amazon CloudWatch Logs pour consulter le journal de suivi de la pile. Le journal de suivi de la pile indique la cause de l'échec de votre code et la date à laquelle l'échec s'est produit dans votre script de traitement.
Après avoir identifié la cause de l'erreur, exécutez manuellement le conteneur à partir d'un terminal. Si Docker n'est pas installé, utilisez les instances de bloc-notes SageMaker AI pour exécuter le conteneur. Assurez-vous d'utiliser le type d'instance approprié.
Transférer le conteneur vers votre environnement local
Si vous utilisez un conteneur prédéfini SageMaker AI, tel que Scikit-learn, connectez-vous au registre et extrayez le conteneur. Pour vous connecter, exécutez la commande get-login-password de l'AWS CLI :
aws ecr get-login-password --region $REGION | docker login -u AWS --password-stdin 683313688378.dkr.ecr.${REGION}.amazonaws.com
Remarque : Remplacez region par votre région AWS.
Pour extraire le conteneur, exécutez la commande suivante :
docker pull 683313688378.dkr.ecr.${REGION}.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3
Remarque : Si vous utilisez les algorithmes SageMaker AI, tels que Random Cut Forest, vous ne pouvez pas transférer le conteneur vers votre environnement local. Pour ces conteneurs, contactez AWS Support.
Créer un shell bash dans votre conteneur
Pour résoudre les problèmes liés à votre code, exécutez le conteneur dans votre environnement local. Créez un dossier nommé code, puis ajoutez-y votre code. Montez le répertoire contenant votre dossier de code sur votre conteneur en tant que volume. Montez ensuite la sortie du répertoire au même emplacement, comme indiqué dans l'exemple suivant :
docker run \ -v ./code:/opt/ml/processing/input/code \ -v ./output:/opt/ml/processing/output \ --entrypoint '/bin/bash' \ 683313688378.dkr.ecr.us-east-1.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3
La commande précédente crée un shell bash dans votre conteneur. Dans la section Résoudre les erreurs d'algorithme, mettez à jour votre code dans le dossier de code, puis utilisez le shell bash pour exécuter votre script de traitement.
Résoudre les erreurs d'algorithme
Problème de dépendance Python
Si vous ne spécifiez pas de version de package Python, pip installe le dernier package susceptible de provoquer une erreur d'algorithme. Pour résoudre ce problème, identifiez la version de votre package, puis installez les packages dans votre script de traitement.
Si vous utilisez un conteneur SageMaker prédéfini, recherchez le référentiel du code source. Récupérez les packages Python et les versions que vous utilisez dans le conteneur. Vous pouvez également exécuter la commande suivante dans le shell bash pour afficher la liste complète des packages d'un conteneur personnalisé :
pip freeze | grep '==' > /opt/ml/processing/input/code/requirements.txt
Après avoir identifié la version de votre package, créez un fichier requirements.txt dans le même répertoire que votre script processing.py. Ajoutez ensuite les packages requis au fichier requirements.txt.
Exemple de fichier requirements.txt qui utilise le référentiel Scikit-learn SageMaker AI :
# Scikit-learn 1.2-1 packages boto3==1.28.57 botocore>=1.31.57,<1.32.0 cryptography Flask==1.1.1 itsdangerous==2.0.1 gunicorn==20.0.4 model-archiver==1.0.3 multi-model-server==1.1.1 pandas==1.1.3 protobuf==3.20.2 psutil==5.7.2 python-dateutil==2.8.1 retrying==1.3.3 sagemaker-containers==2.8.6.post2 sagemaker-inference==1.2.0 sagemaker-training==4.8.0 scikit-learn==1.2.1 scipy==1.8.0 urllib3==1.26.17 six==1.15.0 jinja2==3.0.3 MarkupSafe==2.1.1 numpy==1.24.1 gevent==23.9.1 Werkzeug==2.0.3 setuptools wheel certifi # Your packages and their versions sagemaker==2.232.1 boto3==1.34.142 botocore>=1.34.142,<1.35.0
Pour installer les packages requis, exécutez la commande pip dans votre script processing.py :
import sys import subprocess def install(requirements: str) -> None: subprocess.check_call([sys.executable, "-q", "-m", "pip", "install", "-r", requirements]) def install_requirements() -> None: install("/opt/ml/processing/input/code/requirements.txt") def main() -> None: import sagemaker import pandas example_code if __name__ == "__main__": install_requirements() main()
Remarque : Remplacez example_code par votre code. Assurez-vous que les packages existants ne sont pas mis à jour.
Pour vérifier si vous avez ajouté les versions de package correctes au script processing.py, exécutez la commande suivante dans le shell bash :
cd /opt/ml/processing/input/code python3 process.py
Si le script échoue, continuez à mettre à jour les versions du package jusqu'à ce que le script s’exécute correctement.
Résoudre les problèmes d'exécution de Python
Pour résoudre un problème d'exécution de Python, modifiez votre code dans le dossier de code pour mettre à jour votre script processing.py. Pour tester votre script processing.py, exécutez les commandes suivantes dans le shell bash :
cd /opt/ml/processing/input/code python3 processing.py
Modifiez votre code jusqu'à ce que tous les problèmes du journal de suivi de la pile soient résolus et que vous receviez le code de sortie « 0 ».
Résoudre les problèmes d'architecture du processeur
Vous devez conserver une version de conteneur conçue pour le processeur spécifique. Extrayez l'image existante et créez un nouveau Dockerfile qui inclut uniquement l'image de votre conteneur (FROM IMAGE_URI). Puis, transférez le conteneur vers votre Amazon Elastic Container Registry (Amazon ECR) existant.
L'exemple suivant prend une image créée pour x86_64 et reconstruit l'image pour une architecture ARM :
#!/usr/bin/env bash algorithm_name=ALGORITHM_NAME sagemaker_account=SAGEMAKER_ACCOUNT_NUMBER your_account=$(aws sts get-caller-identity --query Account --output text) region=$(aws configure get region) fullname="${your_account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:graviton-latest" aws ecr get-login-password --region ${region} | docker login -u AWS --password-stdin ${sagemaker_account}.dkr.ecr.${region}.amazonaws.com docker build -t ${algorithm_name} --platform=linux/arm64 . docker tag ${algorithm_name} ${fullname} aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi aws ecr get-login-password --region ${region} | docker login --username AWS --password-stdin ${fullname} docker push ${fullname}
Remarque : Remplacez ALGORITHM_NAME et SAGEMAKER_ACCOUNT_NUMBER par vos valeurs.
Tester votre tâche de traitement
Pour tester votre tâche de traitement mise à jour, exécutez la commande suivante :
import boto3 import sagemaker from sagemaker import get_execution_role from sagemaker.sklearn.processing import SKLearnProcessor from sagemaker.processing import ProcessingInput, ProcessingOutput role = get_execution_role() local_mode = True if local_mode: sklearn_processor = SKLearnProcessor( framework_version="1.2-1", role=role, instance_type="local", instance_count=1 ) else: sklearn_processor = SKLearnProcessor( framework_version="1.2-1", role=role, instance_type="ml.m5.xlarge", instance_count=1 ) sklearn_processor.run(code='code/processing.py', inputs=[ProcessingInput( source='./code/', destination='/opt/ml/processing/input/code/')], outputs=[ProcessingOutput( output_name='output', source='/opt/ml/processing/output/')] )
Remarque : Remplacez instance_type par local ou local-gpu pour exécuter la tâche en tant que test.
- Sujets
- Machine Learning & AI
- Balises
- Amazon SageMaker
- Langue
- Français

Contenus pertinents
demandé il y a 3 ans
demandé il y a 3 ans
demandé il y a 4 ans
AWS OFFICIELA mis à jour il y a un an