如何避免 az ml 运行 --submit-script 命令中的错误 "conda --version: conda not found"?

How to avoid error "conda --version: conda not found" in az ml run --submit-script command?

我想 运行 使用 Azure CLI 的 Azure 机器学习扩展在现有的 Azure 计算实例上测试脚本:

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

我收到带有以下错误消息的服务错误:

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

但是当我通过 Azure 门户和 select 默认 Python 内核连接到计算实例时,conda --version 打印 4.5.12。因此 conda 实际上已经安装在计算实例上。这就是我不明白错误信息的原因。

有关 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"
  }

我使用的图片是:

mcr.microsoft.com/azure-cli:latest

有人可以解释为什么我会收到此错误并帮助我解决错误吗?谢谢!

编辑:我试图更新 az ml run 命令为 运行 的环境。 本质上这是我的 GitLab 工作。 miniconda 的安装有点复杂,因为 azure-cli 使用的是 alpine Linux 镜像(参考:)。我用...替换了一些名称并删除了一些不相关的代码。

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

对于基于容器的环境,您的基础映像中需要 conda。您可以使用 base_dockerfile 而不是 base_image 安装 conda 来扩展基本映像 https://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.environment.dockersection?view=azure-ml-py 或者,如果这对您有用,请使用 AzureML 基础 docker 图像之一。

如果你的基础镜像不需要任何python依赖,你可以将user_managed_dependencies设置为True,基础镜像将按原样使用,不会安装额外的依赖

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

需要传递 --workspace-name 参数才能 运行 它在 Azure 的计算目标而不是本地计算目标上:

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

使用:

runconfig.environment.python.user_managed_dependencies = True

这应该可以解决问题