在 Azure 机器学习中将训练脚本作为命令作业运行

笔记本非常适合用于试验和开发。 开发机器学习模型并针对生产环境做好准备后,需要使用脚本对其进行训练。 可以将脚本作为命令作业运行。

在本练习中,你将测试脚本,然后将其作为命令作业运行。

准备工作

需要一个你在其中具有管理级权限的 Azure 订阅

预配 Azure 机器学习工作区

借助 Azure 机器学习工作区,可集中管理训练和管理模型所需的所有资源和资产。 可以通过工作室、Python SDK 和 Azure CLI 与 Azure 机器学习工作区进行交互。

你将使用 Azure CLI 预配工作区和必要的计算,并使用 Python SDK 运行命令作业。

创建工作区和计算资源

若要创建 Azure 机器学习工作区、计算实例计算群集,请使用 Azure CLI。 所有必需的命令都被分组到一个 Shell 脚本中,以便于执行。

  1. 在浏览器中,打开 Azure 门户 (https://portal.azure.com/),并登录 Microsoft 帐户。
  2. 选择页面顶部搜索框右侧的 [>_] (Cloud Shell) 按钮。 这会打开门户底部的 Cloud Shell 窗格。
  3. 如果系统询问,请选择“Bash”。 首次打开 Cloud Shell 时,系统可能会要求你选择要使用的 shell 类型(Bash 或 PowerShell) 。
  4. 如果系统要求你为 Cloud Shell 创建存储,请确认已指定正确的订阅,然后选择“创建存储”。 等待存储创建完成。
  5. 在终端,输入以下命令以克隆此存储库:

     rm -r azure-ml-labs -f
     git clone https://github.com/MicrosoftLearning/mslearn-azure-ml.git azure-ml-labs
    

    使用 SHIFT + INSERT 将复制的代码粘贴到 Cloud Shell 中。

  6. 克隆存储库后,输入以下命令以更改为此实验室的文件夹,然后运行其中包含的 setup.ps1 脚本:

     cd azure-ml-labs/Labs/08
     ./setup.sh
    

    忽略表示扩展未安装的(错误)消息。

  7. 等待脚本完成 - 这通常需要大约 5-10 分钟。

克隆实验室材料

创建工作区和必要的计算资源后,可以打开 Azure 机器学习工作室并将实验室材料克隆到工作区中。

  1. 在 Azure 门户,导航到名为 mlw-dp100-… 的 Azure 机器学习工作区。
  2. 选择 Azure 机器学习工作区,并在其“概述”页中选择“启动工作室” 。 将在浏览器中打开另一标签页,以打开 Azure 机器学习工作室。
  3. 关闭工作室中显示的弹出窗口。
  4. 在 Azure 机器学习工作室中,导航到“计算”页,并验证在上一部分中创建的计算实例和群集是否存在。 计算实例应正在运行,群集应处于空闲状态,且运行中的节点数为 0。
  5. 在“计算实例”选项卡中,找到计算实例,然后选择“终端”应用程序 。
  6. 在终端中,通过在终端中运行以下命令,在计算实例上安装 Python SDK:

     pip uninstall azure-ai-ml
     pip install azure-ai-ml
    

    忽略任何指示无法找到包和卸载包的(错误)消息。

  7. 运行以下命令,将包含笔记本、数据和其他文件的 Git 存储库克隆到工作区:

     git clone https://github.com/MicrosoftLearning/mslearn-azure-ml.git azure-ml-labs
    
  8. 命令完成后,在“文件”窗格中,单击 ↻ 来刷新视图,并验证是否已创建新的 /users/your-user-name/azure-ml-labs 文件夹 。

将笔记本转换为脚本

附加到计算实例的笔记本非常适合用于试验和开发,因为它支持立即运行已编写的代码并查看其输出。 若要从开发迁移到生产环境,需要使用脚本。 第一步,可以使用 Azure 机器学习工作室将笔记本转换为脚本。

  1. 打开“Labs/08/src/Train classification model.ipynb”笔记本。

    选择“身份验证”,如果出现要求进行身份验证的通知,请执行必要的步骤。

  2. 验证笔记本是否使用 Python 3.8 - AzureML 内核。
  3. 运行所有单元格以浏览代码并训练模型。
  4. 选择笔记本顶部的 ☰ 图标以查看“笔记本菜单”。
  5. 展开“导出为”,然后选择“Python (.py)”以将笔记本转换为 Python 脚本 。
  6. 将新文件命名为 train-classification-model
  7. 创建新文件后,应自动打开脚本。 浏览该文件,并注意它包含与笔记本相同的代码。
  8. 选择笔记本顶部的 ▷▷ 图标,以在终端中保存并运行脚本。
  9. 脚本由命令 python train-classification-model.py 启动,并且输出应显示在命令下方。

使用终端测试脚本

将笔记本转换为脚本后,可能需要进一步优化它。 使用脚本时,最佳做法是使用函数。 当脚本包含函数时,对代码进行单元测试会更容易。 使用函数时,脚本将包含代码块,每个块执行特定任务。

  1. 打开 Labs/08/src/train-model-parameters.py 脚本并浏览其内容。 请注意,有一个 main 函数,其中包含四个其他函数:

    • 读取数据
    • 拆分数据
    • 定型模型
    • 评估模型

    在 main 函数之后,定义每个函数。 请注意每个函数如何定义预期的输入和输出。

  2. 选择笔记本顶部的 ▷▷ 图标,以在终端中保存并运行脚本。 读取数据后,应收到一个错误,告知你它无法获取数据,因为文件路径无效。

    使用脚本可以参数化代码,以便轻松更改输入数据或参数。 在这种情况下,脚本需要数据路径的输入参数,而我们没有提供。 可以在 parse_args() 函数的脚本末尾找到定义的和预期的参数。

    定义了两个输入参数:

    • –training_data,它需要字符串。
    • –reg_rate,它需要数字,但默认值为 0.01。

    若要成功运行脚本,需要指定训练数据参数的值。 让我们通过引用与训练脚本存储在同一文件夹中的 diabetes.csv 文件来执行此操作。

  3. 在终端中运行以下命令:

     python train-model-parameters.py --training_data diabetes.csv
    

脚本应成功运行,因此输出应显示训练模型的准确性和 AUC。

在终端中测试脚本非常适合用于验证脚本是否按预期工作。 如果代码存在任何问题,终端中将收到错误。

(可选)编辑代码以强制出现错误,并在终端中再次运行命令以运行脚本。 例如,删除行“import pandas as pd”,保存并运行带有输入参数的脚本以查看错误消息。

将脚本作为命令作业运行

如果知道脚本正常工作,则可以将其作为命令作业运行。 通过将脚本作为命令作业运行,你将能够跟踪脚本的所有输入和输出。

  1. 打开 Labs/08/Run script as command job.ipynb 笔记本。
  2. 运行笔记本中的所有单元格。
  3. 在 Azure 机器学习工作室中,导航到“作业”页。
  4. 导航到 diabetes-train-script 作业,浏览所运行的命令作业的概述。
  5. 导航到“代码”选项卡。src 文件夹的所有内容(即命令作业的 code 参数的值)将复制到此处 。 可以查看命令作业执行的训练脚本。
  6. 导航到“输出 + 日志”选项卡。
  7. 打开 std_log.txt 文件并浏览其内容。 此文件的内容是命令的输出。 请记住,在终端中测试脚本时,终端中显示了相同的输出。 如果作业因脚本问题而失败,则会在此处显示错误消息。

(可选)编辑代码以强制出现错误,并使用笔记本再次启动命令作业。 例如,从脚本中删除行“import pandas as pd”并保存脚本。 或者,编辑命令作业配置,以在作业配置本身(而不是脚本)出现问题时浏览错误消息。

删除 Azure 资源

当你完成对 Azure 机器学习的探索时,应删除已创建的资源,以避免产生不必要的 Azure 成本。

  1. 关闭“Azure 机器学习工作室”选项卡并返回到 Azure 门户。
  2. 在 Azure 门户的主页上,选择“资源组”。
  3. 选择“rg-dp100-…”资源组。
  4. 在资源组的“概述”页的顶部,选择“删除资源组”。
  5. 输入资源组名称以确认要删除该资源组,然后选择“删除”。