对 Python 中的自动化 ML 试验进行故障排除

适用于:Python SDK azureml v1

在本指南中,了解如何使用 Azure 机器学习 SDK 识别和解决自动化机器学习试验中的已知问题。

版本依赖项

AutoML 与更新的包版本的依赖项中断了兼容性。 SDK 1.13.0 版本之后,由于以前的 AutoML 包中固定的旧版本与今天固定的较新版本之间不兼容,因此模型不会加载到旧的 SDK 中。

可能出现以下错误:

  • 找不到模块错误,例如,

    No module named 'sklearn.decomposition._truncated_svd'

  • 导入错误,例如,

    ImportError: cannot import name 'RollingOriginValidator'

  • 属性错误,例如,

    AttributeError: 'SimpleImputer' object has no attribute 'add_indicator'

解决方法取决于 AutoML SDK 训练版本:

  • 如果 AutoML SDK 训练版本高于 1.13.0,则需要 pandas == 0.25.1scikit-learn==0.22.1

    • 如果版本不匹配,请使用以下命令将 scikit-learn 和/或 pandas 升级到正确的版本,

          pip install --upgrade pandas==0.25.1
          pip install --upgrade scikit-learn==0.22.1
      
  • 如果 AutoML SDK 训练版本低于或等于 1.12.0,则需要 pandas == 0.23.4sckit-learn==0.20.3

    • 如果版本不匹配,请使用以下命令将 scikit-learn 和/或 pandas 降级到正确的版本,

        pip install --upgrade pandas==0.23.4
        pip install --upgrade scikit-learn==0.20.3
      

设置

从 1.0.76 版本开始的 AutoML 包更改需要在更新到新版本之前卸载之前的版本。

  • ImportError: cannot import name AutoMLConfig

    如果从 v1.0.76 之前的 SDK 版本升级到 v1.0.76 或更高版本后遇到该错误,请先运行 pip uninstall azureml-train automl 再运行 pip install azureml-train-automl 来解决该错误。 automl_setup.cmd 脚本会自动执行此操作。

  • automl_setup 失败

    • 在 Windows 上,从 Anaconda 提示符运行 automl_setup。 安装 Miniconda

    • 确保已安装 conda 64 位 4.4.10 版本或更高版本。 可以使用命令 conda info 检查该位。 对于 Windows,platform 应为 win-64,对于 Mac,应为 osx-64。 若要检查版本,请使用命令 conda -V。 如果安装了以前的版本,可以使用以下命令对其进行更新:conda update conda。 若要检查 32 位,请运行

    • 确保已安装 conda。

    • Linux - gcc: error trying to exec 'cc1plus'

      1. 如果遇到 gcc: error trying to exec 'cc1plus': execvp: No such file or directory 错误,请为 Linux 分发版安装 GCC 构建工具。 例如,在 Ubuntu 上,使用命令 sudo apt-get install build-essential

      2. 将新名称作为第一个参数传递给 automl_setup 以创建新的 conda 环境。 使用 conda env list 查看现有的 conda 环境,并使用 conda env remove -n <environmentname> 删除它们。

  • automl_setup_linux.sh 失败:如果 automl_setup_linus.sh 在 Ubuntu Linux 上失败,并出现错误:unable to execute 'gcc': No such file or directory

    1. 确保已启用出站端口 53 和 80。 在 Azure 虚拟机上,可选择 VM 并单击“网络”,从 Azure 门户执行此操作。
    2. 运行命令 sudo apt-get update
    3. 运行命令 sudo apt-get install build-essential --fix-missing
    4. 再次运行 automl_setup_linux.sh
  • configuration.ipynb 失败

    • 对于本地 conda,请首先确保 automl_setup 已成功运行。
    • 确保 subscription_id 是正确的。 依次选择“所有服务”和“订阅”,在 Azure 门户中查找 subscription_id。 字符“<”和“>”不应包含在 subscription_id 值中。 例如,subscription_id = "12345678-90ab-1234-5678-1234567890abcd" 的格式有效。
    • 确保参与者或所有者有权访问订阅。
    • 检查该区域是否为受支持的区域之一:chinaeast2chinaeast2chinaeast2chinaeast2chinaeast2chinaeast2chinaeast2chinaeast2
    • 确保使用 Azure 门户访问该区域。
  • workspace.from_config 失败

    如果调用 ws = Workspace.from_config() 失败:

    1. 确保 configuration.ipynb 笔记本已成功运行。
    2. 如果正在从不在运行 configuration.ipynb 的文件夹下的文件夹中运行笔记本,则将文件夹 aml_config 及其包含的文件 config.json 复制到新文件夹中。 Workspace.from_config 读取笔记本文件夹或其父文件夹的 config.json。
    3. 如果正在使用新的订阅、资源组、工作区或区域,请确保再次运行 configuration.ipynb 笔记本。 仅当指定订阅下的指定资源组中已存在工作区时,直接更改 config.json 才会生效。
    4. 如果要更改区域,请更改工作区、资源组或订阅。 即使指定的区域不同,Workspace.create 也不会创建或更新工作区(如果已存在)。

TensorFlow

从 SDK 1.5.0 版开始,自动化机器学习默认不安装 TensorFlow 模型。 若要安装 TensorFlow 并将其用于自动化 ML 试验,请通过 CondaDependencies 安装 tensorflow==1.12.0

  from azureml.core.runconfig import RunConfiguration
  from azureml.core.conda_dependencies import CondaDependencies
  run_config = RunConfiguration()
  run_config.environment.python.conda_dependencies = CondaDependencies.create(conda_packages=['tensorflow==1.12.0'])

Numpy 失败

  • import numpy 在 Windows 中失败:在某些 Windows 环境中,最新的 Python 3.6.8 版本加载 numpy 时会出现错误。 如果出现此问题,请尝试使用 Python 3.6.7 版本。

  • import numpy 失败:在自动化 ML conda 环境中检查 TensorFlow 版本。 支持的版本为低于 1.13 的版本。 如果版本不低于 1.13,请从环境中卸载 TensorFlow。

可以按下面的方式检查 TensorFlow 的版本并卸载:

  1. 启动命令 shell,激活安装了自动化 ML 包的 conda 环境。
  2. 输入 pip freeze 并查找 tensorflow,如果找到,则列出的版本应低于 1.13
  3. 如果列出的版本不受支持,请在命令行界面中使用 pip uninstall tensorflow,并输入 y 进行确认。

jwt.exceptions.DecodeError

确切的错误消息:jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode()

对于不高于 1.17.0 的 SDK 版本,安装可能会导致 PyJWT 的版本不受支持。 检查自动 ml conda 环境中的 PyJWT 版本是否是受支持的版本。 即 PyJWT 版本低于 2.0.0。

可以按下面的方式检查 PyJWT 的版本:

  1. 启动命令 shell,并激活安装了自动化 ML 包的 conda 环境。

  2. 输入 pip freeze 并查找 PyJWT,如果找到,则列出的版本应低于 2.0.0

如果列出的版本不是受支持的版本:

  1. 请考虑升级到 AutoML SDK 的最新版本:pip install -U azureml-sdk[automl]

  2. 如果这不可行,请从环境中卸载 PyJWT,并安装正确的版本,如下所示:

    1. 在命令行界面中输入 pip uninstall PyJWT,然后输入 y 进行确认。
    2. 使用 pip install 'PyJWT<2.0.0' 进行安装。

数据访问

对于自动化 ML 作业,需要确保连接到 AzureFile 存储的文件数据存储具有适当的身份验证凭据。 否则,将显示以下消息。 了解如何更新数据访问身份验证凭据

错误消息:Could not create a connection to the AzureFileService due to missing credentials. Either an Account Key or SAS token needs to be linked the default workspace blob store.

数据架构

尝试使用 Azure 机器学习工作室中的“编辑并提交”按钮新建自动化 ML 试验时,新试验的数据架构必须与初始试验中所用的数据架构相匹配。 否则将显示与以下内容类似的错误消息。 详细了解如何从工作室 UI 编辑并提交试验

错误消息非视觉试验: Schema mismatch error: (an) additional column(s): "Column1: String, Column2: String, Column3: String", (a) missing column(s)

视觉数据集的错误消息:Schema mismatch error: (an) additional column(s): "dataType: String, dataSubtype: String, dateTime: Date, category: String, subcategory: String, status: String, address: String, latitude: Decimal, longitude: Decimal, source: String, extendedProperties: String", (a) missing column(s): "image_url: Stream, image_details: DataRow, label: List" Vision dataset error(s): Vision dataset should have a target column with name 'label'. Vision dataset should have labelingProjectType tag with value as 'Object Identification (Bounding Box)'.

Databricks

请参阅如何使用 Databricks(Azure 机器学习 SDK v1)配置自动化 ML 试验

预测 R2 评分始终为零

如果提供的训练数据的时间序列包含的值与上一个 n_cv_splits + forecasting_horizon 数据点相同,则会出现此问题。

如果该模式在你的时序中是预期的,可将主要指标切换为“规范化均方根误差”。

部署失败

对于版本早于 1.18.0 的 SDK,为部署创建的基本映像可能会失败,并出现以下错误:ImportError: cannot import name cached_property from werkzeug

以下步骤可解决此问题:

  1. 下载模型包
  2. 将包解压缩
  3. 使用解压缩资产进行部署

Azure Functions 应用程序

自动化 ML 当前不支持 Azure Functions 应用程序。

示例笔记本失败

如果示例笔记本失败,并出现属性、方法或库不存在的错误:

  • 确保在 Jupyter Notebook 中选择了正确的内核。 内核显示在笔记本页面的右上方。 默认值为 azure_automl。 内核作为笔记本的一部分进行保存。 如果切换到新的 conda 环境,则需要在笔记本中选择新内核。

    • 对于 Azure Notebooks,它应为 Python 3.6。
    • 对于本地 conda 环境,它应为在 automl_setup 中指定的 conda 环境名称。
  • 确保笔记本适用于正在使用的 SDK 版本,

    • 通过在 Jupyter Notebook 单元中执行 azureml.core.VERSION 来检查 SDK 版本。
    • 可以通过以下步骤从 GitHub 下载示例笔记本的早期版本:
      1. 选择 Branch 按钮
      2. 导航到“扩展”选项卡
      3. 选择版本

试验限制

如果自动化 ML 试验超过 100 次,这可能会导致新的自动化 ML 试验的运行时间较长。

VNet 防火墙设置下载失败

如果在虚拟网络 (VNet) 下,则在使用 AutoML NLP 时可能会遇到模型下载失败。 这是因为网络流量被阻止从 Azure CDN 下载模型和 tokenizer。 若要取消阻止,请在 VNet 防火墙策略的“应用程序规则”设置中允许列出以下 URL:

  • aka.ms
  • https://automlresources-prod.azureedge.net

请按照此处的说明配置防火墙设置。

此处提供了有关在 vnet 下配置工作区的说明。

后续步骤