Comment éviter l'erreur «conda --version: conda not found» dans la commande az ml run --submit-script?

Oct 05 2020

Je souhaite exécuter un script de test sur une instance de calcul existante d'Azure à l'aide de l'extension Azure Machine Learning sur Azure CLI:

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

J'obtiens une erreur de service avec le message d'erreur suivant:

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

Mais lorsque je me connecte à l'instance de calcul via le portail Azure et que je sélectionne le noyau Python par défaut, conda --versionimprime 4.5.12. Ainsi, conda est effectivement déjà installé sur l'instance de calcul. C'est pourquoi je ne comprends pas le message d'erreur.

Plus d'informations sur les versions 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"
  }

L'image que j'utilise est:

mcr.microsoft.com/azure-cli:latest

Quelqu'un peut-il expliquer pourquoi j'obtiens cette erreur et m'aider à résoudre l'erreur? Je vous remercie!

EDIT: J'ai essayé de mettre à jour l'environnement dans lequel la commande az ml run-commande est exécutée. C'est essentiellement mon travail sur GitLab. L'installation de miniconda est un peu compliquée car le azure-cli utilise une image Linux alpine (référence: l' installation de miniconda sur linux alpin échoue ). J'ai remplacé certains noms par ... et découpé des morceaux de code non pertinents.

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 ...

Réponses

3 vizhur Oct 06 2020 at 12:20

Vous avez besoin de conda dans votre image de base pour un environnement basé sur un conteneur. Vous pouvez étendre l'image de base en installant conda en utilisant base_dockerfile au lieu de base_imagehttps://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.environment.dockersection?view=azure-ml-py ou, qui si cela fonctionne pour vous, utilisez l'une des images du docker de base AzureML.

Si vous n'avez pas besoin de dépendances python sur votre image de base, vous pouvez définir user_managed_dependencies sur True et l'image de base sera utilisée telle quelle et aucune dépendance supplémentaire ne sera installée

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

Il faut passer l' --workspace-nameargument pour pouvoir l'exécuter sur la cible de calcul d'Azure et non sur la cible de calcul locale:

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