对 Python 中的自动化 ML 试验进行故障排除
在本指南中,了解如何使用 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.1
和scikit-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.4
和sckit-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'
如果遇到
gcc: error trying to exec 'cc1plus': execvp: No such file or directory
错误,请为 Linux 分发版安装 GCC 构建工具。 例如,在 Ubuntu 上,使用命令sudo apt-get install build-essential
。将新名称作为第一个参数传递给 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
- 确保已启用出站端口 53 和 80。 在 Azure 虚拟机上,可选择 VM 并单击“网络”,从 Azure 门户执行此操作。
- 运行命令
sudo apt-get update
- 运行命令
sudo apt-get install build-essential --fix-missing
- 再次运行
automl_setup_linux.sh
configuration.ipynb 失败:
- 对于本地 conda,请首先确保
automl_setup
已成功运行。 - 确保 subscription_id 是正确的。 依次选择“所有服务”和“订阅”,在 Azure 门户中查找 subscription_id。 字符“<”和“>”不应包含在 subscription_id 值中。 例如,
subscription_id = "12345678-90ab-1234-5678-1234567890abcd"
的格式有效。 - 确保参与者或所有者有权访问订阅。
- 检查该区域是否为受支持的区域之一:
chinaeast2
、chinaeast2
、chinaeast2
、chinaeast2
、chinaeast2
、chinaeast2
、chinaeast2
、chinaeast2
。 - 确保使用 Azure 门户访问该区域。
- 对于本地 conda,请首先确保
workspace.from_config 失败:
如果调用
ws = Workspace.from_config()
失败:- 确保 configuration.ipynb 笔记本已成功运行。
- 如果正在从不在运行
configuration.ipynb
的文件夹下的文件夹中运行笔记本,则将文件夹 aml_config 及其包含的文件 config.json 复制到新文件夹中。 Workspace.from_config 读取笔记本文件夹或其父文件夹的 config.json。 - 如果正在使用新的订阅、资源组、工作区或区域,请确保再次运行
configuration.ipynb
笔记本。 仅当指定订阅下的指定资源组中已存在工作区时,直接更改 config.json 才会生效。 - 如果要更改区域,请更改工作区、资源组或订阅。 即使指定的区域不同,
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 的版本并卸载:
- 启动命令 shell,激活安装了自动化 ML 包的 conda 环境。
- 输入
pip freeze
并查找tensorflow
,如果找到,则列出的版本应低于 1.13 - 如果列出的版本不受支持,请在命令行界面中使用
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 的版本:
启动命令 shell,并激活安装了自动化 ML 包的 conda 环境。
输入
pip freeze
并查找PyJWT
,如果找到,则列出的版本应低于 2.0.0
如果列出的版本不是受支持的版本:
请考虑升级到 AutoML SDK 的最新版本:
pip install -U azureml-sdk[automl]
如果这不可行,请从环境中卸载 PyJWT,并安装正确的版本,如下所示:
- 在命令行界面中输入
pip uninstall PyJWT
,然后输入y
进行确认。 - 使用
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
。
以下步骤可解决此问题:
- 下载模型包
- 将包解压缩
- 使用解压缩资产进行部署
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 下载示例笔记本的早期版本:
- 选择
Branch
按钮 - 导航到“扩展”选项卡
- 选择版本
- 选择
- 通过在 Jupyter Notebook 单元中执行
试验限制
如果自动化 ML 试验超过 100 次,这可能会导致新的自动化 ML 试验的运行时间较长。
VNet 防火墙设置下载失败
如果在虚拟网络 (VNet) 下,则在使用 AutoML NLP 时可能会遇到模型下载失败。 这是因为网络流量被阻止从 Azure CDN 下载模型和 tokenizer。 若要取消阻止,请在 VNet 防火墙策略的“应用程序规则”设置中允许列出以下 URL:
aka.ms
https://automlresources-prod.azureedge.net
此处提供了有关在 vnet 下配置工作区的说明。
后续步骤
详细了解如何以及在何处部署模型。