SageMaker Guía de SDK solución de problemas de Python - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

SageMaker Guía de SDK solución de problemas de Python

Puedes usar SageMaker Python SDK para interactuar con Amazon SageMaker en tus scripts de Python o cuadernos de Jupyter. A pesar de SDK proporcionar un flujo de trabajo simplificado, es posible que encuentre varias excepciones o errores. Esta guía de solución de problemas tiene como objetivo ayudarlo a comprender y resolver los problemas comunes que pueden surgir al trabajar con SageMaker PythonSDK. Abarca los escenarios relacionados con la creación de trabajos de formación, trabajos de procesamiento y puntos finales, así como las prácticas generales de gestión de excepciones. Si sigue las instrucciones que se proporcionan en las siguientes secciones, podrá diagnosticar y abordar problemas comunes de forma eficaz.

SageMaker Python SDK actúa como un contenedor para las SageMaker API operaciones de bajo nivel. El IAM rol que utilice para acceder SDK debe poder acceder a las operaciones subyacentes. Añadir la política de acceso SageMaker total a tu IAM rol es la forma más sencilla de asegurarte de que tienes permisos para usar SageMaker PythonSDK. Para obtener más información sobre la Política de acceso SageMaker total, consulte Amazon SageMaker Full Access.

Si bien es menos práctico, proporcionar permisos más detallados es un enfoque seguro para utilizar laSDK. Cada una de las siguientes secciones contiene información sobre los permisos necesarios.

Crear un trabajo de formación

importante

Si no va a añadir la política de acceso SageMaker total a su IAM función, esta debe tener permisos para llamar a DescribeTrainingJoblas operaciones CreateTrainingJoby.

También requiere permisos para:

  • Acceder a los datos de entrada/salida en S3

  • Ejecuta EC2 instancias de Amazon

  • Registra CloudWatch métricas

Si su trabajo de SageMaker formación necesita acceder a los recursos de una Amazon Virtual Private Cloud (AmazonVPC), asegúrese de configurar los VPC ajustes y los grupos de seguridad necesarios al crear el trabajo de procesamiento.

Al crear un trabajo de formación, es posible que se encuentre con botocore.exceptions.ClientError o con ValueError excepciones.

ValueError

ValueErrorlas excepciones se producen cuando hay un problema con los valores o parámetros que se están pasando a una función. Usa la siguiente lista para ver ejemplos de ValueError excepciones y cómo solucionarlas.

  • ValueError: either image_uri or algorithm_arn is required. None was provided:

    • Si está utilizando la AlgorithmEstimator función, proporcione laalgorithm_arn.

    • Si está utilizando la Estimator función, proporcione laestimator_arn.

  • ValueError: Unknown input channel: train is not supported by: scikit-decision-trees-15423055-57b73412d2e93e9239e4e16f83298b8f

    Aparece este error cuando proporciona un canal de entrada no válido. Un canal de entrada es una fuente de datos o un parámetro que el modelo espera.

    En la Tipos de algoritmos página, puede navegar hasta el modelo para buscar información sobre los canales de entrada del modelo.

    También puede encontrar información sobre los canales de entrada en la sección Uso de la AWS Marketplace página del algoritmo.

    Utilice el siguiente procedimiento para obtener información sobre los canales de entrada de un algoritmo.

    Para obtener información sobre los canales de entrada de un algoritmo
    1. Navega hasta la SageMaker consola.

    2. En el panel de navegación izquierdo, elija Entrenamiento.

    3. Selecciona Algoritmos.

    4. Seleccione Buscar algoritmo.

    5. Busca tu algoritmo en la lista resultante.

    6. Selecciona la pestaña Uso.

    7. Navegue hasta el encabezado de especificación del canal.

botocore.exceptions.ClientError

botocore.exceptions.ClientErrorlas excepciones se producen cuando un AWS servicio subyacente lanza una excepción. Esto puede deberse a varios motivos, como parámetros incorrectos, problemas de permisos o limitaciones de recursos. Utilice la siguiente lista para dar contexto a botocore.exceptions.ClientError las excepciones e información sobre cómo solucionarlas.

  • ResourceLimitExceeded— Tu AWS cuenta no tiene acceso a las EC2 instancias de Amazon necesarias para ejecutar el trabajo de formación. Para acceder, solicita un aumento de cuota. Para obtener información sobre los aumentos de cuota, consulte Service Quotas. Utilice la siguiente lista para obtener información sobre botocore.exceptions.ClientError las excepciones.

  • ValidationException— Las excepciones de validación aparecen cuando has utilizado un tipo de EC2 instancia de Amazon incorrecto para el trabajo de formación. También pueden aparecer cuando el IAM rol que estás utilizando no tiene permisos para el trabajo de formación.

Actualizar un trabajo de formación

importante

Si no va a añadir la política SageMaker gestionada a su IAM función, debe conceder a la función acceso a los siguientes permisos:

  • s3:GetObject— Proporciona permisos para leer los artefactos del modelo de los buckets de Amazon S3

  • s3:PutObject— Si corresponde, proporciona permisos para escribir actualizaciones en los artefactos del modelo

  • iam:GetRole— Proporciona permisos para obtener información sobre el IAM rol necesario para ejecutar el trabajo de formación

  • sagemaker:UpdateTrainingJob— Proporciona permisos para modificar los trabajos de formación mediante la UpdateTrainingJoboperación.

  • logs:PutLogEvents— Proporciona permisos para escribir registros en los CloudWatch registros de Amazon durante el proceso de actualización.

Cuando actualizas un trabajo de formación, es posible que te encuentres con un botocore.exceptions.ParamValidationError o unbotocore.exceptions.ClientError.

botocore.exceptions.ClientError

ClientErrorTiene el siguiente mensaje:

botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the UpdateTrainingJob operation: Invalid UpdateTrainingJobRequest, the request cannot be empty

Si se produce este error, debe incluir uno de los siguientes parámetros junto con el nombre del trabajo de formación:

  • profiler_rule_configs(lista): una lista de configuraciones de reglas del generador de perfiles. De forma predeterminada, no hay configuraciones de reglas de creación de perfiles.

  • profiler_config(dict): la configuración de SageMaker Profiler recopila métricas y las envía. De forma predeterminada, no hay ninguna configuración de generador de perfiles.

  • resource_config(dict): la configuración de los recursos del trabajo de formación. Puede actualizar el período de conservación si el estado de la piscina caliente es. Available No se puede actualizar ningún otro campo.

  • remote_debug_config(dict): configuración paraRemoteDebug. El diccionario puede contener EnableRemoteDebug (bool).

botocore.exceptions.ParamValidationError

botocore.exceptions.ParamValidationErrorTiene el siguiente error:

botocore.exceptions.ParamValidationError: Parameter validation failed: Invalid type for parameter ProfilerRuleConfigurations, value: {'DisableProfiler': False}, type: <class 'dict'>, valid types: <class 'list'>, <class 'tuple'>

Esta excepción puede producirse si la update_training_job función no proporciona el parámetro en el formato esperado. Por ejemplo, espera que el profiler_rule_configs parámetro sea una lista. Si, en cambio, el parámetro se pasa como un diccionario, se genera el error.

Crear un trabajo de procesamiento

importante

Si no va a añadir la política SageMaker gestionada a su IAM función, debe conceder a la función acceso a los siguientes permisos:

  • sagemaker:CreateProcessingJob— Proporciona permisos para crear un trabajo de procesamiento

  • sagemaker:DescribeProcessingJob— Proporciona permisos para obtener información sobre un trabajo de procesamiento

  • s3:GetObject— Proporciona permisos para leer los artefactos del modelo de los buckets de Amazon S3

  • s3:PutObject— Si corresponde, proporciona permisos para escribir actualizaciones en los artefactos del modelo

  • logs:PutLogEvents— Proporciona permisos para escribir registros en Amazon CloudWatch Logs durante el proceso de actualización.

Si su trabajo de procesamiento necesita acceder a los recursos de una Amazon Virtual Private Cloud, debe especificar su tarea security_group_ids y subnets dentro del estimador que cree. Para ver un ejemplo de cómo puede acceder a los recursos de AmazonVPC, consulte Secure Training and Inference with VPC.

Al crear un trabajo de procesamiento, es posible que se encuentre con un ValueErrorUnexpectedStatusException, un o unbotocore.exceptions.ClientError.

ValueError

A continuación, se muestra un ejemplo de una ValueError.

ValueError: code preprocess.py wasn't found. Please make sure that the file exists.

La ruta que especificó no era correcta. Puede especificar una ruta relativa o absoluta al archivo de script. Para obtener más información sobre cómo especificar las rutas a los archivos, consulte sagemaker.processing. RunArgs.

UnexpectedStatusException

A continuación se muestra un ejemplo deUnexpectedStatusException:

UnexpectedStatusException: Error for Processing job sagemaker-scikit-learn-2024-07-02-14-08-55-993: Failed. Reason: AlgorithmError: , exit code: 1

El rastreo que acompaña a la excepción puede ayudarle a identificar la causa raíz:

Traceback (most recent call last): File "/opt/ml/processing/input/code/preprocessing.py", line 51, in <module> df = pd.read_csv(input_data_path) . . . File "pandas/_libs/parsers.pyx", line 689, in pandas._libs.parsers.TextReader._setup_parser_source FileNotFoundError: [Errno 2] File b'/opt/ml/processing/input/census-income.csv' does not exist: b'/opt/ml/processing/input/census-income.csv'

El error "FileNotFoundError: [Errno 2] File b'/opt/ml/processing/input/census-income.csv' does not exist" indica que el archivo de entrada no census-income.csv se encuentra en la ruta /opt/ml/processing/input/ especificada. Compruebe que los datos de entrada se hayan proporcionado correctamente y que el script de preprocesamiento esté copiando los datos en la ruta esperada.

botocore.exceptions.ClientError

A continuación, se muestra un ejemplo de una botocore.exceptions.ClientError.

botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the CreateProcessingJob operation: RoleArn: Cross-account pass role is not allowed.

El "Cross-account pass role is not allowed in create processing job" error se produce al intentar crear un trabajo SageMaker de procesamiento con un IAM rol de otra AWS cuenta. Esta función de seguridad garantiza que las funciones y los permisos se administren en cada cuenta. Para resolver este problema, haga lo siguiente:

  1. Compruebe que el IAM rol esté en la misma cuenta que el trabajo de procesamiento. Los roles multicuentas requieren una asignación explícita

  2. Si utilizas un rol de otra cuenta, actualiza su política de confianza para permitir que la cuenta que crea el trabajo de procesamiento asuma el rol.

  3. Asegúrese de que el rol tenga los permisos necesarios para procesar trabajos, como sagemaker:CreateProcessingJob oiam:PassRole.

Crear un punto de conexión

importante

Si no va a añadir la política SageMaker gestionada a su IAM función, debe conceder a la función acceso a los siguientes permisos:

  • sagemaker:CreateModel— Proporciona permisos para crear el modelo que se va a implementar en el punto final

  • sagemaker:CreateEndpointConfig— Proporciona permisos para crear una configuración de punto final que defina el comportamiento del punto final, como el tipo y el recuento de instancias

  • sagemaker:CreateEndpoint— Proporciona permisos para crear la configuración del punto final utilizando el punto final que haya especificado

Además, necesita permisos para describir y enumerar los modelos, los puntos finales y las configuraciones de los puntos finales.

Al crear un punto final, es posible que se encuentre con un UnexpectedStatusException o unbotocore.exceptions.ClientError.

El siguiente es un ejemplo deUnexpectedStatusException:

UnexpectedStatusException: Error hosting endpoint gpt2-large-2024-07-03-15-28-20-448: Failed. Reason: The primary container for production variant AllTraffic did not pass the ping health check. Please check CloudWatch logs for this endpoint.. Try changing the instance type or reference the troubleshooting page https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-troubleshooting.html

El mensaje de error te indica que compruebes los CloudWatch registros de Amazon. Utilice el siguiente procedimiento para comprobar los registros.

Para comprobar los CloudWatch registros
  1. Ve a la SageMaker consola de Amazon.

  2. En la barra de navegación de la izquierda, selecciona Endpoints.

  3. Seleccione el punto final que ha fallado.

  4. En la página de detalles del punto final, elija Ver los inicios de sesión CloudWatch.

Una vez que haya encontrado los registros, busque el problema específico. El siguiente es un ejemplo de CloudWatch registro:

NotImplementedError: gptq quantization is not supported for AutoModel, you can try to quantize it with text-generation-server quantize ORIGINAL_MODEL_ID NEW_MODEL_ID

Para obtener información sobre cómo resolver elbotocore.exceptions.ClientError, consulteGuía sobre el manejo de excepciones.

Actualizar un punto final

importante

Si no va a añadir la política SageMaker gestionada a su IAM función, debe conceder a la función acceso a los siguientes permisos:

  • sagemaker:UpdateEndpoint— Proporciona permisos para actualizar un punto final existente, por ejemplo, cambiar el tipo o el recuento de instancias del punto final

  • sagemaker:UpdateEndpointWeightsAndCapacities— Proporciona permisos para crear una configuración de punto final que defina el comportamiento del punto final, como el tipo y el recuento de instancias

  • sagemaker:DescribeEndpoint— Proporciona permisos para describir la configuración actual del punto final, que suele ser necesario antes de la actualización

Además, es posible que necesite permisos para describir y enumerar los puntos finales y las configuraciones de los puntos finales.

Puede encontrarse con unaValueError, como la siguiente:

ValueError: Endpoint with name 'abc' does not exist; please use an existing endpoint name

El error indica que el nombre del punto de conexión especificado no coincide con ningún punto de conexión existente en su AWS cuenta. Utilice el siguiente procedimiento para solucionar el error:

Para solucionar un error de valor
  1. Usa el siguiente código para enumerar todos tus puntos de conexión:

    import sagemaker sagemaker_session = sagemaker.Session() # List all endpoints endpoints = sagemaker_session.sagemaker_client.list_endpoints() print(endpoints)
  2. Comprueba que el punto final que has especificado para la update_endpoint función esté en la lista.

  3. Asegúrese de operar en la AWS región correcta. SageMaker los puntos finales son específicos de cada región.

  4. Asegúrese de que el IAM rol que está utilizando tenga permisos para enumerar, describir o actualizar los puntos finales.

Guía sobre el manejo de excepciones

Si no encuentras información que te ayude a solucionar tu problema específico, los siguientes ejemplos de código pueden servirte de inspiración para gestionar las excepciones.

El siguiente es un ejemplo genérico que puedes usar para atrapar la mayoría de las excepciones.

import sagemaker from botocore.exceptions import ParamValidationError, ClientError try: sagemaker.some_api_call(SomeParam='some_param') except ClientError as error: # Put your error handling logic here raise error except ParamValidationError as error: raise ValueError('The parameters you provided are incorrect: {}'.format(error)) except ValueError as error: # Catch generic ValueError exceptions

Existen dos categorías principales de errores:

  • Errores específicos de SageMaker Python SDK

  • Errores específicos del AWS servicio subyacente

Los errores específicos del AWS servicio subyacente son siempre botocore.exceptions.ClientError excepciones. botocore.exceptions.ClientErrorTiene un Error objeto y un ResponseMetadata objeto. A continuación se muestra la plantilla de un error de cliente:

{ 'Error': { 'Code': 'SomeServiceException', 'Message': 'Details/context around the exception or error' }, 'ResponseMetadata': { 'RequestId': '1234567890ABCDEF', 'HostId': 'host ID data will appear here as a hash', 'HTTPStatusCode': 400, 'HTTPHeaders': {'header metadata key/values will appear here'}, 'RetryAttempts': 0 } }

A continuación se muestra un ejemplo de la gestión de errores específica que puede realizar conbotocore.exceptions.ClientError:

try: sagemaker.some_api_call(SomeParam='some_param') except botocore.exceptions.ClientError as err: if err.response['Error']['Code'] == 'InternalError': # Generic error # We grab the message, request ID, and HTTP code to give to customer support print('Error Message: {}'.format(err.response['Error']['Message'])) print('Request ID: {}'.format(err.response['ResponseMetadata']['RequestId'])) print('Http code: {}'.format(err.response['ResponseMetadata']['HTTPStatusCode'])) raise err else if err.response['Error']['Code'] == 'ValidationException': raise ValueError(err.response['Error']['Message'])

Para obtener más información sobre cómo gestionar ClientError las excepciones, consulte Analizar las respuestas de error y detectar las excepciones procedentes de Servicios de AWS ellas.