Come posso risolvere un errore di algoritmo nel mio processo di elaborazione SageMaker AI?
Desidero risolvere un errore di algoritmo che ricevo quando eseguo un processo di elaborazione Amazon SageMaker AI.
Breve descrizione
Quando esegui un processo di elaborazione SageMaker AI, potresti ricevere il messaggio di errore "Failure reason AlgorithmError: , exit code: 1" per i seguenti motivi:
- È presente un problema di dipendenza Python.
- Si verifica un errore di runtime Python e ricevi un codice di uscita diverso da zero.
- Utilizzi un container Docker creato per un'architettura CPU diversa.
Risoluzione
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Identifica la causa dell'errore
Per identificare la causa dell'errore, esamina il log delle tracce dello stack utilizzando Amazon CloudWatch Logs. Il log delle tracce dello stack mostra cosa ha causato l'errore del codice e quando l'errore si è verificato nello script di elaborazione.
Dopo aver identificato la causa dell'errore, esegui manualmente il container da un terminale. Se non hai installato Docker, utilizza istanze del notebook SageMaker AI per eseguire il container. Assicurati di utilizzare il tipo di istanza appropriato.
Estrai il container nell'ambiente locale
Se utilizzi un container SageMaker AI predefinito, come Scikit-learn, accedi al log ed estrai il container. Per accedere, esegui il comando AWS CLI get-login-password:
aws ecr get-login-password --region $REGION | docker login -u AWS --password-stdin 683313688378.dkr.ecr.${REGION}.amazonaws.com
Nota: sostituisci region con la tua Regione AWS.
Per estrarre il container, esegui questo comando:
docker pull 683313688378.dkr.ecr.${REGION}.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3
Nota: se utilizzi algoritmi SageMaker AI, come Random Cut Forest, non puoi estrarre il container nell'ambiente locale. Per questi container, contatta il Supporto AWS.
Crea una shell bash nel container
Per risolvere i problemi relativi al codice, esegui il container nell'ambiente locale. Crea una cartella denominata code, quindi aggiungi il codice alla cartella. Monta la directory che include la cartella code nel container come volume. Quindi monta l'output della directory nella stessa posizione mostrata nell'esempio seguente:
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
Il comando precedente crea una shell bash nel container. Nella sezione Risolvi gli errori di algoritmo, aggiorna il codice nella cartella code, quindi utilizza la shell bash per eseguire lo script di elaborazione.
Risolvi gli errori di algoritmo
Problema di dipendenza Python
Se non specifichi una versione per i pacchetti Python, pip installa il pacchetto più recente, che può causare un errore di algoritmo. Per risolvere il problema, identifica la versione dei pacchetti, quindi installali nello script di elaborazione.
Se utilizzi un container SageMaker predefinito, individua il repository per il codice sorgente. Recupera i pacchetti Python e la versione che utilizzi nel container. Oppure esegui questo comando nella shell bash per visualizzare l'elenco completo dei pacchetti per un container personalizzato:
pip freeze | grep '==' > /opt/ml/processing/input/code/requirements.txt
Dopo aver identificato la versione dei pacchetti, crea un file requirements.txt nella stessa directory dello script processing.py. Quindi aggiungi i pacchetti richiesti al file requirements.txt.
Esempio di file requirements.txt che utilizza il repository SageMaker AI Scikit-Learn:
# 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
Per installare i pacchetti richiesti, esegui il comando pip nel 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()
Nota: sostituisci example_code con il tuo codice. Assicurati che i pacchetti esistenti non vengano aggiornati.
Per verificare se hai aggiunto la versione corretta dei pacchetti allo script processing.py, esegui questo comando nella shell bash:
cd /opt/ml/processing/input/code python3 process.py
Se lo script ha esito negativo, continua ad aggiornare la versione dei pacchetti finché lo script non ha esito positivo.
Risolvi il problema di runtime Python
Per risolvere un problema di runtime Python, modifica il codice nella cartella code per aggiornare lo script processing.py. Per testare lo script processing.py, esegui questi comandi nella shell bash:
cd /opt/ml/processing/input/code python3 processing.py
Modifica il codice finché non risolvi tutti i problemi nel log delle tracce dello stack e ricevi il codice di uscita "0".
**Risolvi i problemi di architettura della CPU **
Devi mantenere una versione del container creata per la CPU specifica. Estrai l'immagine esistente e crea un nuovo Dockerfile che includa solo l'immagine del container (FROM IMAGE_URI). Quindi invia il container all'Amazon Elastic Container Registry (Amazon ECR) esistente.
L'esempio seguente prende un'immagine creata per x86_64 e la ricostruisce per un'architettura 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}
Nota: sostituisci ALGORITHM_NAME e SAGEMAKER_ACCOUNT_NUMBER con i tuoi valori.
Testa il processo di elaborazione
Per testare il processo di elaborazione aggiornato, esegui questo comando:
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/')] )
Nota: sostituisci instance_type con local o local-gpu per eseguire il processo come test.
- Argomenti
- Machine Learning & AI
- Lingua
- Italiano
