¿Qué son los entornos de Azure Machine Learning?

Los entornos de Azure Machine Learning son una encapsulación del entorno en el que se produce el entrenamiento de aprendizaje automático. Especifican los paquetes de Python y la configuración de software en torno a los scripts de entrenamiento y puntuación. Los entornos son entidades administradas y con versiones en el área de trabajo de Machine Learning que permiten flujos de trabajo de aprendizaje automático reproducibles, auditables y portátiles en diversos destinos de proceso.

Puede utilizar un objeto Environment para:

  • Desarrollar el script de aprendizaje.
  • Reutilizar el mismo entorno en el Proceso de Azure Machine Learning para el entrenamiento del modelo a escala.
  • Implementar el modelo con ese mismo entorno.
  • Vuelva a revisar el entorno en el que se entrenó un modelo existente.

En el diagrama siguiente se ilustra cómo puede usar un solo objeto Environment en la configuración del trabajo (para el entrenamiento) y en la configuración de la inferencia y la implementación (para las implementaciones de servicios web).

Diagram of an environment in machine learning workflow

El entorno, el destino de proceso y el script de entrenamiento constituyen todos juntos la configuración del trabajo: la especificación completa de un trabajo de entrenamiento.

Tipos de entornos

Los entornos se pueden dividir a grandes rasgos en tres categorías: mantenidos, administrados por el usuario y administrados por el sistema.

Los entornos mantenidos los proporciona Azure Machine Learning y están disponibles en el área de trabajo de forma predeterminada. Están concebidos para usarse tal cual; contienen colecciones de paquetes y configuraciones de Python que le ayudarán a empezar a usar diferentes marcos de aprendizaje automático. Estos entornos creados previamente también permiten un tiempo de implementación más rápido. Los entornos mantenidos se hospedan en el registro de AzureML. Para obtener una lista completa, consulte los entornos del registro de azureml.

Para los entornos administrados por usuarios, es responsable de configurar el entorno e instalar todos los paquetes que necesita el script de entrenamiento en el destino de proceso. Asegúrese también de incluir las dependencias necesarias para realizar la implementación del modelo. El entorno administrado por el usuario puede ser de tipo BYOC (Bring Your Own Container) o basarse en el contexto de compilación de Docker, que delega la materialización de las imágenes en AzureML.

Use entornos administrados por el sistema cuando quiera que Conda administre el entorno de Python. Un nuevo entorno de Conda se materializa a partir de la especificación de Conda sobre una imagen base de Docker.

Creación y administración de entornos

Puede crear entornos desde clientes como el SDK de Python de Azure Machine Learning, la CLI de Azure Machine Learning, la página Entornos de Azure Machine Learning Studio y la extensión de VS Code. Cada cliente permite personalizar la imagen base, Dockerfile y la capa de Python si es necesario.

Para ver ejemplos de código específicos, consulte la sección "Creación de un entorno" de Uso de los entornos.

Los entornos también se administran fácilmente a través del área de trabajo, lo que le permite:

  • Registrar de entornos.
  • Capturar entornos del área de trabajo que se usarán para el entrenamiento o la implementación.
  • Crear una nueva instancia de un entorno editando una existente.
  • Ver los cambios en los entornos en el tiempo, lo que garantiza la reproducibilidad.
  • Compilar imágenes de Docker de forma automática desde los entornos.

Los entornos "anónimos" se registran de forma automática en el área de trabajo cuando se envía un experimento. No se mostrarán en la lista, pero se pueden recuperar por versión.

Para ver ejemplos de código, consulte la sección "Administración de entornos" de Uso de entornos.

Compilación, almacenamiento en caché y reutilización de entornos

Azure Machine Learning compila definiciones de entorno en imágenes de Docker. También almacena en caché los entornos para que se puedan volver a usar en trabajos de entrenamiento e implementaciones de punto de conexión de servicio posteriores. La ejecución de un script de entrenamiento remoto requiere la creación de una imagen Docker. De forma predeterminada, AzureML administra el destino de compilación de las imágenes según la cuota de proceso sin servidor disponible del área de trabajo si no hay ningún conjunto de proceso dedicado para el área de trabajo.

Nota:

Las restricciones de red en el área de trabajo de AzureML pueden requerir la configuración de un proceso de compilación de imágenes administradas por el usuario dedicado. Siga los pasos para proteger los recursos del área de trabajo.

Envío de un trabajo mediante un entorno

Cuando envíe por primera vez un trabajo remoto mediante un entorno o cree una instancia de entorno de forma manual, Azure Machine Learning compila una imagen para la especificación proporcionada. La imagen resultante se almacena en caché en la instancia del registro de contenedor asociada al área de trabajo. Los entornos mantenidos ya están almacenados en caché en el Registro de AzureML. Al inicio de la ejecución del trabajo, el destino de proceso recupera la imagen del registro de contenedor pertinente.

Compilación de entornos como imágenes de Docker

Si la imagen de una definición de entorno determinada aún no existe en la instancia del registro de contenedor asociada al área de trabajo de AzureML, se compila una nueva imagen. En el caso de los entornos administrados por el sistema, la compilación de imágenes consta de dos pasos:

  1. Descarga de una imagen base y ejecución de todos los pasos de Docker;
  2. Creación de un entorno de Conda según las dependencias de Conda que se hayan especificado en la definición de entorno.

En el caso de los entornos administrados por el usuario, el contexto de Docker proporcionado se compilará tal cual. En este caso, es responsable de instalar todos los paquetes de Python, ya sea al incluirlos en la imagen base o al especificar pasos de Docker personalizados.

Almacenamiento en caché y reutilización de imágenes

Si usa la misma definición de entorno para otro trabajo, Azure Machine Learning vuelve a usar la imagen almacenada en caché del registro de contenedor asociado con su área de trabajo.

Para ver los detalles de una imagen almacenada en caché, consulte la página Entornos en Estudio de Azure Machine Learning o use MLClient.environments para obtener el entorno e inspeccionarlo.

Para determinar si se debe reutilizar una imagen almacenada en caché o si debe crear una nueva, Azure Machine Learning calcula un valor hash a partir de la definición de entorno y lo compara con los valores hash de los entornos existentes. El hash actúa como identificador único de un entorno y se basa en las definiciones del entorno:

  • Base image
  • Pasos para la personalización de una imagen de Docker
  • Paquetes de Python

El hash no se ve afectado por el nombre o la versión del entorno. Si cambia el nombre del entorno o crea uno con la misma configuración y paquetes que otro entorno, el valor hash sigue siendo el mismo. Sin embargo, los cambios en la definición del entorno, como agregar o eliminar un paquete de Python o cambiar la versión de un paquete, cambian el valor hash resultante. Cambiar el orden de las dependencias o los canales en un entorno también cambiará el hash y requerirá una nueva compilación de imagen. De forma similar, cualquier cambio en un entorno mantenido da como resultado la creación de un entorno personalizado.

Nota:

No podrá enviar ningún cambio local a un entorno seleccionado sin cambiar el nombre del entorno. Los prefijos "AzureML-" y "Microsoft" se reservan exclusivamente para entornos seleccionados y se producirá un error en el envío del trabajo si el nombre comienza por cualquiera de ellos.

El valor hash calculado del entorno se compara con los del registro de contenedor del área de trabajo. Si se encuentra una coincidencia, se extrae y se usa la imagen almacenada en caché; de lo contrario, se desencadena una compilación de la imagen.

En el siguiente diagrama se muestran tres definiciones de entorno. Dos de ellos tienen nombres y versiones diferentes, pero imágenes base idénticas y paquetes de Python, lo que da como resultado el mismo hash y la misma imagen almacenada en caché correspondiente. El tercer entorno tiene diferentes paquetes y versiones de Python y, por lo tanto, corresponde a una imagen almacenada en caché y un hash distintos.

Diagram of environment caching and Docker images

Las imágenes almacenadas en caché en el registro de contenedor del área de trabajo tienen nombres similares a azureml/azureml_e9607b2514b066c851012848913ba19f donde el hash aparece al final.

Importante

  • Si se crea un entorno con una dependencia de paquete desanclada (por ejemplo, numpy), dicho entorno usa la versión de paquete que estuviera disponible cuando se creó el entorno. Además, cualquier entorno futuro que use una definición coincidente usará la versión original.

    Para actualizar el paquete, especifique un número de versión para forzar la recompilación de la imagen. Por ejemplo, cambie numpy por numpy==1.18.1. Se instalarán nuevas dependencias, incluidas las anidadas, lo que podría estropear un escenario que anteriormente funcionaba.

  • Usar una imagen base desanclada como mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 en la definición de entorno puede tener como resultado que la imagen se recompile cada vez que la etiqueta latest se actualice. Esto permite que la imagen reciba las revisiones y actualizaciones del sistema más recientes.

Aplicación de revisiones de imágenes

Microsoft es responsable de aplicar revisiones a las imágenes base en busca de vulnerabilidades de seguridad conocidas. Las actualizaciones de las imágenes admitidas se lanzan cada dos semanas, con el compromiso de que no haya vulnerabilidades sin revisiones anteriores a 30 días en la versión más reciente de la imagen. Las imágenes con revisión se presentan con una nueva etiqueta inmutable y la etiqueta :latest se actualiza a la versión más reciente de la imagen con revisión.

Debe actualizar los recursos de Azure Machine Learning asociados para usar la imagen recién revisada. Por ejemplo, al trabajar con un punto de conexión en línea administrado, debe reimplementar el punto de conexión para usar la imagen revisada.

Si proporciona sus propias imágenes, es su responsabilidad actualizarlas y actualizar los recursos de Azure Machine Learning que las usan.

Para obtener más información acerca de las imágenes base, consulte los vínculos siguientes:

Pasos siguientes