调试作业和监视训练进度

机器学习模型训练是一个迭代过程,需要大量的试验。 通过使用Azure 机器学习交互式作业体验,数据科学家可以使用Azure 机器学习 Python SDK、Azure 机器学习 CLI 或 Azure Studio 访问其作业正在运行的容器。 用户访问作业容器后,可以循环访问训练脚本、监视训练进度和远程调试作业,就像他们通常在本地计算机上所做的那样。 可以通过不同的训练应用程序(包括 JupyterLab、TensorBoard、VS Code)或直接通过 SSH 连接到作业容器来与作业进行交互。

Azure 机器学习支持在Azure 机器学习计算群集已启用Azure Arc的 Kubernetes 群集上进行交互式训练。

先决条件

  • 请查看Azure 机器学习中的训练入门
  • 有关详细信息,请参阅 VS Code 以设置Azure 机器学习扩展。
  • 确保作业环境已安装 openssh-serveripykernel ~=6.0 安装包。 默认情况下,所有Azure 机器学习特选训练环境都安装了这些包。
  • 对于分发类型不是 PyTorch、TensorFlow 或 MPI 的分布式训练任务,不能启用交互式应用程序。 目前不支持自定义分布式训练设置(在不使用上述分发框架的情况下配置多节点训练)。
  • 若要使用 SSH,需要 SSH 密钥对。 ssh-keygen -f "<filepath>"使用命令生成公钥和私钥对。

与作业容器交互

通过在创建作业时指定交互式应用程序,可以直接连接到运行作业的计算节点上的容器。 有权访问作业容器后,可以在运行作业的完全相同的环境中测试或调试作业。 还可以使用 VS Code 附加到正在运行的进程并进行调试,就像在本地一样。

在作业提交期间启用

  1. 在工作室门户中的左窗格中创建新作业。

  2. 选择 “计算群集 ”或“ 附加计算 ”(Kubernetes)作为计算类型。 选择计算目标,并指定所需的 Instance count节点数。

为作业选择计算位置的屏幕截图。

  1. 按照向导提示,选择要在其中启动作业的环境。

  2. 在“训练脚本”步骤中,添加训练代码(和输入/输出数据),并在命令中引用它以确保它装载到作业中。

查看草稿作业并完成创建操作的屏幕截图。

若要指定要保留计算资源的时间量,请在命令末尾添加 sleep <specific time> 。 格式如下:

  • sleep 1s
  • sleep 1m
  • sleep 1h
  • sleep 1d

您还可以使用 sleep infinity 命令,使作业无限期地保持运行状态。

注意

如果使用 sleep infinity,则必须手动 取消作业 以释放计算资源并停止计费。

  1. 在“计算”设置中,展开“训练应用程序”选项。 至少选择一个要用来与作业交互的训练应用程序。 如果未选择应用程序,则调试功能不可用。

为用户选择用于某项作业的培训应用程序的屏幕截图。

  1. 查看并创建作业。

连接到端点

若要与正在运行的作业交互,请在作业详细信息页上选择 “调试”和“监视 ”。

交互式作业“调试和监控”面板位置的屏幕截图。

在面板中选择应用程序时,将为应用程序打开一个新选项卡。 仅当应用程序处于 “正在运行” 状态并且只有 作业所有者 有权访问应用程序时,才能访问应用程序。 如果要在多个节点上训练,则可以选择要与之交互的特定节点。

交互式作业右侧面板信息的屏幕截图。信息内容因用户数据而异。

启动该作业以及在创建作业时指定的训练应用程序可能需要几分钟时间。

与应用程序交互

当你选择用于与作业交互的端点时,系统会将你带到工作目录下的用户容器。 可以访问代码、输入、输出和日志。 如果在连接到应用程序时遇到任何问题,可以在“>”选项卡下的system_logs interactive_capability中找到交互式功能和应用程序日志。

有关交互式作业的屏幕截图:交互式日志面板位置。

  • 可以从 Jupyter Lab 打开终端并开始在作业容器中交互。 您还可以使用 Jupyter Lab 直接对训练脚本进行迭代。

    有关交互式作业的屏幕截图:Jupyter Lab 内容面板。

  • 还可以在 VS Code 中与作业容器交互。 若要在作业提交期间将调试程序附加到作业并暂停执行,请在此处导航

    注意

    使用 VS Code 与作业容器交互时,目前不支持已启用专用链接的工作区。

    有关交互式作业的屏幕截图:首次打开时的 VS Code 面板。其中显示了为打印两行而创建的示例 python 文件。

  • 如果记录作业的 TensorFlow 事件,则可以使用 TensorBoard 监视作业运行时的指标。

    首次打开时的交互式作业 TensorBoard 面板屏幕截图。此信息因客户数据而异

结束作业

完成交互式培训后,可以转到作业详细信息页来取消作业。 取消作业会释放计算资源。 或者,在 CLI 中使用 az ml job cancel -n <your job name> 或在 SDK 中使用 ml_client.jobs.begin_cancel("<job name>")

交互式作业的“取消作业”选项及其位置的屏幕截图,供用户选择

将调试器附加到作业

若要提交附加了调试器的作业并暂停执行,请使用 debugpy 和 VS Code。 必须在作业环境中安装 debugpy

注意

在 VS Code 中将调试器附加到作业时,目前不支持启用了专用链接的工作区。

  1. 在作业提交(通过 UI、CLI 或 SDK)期间,使用 debugpy 命令运行Python脚本。 例如,以下屏幕截图显示了一个示例命令,该命令使用 debugpy 附加 TensorFlow 脚本的调试器(tfevents.py 可以替换为训练脚本的名称)。

debugpy 交互式作业配置的屏幕截图

  1. 提交作业后, 连接到 VS Code 并选择内置调试器。

    左侧面板中打开调试器时交互式作业位置的屏幕截图

  2. 使用 远程附加 调试配置附加到已提交的作业,并传入您在作业提交命令中配置的路径和端口。 也可以在作业详细信息页上找到此信息。

    有关交互式作业的屏幕截图:已完成的作业

    交互式作业的屏幕截图:添加“远程附加”按钮

  3. 设置断点,并像在本地调试流程中一样逐步检查作业执行过程。

    Visual Studio Code 编辑器中设置的示例断点位置的屏幕截图

注意

如果使用 debugpy 启动作业,则除非在 VS Code 中附加调试器并执行脚本,否则作业 不会 执行。 如果未附加调试器,则计算资源会一直保留,直到作业被取消

后续步骤