在 Azure 机器学习中将训练脚本作为命令作业运行
笔记本非常适合用于试验和开发。 开发机器学习模型并针对生产环境做好准备后,需要使用脚本对其进行训练。 可以将脚本作为命令作业运行。
在本练习中,你将测试脚本,然后将其作为命令作业运行。
准备工作
需要一个你在其中具有管理级权限的 Azure 订阅。
预配 Azure 机器学习工作区
借助 Azure 机器学习工作区,可集中管理训练和管理模型所需的所有资源和资产。 可以通过工作室、Python SDK 和 Azure CLI 与 Azure 机器学习工作区进行交互。
你将使用 Azure CLI 预配工作区和必要的计算,并使用 Python SDK 运行命令作业。
创建工作区和计算资源
若要创建 Azure 机器学习工作区、计算实例计算群集,请使用 Azure CLI。 所有必需的命令都被分组到一个 Shell 脚本中,以便于执行。
- 在浏览器中,打开 Azure 门户 (
https://portal.azure.com/
),并登录 Microsoft 帐户。 - 选择页面顶部搜索框右侧的 [>_] (Cloud Shell) 按钮。 这会打开门户底部的 Cloud Shell 窗格。
- 如果系统询问,请选择“Bash”。 首次打开 Cloud Shell 时,系统可能会要求你选择要使用的 shell 类型(Bash 或 PowerShell) 。
- 如果系统要求你为 Cloud Shell 创建存储,请确认已指定正确的订阅,然后选择“创建存储”。 等待存储创建完成。
-
在终端,输入以下命令以克隆此存储库:
rm -r azure-ml-labs -f git clone https://github.com/MicrosoftLearning/mslearn-azure-ml.git azure-ml-labs
使用
SHIFT + INSERT
将复制的代码粘贴到 Cloud Shell 中。 -
克隆存储库后,输入以下命令以更改为此实验室的文件夹,然后运行其中包含的 setup.ps1 脚本:
cd azure-ml-labs/Labs/08 ./setup.sh
忽略表示扩展未安装的(错误)消息。
- 等待脚本完成 - 这通常需要大约 5-10 分钟。
克隆实验室材料
创建工作区和必要的计算资源后,可以打开 Azure 机器学习工作室并将实验室材料克隆到工作区中。
- 在 Azure 门户,导航到名为 mlw-dp100-… 的 Azure 机器学习工作区。
- 选择 Azure 机器学习工作区,并在其“概述”页中选择“启动工作室” 。 将在浏览器中打开另一标签页,以打开 Azure 机器学习工作室。
- 关闭工作室中显示的弹出窗口。
- 在 Azure 机器学习工作室中,导航到“计算”页,并验证在上一部分中创建的计算实例和群集是否存在。 计算实例应正在运行,群集应处于空闲状态,且运行中的节点数为 0。
- 在“计算实例”选项卡中,找到计算实例,然后选择“终端”应用程序 。
-
在终端中,通过在终端中运行以下命令,在计算实例上安装 Python SDK:
pip uninstall azure-ai-ml pip install azure-ai-ml
忽略任何指示无法找到包和卸载包的(错误)消息。
-
运行以下命令,将包含笔记本、数据和其他文件的 Git 存储库克隆到工作区:
git clone https://github.com/MicrosoftLearning/mslearn-azure-ml.git azure-ml-labs
- 命令完成后,在“文件”窗格中,单击 ↻ 来刷新视图,并验证是否已创建新的 /users/your-user-name/azure-ml-labs 文件夹 。
将笔记本转换为脚本
附加到计算实例的笔记本非常适合用于试验和开发,因为它支持立即运行已编写的代码并查看其输出。 若要从开发迁移到生产环境,需要使用脚本。 第一步,可以使用 Azure 机器学习工作室将笔记本转换为脚本。
-
打开“Labs/08/src/Train classification model.ipynb”笔记本。
选择“身份验证”,如果出现要求进行身份验证的通知,请执行必要的步骤。
- 验证笔记本是否使用 Python 3.8 - AzureML 内核。
- 运行所有单元格以浏览代码并训练模型。
- 选择笔记本顶部的 ☰ 图标以查看“笔记本菜单”。
- 展开“导出为”,然后选择“Python (.py)”以将笔记本转换为 Python 脚本 。
- 将新文件命名为
train-classification-model
。 - 创建新文件后,应自动打开脚本。 浏览该文件,并注意它包含与笔记本相同的代码。
- 选择笔记本顶部的 ▷▷ 图标,以在终端中保存并运行脚本。
- 脚本由命令 python train-classification-model.py 启动,并且输出应显示在命令下方。
使用终端测试脚本
将笔记本转换为脚本后,可能需要进一步优化它。 使用脚本时,最佳做法是使用函数。 当脚本包含函数时,对代码进行单元测试会更容易。 使用函数时,脚本将包含代码块,每个块执行特定任务。
-
打开 Labs/08/src/train-model-parameters.py 脚本并浏览其内容。 请注意,有一个 main 函数,其中包含四个其他函数:
- 读取数据
- 拆分数据
- 定型模型
- 评估模型
在 main 函数之后,定义每个函数。 请注意每个函数如何定义预期的输入和输出。
-
选择笔记本顶部的 ▷▷ 图标,以在终端中保存并运行脚本。 读取数据后,应收到一个错误,告知你它无法获取数据,因为文件路径无效。
使用脚本可以参数化代码,以便轻松更改输入数据或参数。 在这种情况下,脚本需要数据路径的输入参数,而我们没有提供。 可以在 parse_args() 函数的脚本末尾找到定义的和预期的参数。
定义了两个输入参数:
- –training_data,它需要字符串。
- –reg_rate,它需要数字,但默认值为 0.01。
若要成功运行脚本,需要指定训练数据参数的值。 让我们通过引用与训练脚本存储在同一文件夹中的 diabetes.csv 文件来执行此操作。
-
在终端中运行以下命令:
python train-model-parameters.py --training_data diabetes.csv
脚本应成功运行,因此输出应显示训练模型的准确性和 AUC。
在终端中测试脚本非常适合用于验证脚本是否按预期工作。 如果代码存在任何问题,终端中将收到错误。
(可选)编辑代码以强制出现错误,并在终端中再次运行命令以运行脚本。 例如,删除行“import pandas as pd”,保存并运行带有输入参数的脚本以查看错误消息。
将脚本作为命令作业运行
如果知道脚本正常工作,则可以将其作为命令作业运行。 通过将脚本作为命令作业运行,你将能够跟踪脚本的所有输入和输出。
- 打开 Labs/08/Run script as command job.ipynb 笔记本。
- 运行笔记本中的所有单元格。
- 在 Azure 机器学习工作室中,导航到“作业”页。
- 导航到 diabetes-train-script 作业,浏览所运行的命令作业的概述。
- 导航到“代码”选项卡。src 文件夹的所有内容(即命令作业的 code 参数的值)将复制到此处 。 可以查看命令作业执行的训练脚本。
- 导航到“输出 + 日志”选项卡。
- 打开 std_log.txt 文件并浏览其内容。 此文件的内容是命令的输出。 请记住,在终端中测试脚本时,终端中显示了相同的输出。 如果作业因脚本问题而失败,则会在此处显示错误消息。
(可选)编辑代码以强制出现错误,并使用笔记本再次启动命令作业。 例如,从脚本中删除行“import pandas as pd”并保存脚本。 或者,编辑命令作业配置,以在作业配置本身(而不是脚本)出现问题时浏览错误消息。
删除 Azure 资源
当你完成对 Azure 机器学习的探索时,应删除已创建的资源,以避免产生不必要的 Azure 成本。
- 关闭“Azure 机器学习工作室”选项卡并返回到 Azure 门户。
- 在 Azure 门户的主页上,选择“资源组”。
- 选择“rg-dp100-…”资源组。
- 在资源组的“概述”页的顶部,选择“删除资源组”。
- 输入资源组名称以确认要删除该资源组,然后选择“删除”。