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.
¿Cómo soluciono un error de algoritmo en mi trabajo de procesamiento de SageMaker AI?
Quiero solucionar un error de algoritmo que recibo al ejecutar un trabajo de procesamiento de Amazon SageMaker AI.
Descripción corta
Al ejecutar un trabajo de procesamiento de SageMaker AI, es posible que recibas el mensaje de error «Failure reason AlgorithmError: , exit code: 1» por los siguientes motivos:
- Hay un problema de dependencia de Python.
- Se produce un error de versión ejecutable de Python y recibes un código de salida distinto de cero.
- Estás usando un contenedor de Docker creado para otra arquitectura de CPU.
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Identificación de la causa del error
Para identificar la causa del error, utiliza Registros de Amazon CloudWatch para revisar el registro de seguimiento de la pila. El registro de seguimiento de la pila muestra qué causó el error del código y cuándo se produjo el error en el script de procesamiento.
Tras identificar la causa del error, ejecuta manualmente el contenedor desde una terminal. Si no tienes Docker instalado, utiliza las instancias del cuaderno de SageMaker AI para ejecutar el contenedor. Asegúrate de usar el tipo de instancia apropiado.
Extracción del contenedor al entorno local
Si utilizas un contenedor prediseñado de SageMaker AI, como Scikit-learn, inicia sesión en el registro y extrae el contenedor. Para iniciar sesión, ejecuta el comando get-login-password de la AWS CLI:
aws ecr get-login-password --region $REGION | docker login -u AWS --password-stdin 683313688378.dkr.ecr.${REGION}.amazonaws.com
Nota: Sustituye region por tu región de AWS.
Para extraer el contenedor, ejecuta el siguiente comando:
docker pull 683313688378.dkr.ecr.${REGION}.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3
Nota: Si utilizas algoritmos de SageMaker AI, como Random Cut Forest, no podrás extraer el contenedor al entorno local. Para estos contenedores, ponte en contacto con AWS Support.
Creación de un shell de bash en el contenedor
Para solucionar problemas de código, ejecuta el contenedor en el entorno local. Crea una carpeta denominada código y, a continuación, agrega el código a la carpeta. Monta el directorio que incluye la carpeta de códigos en el contenedor como un volumen. A continuación, monta la salida del directorio en la misma ubicación que se muestra en el siguiente ejemplo:
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
El comando anterior crea un shell de bash en el contenedor. En la sección Solución de errores de algoritmos, actualiza el código en la carpeta de códigos y, a continuación, usa el shell de bash para ejecutar el script de procesamiento.
Solución de errores de algoritmos
Problema de dependencia de Python
Si no especificas una versión del paquete de Python, pip instala el paquete más reciente que puede provocar un error de algoritmo. Para solucionar este problema, identifica la versión del paquete y, a continuación, instala los paquetes en el script de procesamiento.
Si utilizas un contenedor de SageMaker prediseñado, busca el repositorio del código fuente. Recupera los paquetes y las versiones de Python que usas en el contenedor. O bien, ejecuta el siguiente comando en el shell de bash para ver la lista completa de paquetes de un contenedor personalizado:
pip freeze | grep '==' > /opt/ml/processing/input/code/requirements.txt
Tras identificar la versión del paquete, crea un archivo requirements.txt en el mismo directorio que el script processing.py. A continuación, agrega los paquetes necesarios al archivo requirements.txt.
Ejemplo de archivo requirements.txt que usa el repositorio Scikit-learn de 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
Para instalar los paquetes necesarios, ejecuta el comando pip en tu 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: Sustituye example_code por tu código. Asegúrate de que los paquetes existentes no se actualicen.
Para comprobar si has agregado las versiones correctas del paquete al script processing.py, ejecuta el siguiente comando en el shell de bash:
cd /opt/ml/processing/input/code python3 process.py
Si el script falla, continúa actualizando las versiones del paquete hasta que el script sea correcto.
Solución de problemas de versión ejecutable de Python
Para solucionar un problema de versión ejecutable de Python, modifica el código en la carpeta de códigos para actualizar el script processing.py. Para probar el script processing.py, ejecuta los siguientes comandos en el shell de bash:
cd /opt/ml/processing/input/code python3 processing.py
Modifica el código hasta que resuelvas todos los problemas del registro de seguimiento de la pila y recibas el código de salida «0».
Solución de problemas de arquitectura de CPU
Debes mantener una versión de contenedor creada para la CPU específica. Extrae la imagen existente y crea un nuevo Dockerfile que incluya solo tu imagen de contenedor (FROM IMAGE_URI). A continuación, inserta el contenedor en tu Amazon Elastic Container Registry (Amazon ECR) existente.
El siguiente ejemplo toma una imagen creada para x86_64 y la reconstruye para una arquitectura de 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: Sustituye ALGORITHM_NAME y SAGEMAKER_ACCOUNT_NUMBER por tus valore.
Probar el trabajo de procesamiento
Para probar el trabajo de procesamiento actualizado, ejecuta el siguiente 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: Sustituye instance_type por local o local-gpu para ejecutar el trabajo como una prueba.
- Etiquetas
- Amazon SageMaker
- Idioma
- Español

Contenido relevante
- Respuesta aceptada
preguntada hace un año
preguntada hace un año
preguntada hace 2 años
OFICIAL DE AWSActualizada hace 2 años