Azure ML 无法创建 conda 环境(退出代码:-15)

Azure ML not able to create conda environment (exit code: -15)

当我尝试 运行 在笔记本中 this notebook 中定义的实验时,我在创建 conda 环境时遇到了错误。执行以下单元格时发生错误:

from azureml.core import Experiment, ScriptRunConfig, Environment
from azureml.core.conda_dependencies import CondaDependencies
from azureml.widgets import RunDetails


# Create a Python environment for the experiment
sklearn_env = Environment("sklearn-env")

# Ensure the required packages are installed (we need scikit-learn, Azure ML defaults, and Azure ML dataprep)
packages = CondaDependencies.create(conda_packages=['scikit-learn','pip'],
                                    pip_packages=['azureml-defaults','azureml-dataprep[pandas]'])
sklearn_env.python.conda_dependencies = packages

# Get the training dataset
diabetes_ds = ws.datasets.get("diabetes dataset")

# Create a script config
script_config = ScriptRunConfig(source_directory=experiment_folder,
                              script='diabetes_training.py',
                              arguments = ['--regularization', 0.1, # Regularizaton rate parameter
                                           '--input-data', diabetes_ds.as_named_input('training_data')], # Reference to dataset
                              environment=sklearn_env)

# submit the experiment
experiment_name = 'mslearn-train-diabetes'
experiment = Experiment(workspace=ws, name=experiment_name)
run = experiment.submit(config=script_config)
RunDetails(run).show()
run.wait_for_completion() 

每次我 运行 这个,我总是面临如下创建 conda env 的问题:

Creating conda environment...
Running: ['conda', 'env', 'create', '-p', '/home/azureuser/.azureml/envs/azureml_000000000000', '-f', 'azureml-environment-setup/mutated_conda_dependencies.yml']
Collecting package metadata (repodata.json): ...working... done
Solving environment: ...working... done
Preparing transaction: ...working... done
Verifying transaction: ...working... done
Executing transaction: ...working... done

Installing pip dependencies: ...working... 

Attempting to clean up partially built conda environment: /home/azureuser/.azureml/envs/azureml_000000000000
Remove all packages in environment /home/azureuser/.azureml/envs/azureml_000000000000:
Creating conda environment failed with exit code: -15

我在互联网上找不到任何有用的东西,这不是唯一失败的脚本。当我尝试 运行 其他实验时,我有时会遇到这个问题。在上述情况下有效的一种解决方案是我将 pandas 从 pip 移动到 conda 并且它能够创建 coonda env。示例如下:

# Ensure the required packages are installed (we need scikit-learn, Azure ML defaults, and Azure ML dataprep)
packages = CondaDependencies.create(conda_packages=['scikit-learn','pip'],
                                    pip_packages=['azureml-defaults','azureml-dataprep[pandas]'])

# Ensure the required packages are installed (we need scikit-learn, Azure ML defaults, and Azure ML dataprep)
packages = CondaDependencies.create(conda_packages=['scikit-learn','pip','pandas'],
                                    pip_packages=['azureml-defaults','azureml-dataprep'])

错误消息(或来自 Azure 的日志)也没有太大帮助。如果有合适的解决方案,将不胜感激。

编辑:我最近开始学习使用 Azure 进行机器学习,所以如果我不确定我是否遗漏了什么?我认为示例笔记本应该可以正常工作,因此提出了这个问题。

简答

以前完全是你的鞋子。此代码示例似乎有点过时了。使用 this notebook 作为参考,您可以尝试以下操作吗?

packages = CondaDependencies.create(
    pip_packages=['azureml-defaults','scikit-learn']
)

更长的答案

Using pip with Conda并不总是一帆风顺。在这种情况下,conda 不会报告 pip 遇到的问题。解决方案是在本地创建和测试此环境,我们可以获得更多信息,这至少会给您提供更多信息的错误消息。

  1. 安装 anaconda 或 miniconda(或使用具有 conda pre-installed 的 Azure ML 计算实例)
  2. 创建一个名为 environment.yml 的文件,如下所示
name: aml_env
dependencies:
 - python=3.8
 - pip=21.0.1
 - pip:
    - azureml-defaults
    - azureml-dataprep[pandas]
    - scikit-learn==0.24.1
  1. 使用命令 conda env create -f environment.yml 创建此环境。
  2. 响应任何发现的错误消息
  3. 如果没有错误,请像这样将这个新的 environment.yml 与 Azure ML 一起使用
sklearn_env = Environment.from_conda_specification(name = 'sklearn-env', file_path = './environment.yml')

更多上下文

我猜发生的错误是当您从 conda 环境文件中引用 pip 需求文件时。在这种情况下,conda 调用 pip install -r requirements.txt,如果该命令出错,conda 无法报告错误。

requirements.txt

scikit-learn==0.24.1
azureml-dataprep[pandas]

environment.yml

name: aml_env
dependencies:
 - python=3.8
 - pip=21.0.1
 - pip:
    - -rrequirements.txt

查看以前的笔记本对我有用的地方05 - Train Models.ipynb:

packages = CondaDependencies.create(conda_packages=['pip', 'scikit-learn'],
                                    pip_packages=['azureml-defaults'])

你必须:

  1. pip_packages
  2. 中删除 'azureml-dataprep[pandas]'
  3. 更改 conda_packages 的顺序 - pip 应该先行