Administración de entornos de Azure Machine Learning con la CLI y el SDK (v2)

SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)SDK de Python azure-ai-ml v2 (actual)

Los entornos de Azure Machine Learning definen los entornos de ejecución de los trabajos o las implementaciones y encapsulan las dependencias del código. Azure Machine Learning usa la especificación del entorno para crear el contenedor de Docker en el que se ejecuta el código de entrenamiento o puntuación en el destino de proceso especificado. Puede definir un entorno a partir de una especificación de Conda, una imagen de Docker o un contexto de compilación de Docker.

En este artículo, aprenderá a crear y administrar entornos de Azure Machine Learning mediante el SDK y la CLI (v2).

Requisitos previos

Antes de seguir los pasos de este artículo, asegúrese de que tiene los siguientes requisitos previos:

Sugerencia

Si desea un entorno de desarrollo completo, use Visual Studio Code y la extensión de Azure Machine Learning para administrar los recursos de Azure Machine Learning y entrenar modelos de Machine Learning.

Clonación del repositorio de ejemplos

Para ejecutar los ejemplos de entrenamiento, primero clone el repositorio de ejemplos. Para ver los ejemplos de la CLI, cambie al directorio cli. Para ver los ejemplos del SDK, cambie al directorio sdk/python/assets/environment:

git clone --depth 1 https://github.com/Azure/azureml-examples

Tenga en cuenta que --depth 1 solo clona la confirmación más reciente en el repositorio, lo cual reduce el tiempo para completar la operación.

Conexión a un área de trabajo

Sugerencia

Utilice las siguientes pestañas para seleccionar el método que desea utilizar para trabajar con entornos. Al seleccionar una pestaña, se cambiarán automáticamente todas las pestañas de este artículo a la misma pestaña. Puede seleccionar otra pestaña en cualquier momento.

Cuando se utiliza la CLI de Azure, se necesitan parámetros de identificación: una suscripción, un grupo de recursos y un nombre de área de trabajo. Aunque puede especificar estos parámetros para cada comando, también puede establecer valores predeterminados que se utilicen para todos los comandos. Use los siguientes comandos para establecer valores predeterminados. Reemplace <subscription ID>, <Azure Machine Learning workspace name> y <resource group> por los valores de la configuración:

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

Entornos mantenidos

Hay dos tipos de entornos en Azure Machine Learning: entornos mantenidos y personalizados. Los entornos mantenidos son entornos predefinidos que contienen marcos y herramientas populares de ML. Los entornos personalizados están definidos por el usuario y se pueden crear mediante az ml environment create.

Azure Machine Learning proporciona entornos mantenidos y están disponibles de manera predeterminada. Azure Machine Learning actualiza estos entornos de forma rutinaria con las versiones más recientes del marco y los mantiene con correcciones de errores y revisiones de seguridad. Están respaldados por imágenes de Docker almacenadas en caché, lo que reduce el costo de preparación del trabajo y el tiempo de implementación del modelo.

Puede usar estos entornos mantenidos de manera predeterminada para el entrenamiento o la implementación haciendo referencia a una versión específica o a una versión más reciente del entorno. Use la sintaxis siguiente: azureml://registries/azureml/environment/<curated-environment-name>/versions/<version-number> o azureml://registries/azureml/environment/<curated-environment-name>/labels/latest. También puede usarlos como referencia para sus propios entornos personalizados modificando los Dockerfiles que respaldan estos entornos mantenidos.

Puede ver el conjunto de entornos mantenidos disponibles en la interfaz de usuario de Estudio de Azure Machine Learning o mediante la CLI (v2) por medio de az ml environment list.

Sugerencia

Cuando se trabaja con entornos curados en la CLI o el SDK, el nombre del entorno empieza por AzureML- seguido del nombre del entorno curado. Cuando se utiliza el Estudio de Azure Machine Learning, no tienen este prefijo. La razón de esta diferencia es que la interfaz de usuario del estudio muestra los entornos curados y personalizados en pestañas separadas, por lo que el prefijo no es necesario. La CLI y el SDK no tienen esta separación, por lo que el prefijo se utiliza para diferenciar entre entornos curados y personalizados.

Creación de un entorno personalizado

Puede definir un entorno a partir de una imagen de Docker, un contexto de compilación de Docker y una especificación de Conda con la imagen de Docker.

Creación de un entorno a partir de una imagen de Docker

Para definir un entorno a partir de una imagen de Docker, proporcione el URI de la imagen hospedada en un registro como Docker Hub o Azure Container Registry.

El ejemplo siguiente es un archivo de especificaciones YAML para un entorno definido a partir de una imagen de Docker. Se especifica una imagen del repositorio oficial de PyTorch en Docker Hub mediante la propiedad image del archivo YAML.

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-image-example
image: pytorch/pytorch:latest
description: Environment created from a Docker image.

Para crear el entorno:

az ml environment create --file assets/environment/docker-image.yml

Sugerencia

Azure Machine Learning mantiene un conjunto de imágenes base basadas en Ubuntu Linux CPU y GPU con dependencias comunes del sistema. Por ejemplo, las imágenes de GPU contienen Miniconda, OpenMPI, CUDA, cuDNN y NCCL. Puede usar estas imágenes para sus entornos o usar sus documentos Dockerfile correspondientes como referencia a la hora de compilar sus propias imágenes personalizadas.

Para obtener el conjunto de imágenes base y sus documentos Dockerfile correspondientes, vea el repositorio AzureML-Containers.

Creación de un entorno a partir de un contexto de compilación de Docker

En lugar de definir un entorno a partir de una imagen precompilada, puede hacerlo a partir de un contexto de compilación de Docker. Para ello, especifique el directorio que sirve de contexto de compilación. Este directorio debe contener un documento Dockerfile (no mayor a 1 MB) y cualquier otro archivo necesario para compilar la imagen.

El ejemplo siguiente es un archivo de especificaciones YAML para un entorno definido a partir de un contexto de compilación. La ruta de acceso local a la carpeta del contexto de compilación se especifica en el campo build.path y la ruta de acceso relativa al documento Dockerfile dentro de esa carpeta del contexto de compilación se especifica en el campo build.dockerfile_path. Si build.dockerfile_path se omite en el archivo YAML, Azure Machine Learning busca un archivo Docker llamado Dockerfile en la raíz del contexto de compilación.

En este ejemplo el contexto de compilación contiene un documento Dockerfile de nombre Dockerfile y un archivo requirements.txt al que se hace referencia dentro del documento Dockerfile para instalar paquetes de Python.

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-context-example
build:
  path: docker-contexts/python-and-pip

Para crear el entorno:

az ml environment create --file assets/environment/docker-context.yml

Azure Machine Learning comienza a crear la imagen a partir del contexto de creación cuando se crea el entorno. Puede supervisar el estado de la compilación y ver los registros de compilación en la interfaz de usuario de Studio.

Creación de un entorno a partir de una especificación de Conda

Puede definir un entorno mediante un archivo de configuración YAML de Conda estándar que incluya las dependencias del entorno de Conda. Vea Creación manual de un entorno para obtener información sobre este formato estándar.

También debe especificar una imagen base de Docker para este entorno. Azure Machine Learning crea el entorno conda sobre la imagen Docker proporcionada. Si instala algunas dependencias de Python en la imagen de Docker, dichos paquetes no existirán en el entorno de ejecución, lo que provocará errores en tiempo de ejecución. Por defecto, Azure Machine Learning crea un entorno Conda con las dependencias que especifiques y ejecuta el trabajo en ese entorno en lugar de utilizar las bibliotecas Python que haya instalado en la imagen base.

El ejemplo siguiente es un archivo de especificaciones YAML para un entorno definido a partir de una especificación de Conda. Aquí se especifica la ruta de acceso relativa al archivo de Conda desde el archivo YAML del entorno de Azure Machine Learning mediante la propiedad conda_file. También puede definir la especificación de Conda insertada mediante la propiedad conda_file, en lugar de definirla en un archivo independiente.

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-image-plus-conda-example
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
conda_file: conda-yamls/pydata.yml
description: Environment created from a Docker image plus Conda environment.

Para crear el entorno:

az ml environment create --file assets/environment/docker-image-plus-conda.yaml

Azure Machine Learning crea la imagen Docker final a partir de esta especificación de entorno cuando el entorno se utiliza en un trabajo o implementación. También puede desencadenar manualmente una compilación del entorno en la interfaz de usuario de Studio.

Administración de entornos

El SDK y la CLI (v2) también le permiten administrar el ciclo de vida de los activos del entorno de Azure Machine Learning.

List

Enumera todos los entornos del área de trabajo:

az ml environment list

Enumera todas las versiones del entorno con un nombre determinado:

az ml environment list --name docker-image-example

Mostrar

Obtiene los detalles de un entorno específico:

az ml environment show --name docker-image-example --version 1

Actualizar

Actualiza propiedades mutables de un entorno específico:

az ml environment update --name docker-image-example --version 1 --set description="This is an updated description."

Importante

En los entornos solo se pueden actualizar description y tags. Todas las demás propiedades son inmutables; si necesita cambiar alguna de esas propiedades, debe crear una nueva versión del entorno.

Archivo

Archivar un entorno lo oculta por defecto de las consultas de listas (az ml environment list). Todavía puede seguir haciendo referencia a un entorno archivado y usarlo en los flujos de trabajo. Puede archivar todas las versiones de un entorno, o bien solo una versión específica.

Si no se especifica una versión, se archivan todas las versiones del entorno con ese nombre. Si crea una nueva versión de entorno bajo un contenedor de entorno archivado, esa nueva versión también se establece automáticamente como archivada.

Archivado de todas las versiones de un entorno:

az ml environment archive --name docker-image-example

Archivado de una versión de entorno específica:

az ml environment archive --name docker-image-example --version 1

Uso de entornos para el entrenamiento

Para usar un entorno personalizado para un trabajo de entrenamiento, especifique el campo environment de la configuración de YAML del trabajo. Puede hacer referencia a un entorno de Azure Machine Learning registrado existente a través de environment: azureml:<environment-name>:<environment-version> o environment: azureml:<environment-name>@latest (para hacer referencia a la versión más reciente de un entorno) o definir una especificación de entorno insertada. Si define un entorno insertado, no especifique los campos name y version, ya que estos entornos se tratan como entornos "no registrados" y no se hace su seguimiento de ellos en el registro de recursos del entorno.

Cuando se envía un trabajo de entrenamiento, la compilación de un nuevo entorno puede tardar varios minutos. La duración depende del tamaño de las dependencias necesarias. Los entornos se almacenan en caché en el servicio. Por tanto, siempre y cuando la definición del entorno permanezca inalterada, incurrirá en el tiempo de configuración completo una sola vez.


Para obtener más información sobre cómo usar entornos en trabajos, consulte Entrenamiento de modelos.

Uso de entornos para implementaciones de modelos

También puede usar entornos para las implementaciones de modelos para la puntuación en línea y por lotes. Para ello, especifique el campo environment en la configuración de YAML de implementación.

Para más información sobre cómo usar entornos en implementaciones, vea Implementación y puntuación de un modelo de Machine Learning con un punto de conexión en línea.

Pasos siguientes