Paso 2. Cree los scripts de tiempo de ejecución - AWS Guía prescriptiva

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.

Paso 2. Cree los scripts de tiempo de ejecución

Crear los scripts de tiempo de ejecución.

En este paso, usted integrará el modelo que desarrolló en el paso 1 y su código auxiliar asociado en una plataforma de ML para el entrenamiento y la inferencia listas para la producción. Específicamente, esto implica el desarrollo de scripts de tiempo de ejecución para que el modelo pueda incorporarse a la SageMaker IA. Estos scripts de Python independientes incluyen funciones de devolución de llamada de SageMaker IA predefinidas y variables de entorno. Se ejecutan dentro de un contenedor de SageMaker IA alojado en una instancia de Amazon Elastic Compute Cloud (Amazon EC2). La documentación del SDK para Python de Amazon SageMaker AI proporciona información detallada sobre cómo estas devoluciones de llamada y la configuración auxiliar funcionan juntas para el entrenamiento y la inferencia. (Por ejemplo, consulte Preparar un guion de entrenamiento de scikit-learn e Implementar un modelo de scikit-learn en la documentación de IA). SageMaker En las siguientes secciones se proporcionan recomendaciones adicionales para desarrollar scripts de tiempo de ejecución de ML, en función de nuestra experiencia trabajando con clientes. AWS

Usando los trabajos de procesamiento

SageMaker La IA ofrece dos opciones para realizar inferencias de modelos en modo lote. Puede utilizar un trabajo de procesamiento de SageMaker IA o un trabajo de transformación por lotes. Cada opción tiene ventajas y desventajas.

Un trabajo de procesamiento consiste en un archivo de Python que se ejecuta dentro de un contenedor de SageMaker IA. El trabajo de procesamiento consiste en cualquier lógica que ponga en su archivo de Python. Ofrece estas ventajas:

  • Cuando se comprende la lógica básica de un trabajo de entrenamiento, los trabajos de procesamiento son fáciles de configurar y entender. Comparten las mismas abstracciones que los trabajos de entrenamiento (por ejemplo, ajustar el número de instancias y la distribución de datos).

  • Los científicos de datos y los ingenieros de ML tienen el control total sobre las opciones de manipulación de datos.

  • El científico de datos no tiene que gestionar la lógica de ningún componente de I/O, excepto la conocida funcionalidad de lectura/escritura.

  • Es un poco más fácil ejecutar los archivos en entornos que no son de SageMaker IA, lo que facilita el desarrollo rápido y las pruebas locales.

  • Si se produce un error, un trabajo de procesamiento falla en cuanto el script falla y no hay que esperar inesperadamente para volver a intentarlo.

Por otro lado, los trabajos de transformación por lotes son una extensión del concepto de punto final de SageMaker IA. En tiempo de ejecución, estos trabajos importan funciones de retrollamada, que luego gestionan las I/O para leer los datos, cargar el modelo y realizar las predicciones. Los trabajos de transformación por lotes tienen las siguientes ventajas:

  • Utilizan una abstracción de distribución de datos que difiere de la abstracción utilizada en los trabajos de formación.

  • Utilizan la misma estructura básica de archivos y funciones tanto para la inferencia por lotes como para la inferencia en tiempo real, lo cual resulta práctico.

  • Tienen un mecanismo integrado de tolerancia a errores basado en intentos. Por ejemplo, si se produce un error en un lote de registros, se volverá a intentar varias veces antes de que el trabajo finalice por error.

Debido a su transparencia, su facilidad de uso en varios entornos y su abstracción compartida con los trabajos de entrenamiento, decidimos utilizar el trabajo de procesamiento en lugar del trabajo de transformación por lotes en la arquitectura de referencia que se presenta en estas recomendaciones.

Debe ejecutar los scripts de tiempo de ejecución de Python localmente antes de implementarlos en la nube. En concreto, le recomendamos que utilice la cláusula de protección principal al estructurar sus scripts de Python y realizar pruebas unitarias.

Uso de la cláusula de protección principal

Utilice una cláusula de protección principal para admitir la importación de módulos y ejecutar su script de Python. Ejecutar scripts de Python de forma individual es beneficioso para depurar y aislar problemas en la canalización de ML. Recomendamos los siguientes pasos:

  • Utilice un analizador de argumentos en los archivos de procesamiento de Python para especificar los archivos de entrada/salida y sus ubicaciones.

  • Proporcione una guía principal y funciones de prueba para cada archivo de Python.

  • Después de probar un archivo de Python, incorpóralo en las diferentes etapas del proceso de aprendizaje automático, ya sea que utilices un AWS Step Functions modelo o un trabajo de procesamiento de SageMaker IA.

  • Utilice las declaraciones Assert en las secciones críticas del script para facilitar las pruebas y la depuración. Por ejemplo, puede usar una declaración Assert para garantizar que el número de características del conjunto de datos sea uniforme después de la carga.

Pruebas unitarias

Las pruebas unitarias de los scripts en tiempo de ejecución que se escribieron para la canalización son una tarea importante que, con frecuencia, se pasa por alto en el desarrollo de la canalización de ML. Esto se debe a que el machine learning y la ciencia de datos son campos relativamente nuevos y han tardado en adoptar prácticas de ingeniería de software bien establecidas, como las pruebas unitarias. Como la canalización de ML se utilizará en el entorno de producción, es esencial probar el código de la canalización antes de aplicar el modelo de ML a aplicaciones del mundo real.

Las pruebas unitarias del script en tiempo de ejecución también proporcionan las siguientes ventajas exclusivas para los modelos de ML:

  • Evita las transformaciones de datos inesperadas. La mayoría de las canalizaciones de ML implican muchas transformaciones de datos, por lo que es fundamental que estas transformaciones se realicen según lo esperado.

  • Valida la reproducibilidad del código. Cualquier aleatoriedad en el código se puede detectar mediante pruebas unitarias con diferentes casos de uso.

  • Refuerza la modularidad del código. Las pruebas unitarias suelen estar asociadas a la medida de cobertura de la prueba, que es el grado en que un conjunto de pruebas en particular (una colección de casos de prueba) ejecuta el código fuente de un programa. Para lograr una alta cobertura de pruebas, los desarrolladores modularizan el código, ya que es difícil escribir pruebas unitarias para una gran cantidad de código sin dividirlo en funciones o clases.

  • Evita que se introduzcan errores o código de baja calidad en la producción.

Le recomendamos que utilice un marco de pruebas unitarias maduro, como pytest, para escribir los casos de las pruebas unitarias, ya que es más fácil gestionar pruebas unitarias exhaustivas dentro de un marco.

importante

Las pruebas unitarias no pueden garantizar que se prueben todos los casos extremos, pero pueden ayudarle a evitar errores de forma proactiva antes de implementar el modelo. Le recomendamos que también monitorice el modelo después de la implementación para garantizar la excelencia operativa.