¿Cómo evitar el error "conda --version: conda not found" en el comando az ml run --submit-script?

Oct 05 2020

Me gustaría ejecutar un script de prueba en una instancia de proceso existente de Azure utilizando la extensión de Azure Machine Learning para la CLI de Azure:

az ml run submit-script test.py --target compute-instance-test --experiment-name test_example --resource-group ex-test-rg

Recibo un error de servicio con el siguiente mensaje de error:

Unable to run conda package manager. AzureML uses conda to provision python\nenvironments from a dependency specification. To manage the python environment\nmanually instead, set userManagedDependencies to True in the python environment\nconfiguration. To use system managed python environments, install conda from:\nhttps://conda.io/miniconda.html

Pero cuando me conecto a la instancia informática a través de Azure Portal y selecciono el kernel de Python predeterminado, conda --versionimprime 4.5.12. Entonces, conda ya está instalado efectivamente en la instancia informática. Es por eso que no entiendo el mensaje de error.

Más información sobre las versiones azure:

  "azure-cli": "2.12.1",
  "azure-cli-core": "2.12.1",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {
    "azure-cli-ml": "1.15.0"
  }

La imagen que utilizo es:

mcr.microsoft.com/azure-cli:latest

¿Alguien puede explicar por qué recibo este error y ayudarme a resolverlo? ¡Gracias!

EDITAR: Traté de actualizar el entorno en el que az ml runse ejecuta el comando -command. Básicamente, este es mi trabajo en GitLab. La instalación de miniconda es un poco complicada ya que azure-cli usa una imagen de alpine Linux (referencia: falla la instalación de miniconda en alpine linux ). Reemplacé algunos nombres con ... y corté algunas piezas de código irrelevantes.

test:
  image: 'mcr.microsoft.com/azure-cli:latest'
  script:
    - echo "Download conda"
    - apk --update add bash curl wget ca-certificates libstdc++ glib
    - wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-node-bower/master/sgerrand.rsa.pub
    - curl -L "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.23-r3/glibc-2.23-r3.apk" -o glibc.apk
    - apk del libc6-compat
    - apk add glibc.apk
    - curl -L "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.23-r3/glibc-bin-2.23-r3.apk" -o glibc-bin.apk 
    - apk add glibc-bin.apk 
    - curl -L "https://github.com/andyshinn/alpine-pkg-glibc/releases/download/2.25-r0/glibc-i18n-2.25-r0.apk" -o glibc-i18n.apk
    - apk add --allow-untrusted glibc-i18n.apk 
    - /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 
    - /usr/glibc-compat/sbin/ldconfig /lib /usr/glibc/usr/lib
    - rm -rf glibc*apk /var/cache/apk/*
    - echo "yes" | curl -sSL https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -o miniconda.sh
    - echo "Install conda"
    - (echo -e "\n"; echo "yes"; echo -e "\n"; echo "yes") | bash -bfp miniconda.sh
    - echo "Installing Azure Machine Learning Extension"
    - az extension add -n azure-cli-ml
    - echo "Azure Login"
    - az login
    - az account set --subscription ...
    - az configure --defaults group=...
    - az ml folder attach -w ... 
    - az ml run submit-script test.py --target ... --experiment-name hello_world --resource-group ...

Respuestas

3 vizhur Oct 06 2020 at 12:20

Necesita conda en su imagen base para un entorno basado en contenedores. Puede extender la imagen base instalando conda usando base_dockerfile en lugar de base_imagehttps://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.environment.dockersection?view=azure-ml-py o, que si funciona para usted, use una de las imágenes de la ventana acoplable base de AzureML.

Si no necesita ninguna dependencia de Python en la parte superior de su imagen base, puede establecer user_managed_dependencies en True y la imagen base se usará tal cual y no se instalarán dependencias adicionales

https://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.environment.pythonsection?view=azure-ml-py

1 mgross Oct 23 2020 at 15:16

Es necesario pasar el --workspace-nameargumento para poder ejecutarlo en el destino de proceso de Azure y no en el destino de proceso local:

az ml run submit-script test.py --target compute-instance-test --experiment-name test_example --resource-group ex-test-rg --workspace-name test-ws