解决重启或重置映像时的批处理节点创建延迟问题

本文讨论重启或重置节点映像时如何解决批处理节点创建延迟问题。 避免 Microsoft Azure Batch中因安装大型 Python 运行时和 Python 包而导致的问题。 首次将批处理节点添加到批处理池或重启或重置映像时,此安装会导致长时间延迟和可能的意外错误。

症状

创建批处理池并将节点添加到池,或者重启或重置节点映像时,应用程序安装需要很长时间才能完成,或者在安装时间过长后失败。

原因

出现此问题的原因是 Python 包太大,无法用作启动任务。

在 Azure Batch 中创建批处理池并添加批处理节点时,建议的过程是使用启动任务来准备操作环境。 此启动任务可以执行以下操作:

  • 安装任务运行的应用程序。

  • 首次将批处理节点添加到池时,或者重启或重置映像时启动后台进程。

但是,对于需要 Python 运行的 Python 语言运行时和应用程序,包可能太大,因此安装启动任务需要很长时间。 即使大部分安装都已发生,安装仍可能由于意外问题而失败。

解决方案

若要解决此问题,请匹配虚拟机 (VM) 和批处理帐户位置和 OS 版本,并在捕获 Gen1 映像之前预安装 Python 及其包。

使用预打包的自定义映像来分配批处理节点。 有关此过程的一般信息,请参阅 使用托管映像创建自定义映像池

若要防止安装时间过长并帮助避免安装失败,请遵循以下常规做法:

  • 指定创建批处理帐户和创建 VM 批处理节点时要使用的相同位置或区域。

  • 选择名称中具有 Gen1 的映像,例如 Windows Server 2019 Datacenter - Gen1 (Windows 节点) 或 Ubuntu Server 18.04 LTS - Gen1 (Linux 节点) 。 Gen1 映像是必需的,因为某些 VM 系列不支持 Gen2 映像。

  • 在 Azure 门户 中创建节点池时,请确保“操作系统”部分中的 SKU 列表包含指定的系统版本。

  • 自定义 Python 安装,使其预安装在映像上并适用于所有用户。

特定于系统的过程

以下选项卡式部分介绍了 Windows 批处理节点或 Linux 批处理节点必须执行的步骤。

Windows 节点:在 C 驱动器上安装所需版本的 Python,并手动追加系统路径

过程摘要

创建并启动 VM 后,使用远程桌面协议 (RDP) 连接到 VM。 然后,在 VM 上安装所需的所有内容,包括所需的 Python 运行时版本 (例如 Python 3.10.4) ,并编辑系统路径。 最后,捕获 VM 映像,将其部署到使用 VM 映像的批处理池,连接到新的批处理池节点,然后对其进行测试,以确保预安装的 Python 运行时和包正常工作。

过程步骤

  1. 通过指定以下设置,在 Azure 门户中创建 Windows VM

    设置名称 设置值
    Region 分配给批处理帐户的同一区域
    图像 名称中具有 Gen1 (而不是 Gen2) 且受批处理服务支持的 Windows 映像
  2. 使用 RDP 连接到 VM

  3. 运行 Python 安装向导,然后选择“ 自定义安装 ”选项。 然后,在 “高级选项” 页上,转到 “自定义安装位置 ”框,并在 C 驱动器上指定路径。

  4. 编辑 的系统Path环境变量,使其包括 Python 安装路径 ((如 C:\Python\) )和 Python 已安装包的路径 (,例如 C:\Python\Scripts\) 。

    注意

    Python 安装向导仅将这些路径添加到 的用户Path环境变量。 因此,必须向相应的 系统 环境变量添加路径。 否则,捕获 VM 映像时,将从映像中删除 Python 设置和用户安装的额外软件包。

    若要将这些路径追加到系统环境变量,请执行以下步骤:

    1. 选择“ 开始”,然后搜索并选择 “设置”。

    2. “设置” 应用中,选择“ 系统>关于>高级系统设置”。

    3. 在“ 系统属性 ”对话框中,选择“ 高级 ”选项卡,然后选择“ 环境变量”。

    4. 在“ 环境变量 ”对话框中,转到“ 系统变量 ”部分,选择 “路径 ”变量,然后选择“ 编辑”。

    5. “编辑环境变量 ”对话框中,选择“ 新建”,然后输入 Python 已安装包的路径。 然后,重复此步骤以输入 Python 运行时的路径。

    6. 选择 “确定” 三次,在三个对话框中应用更改。

  5. 在控制台中测试 Python 安装。

    例如,运行 python --version 验证已安装的 Python 版本后,可以运行 Python 解释器来尝试导入尚未安装 (的包,例如 numpy) 。 收到预期的 ModuleNotFoundError 异常后,请运行 pip install <package-name> 命令以安装包,然后再次运行 Python 解释器以导入该包。 导入命令现在应该会成功。

  6. 按照在 门户中创建 VM 映像中的步骤捕获 VM 映像,但仅应用“ 创建映像 ”页上的以下设置。

    设置名称 设置值
    资源组 从资源组列表中选择,或选择“ 新建 ”以创建资源组。
    目标 Azure 计算库 从 Azure 计算库列表中选择,或选择“ 新建 ”以创建 Azure 计算库。
    目标 VM 映像定义 选择“ 新建”。 在 “创建 VM 映像定义 ”页中,仅输入要提供给映像的 VM 映像定义名称 。 (页面将自动提供 发布服务器套餐SKU 设置。)
    版本号 输入要提供给 VM 映像的版本号。
  7. 应用 VM 映像设置后,选择“ 查看 + 创建 ”以验证设置,然后选择“ 创建 ”以创建映像。 此步骤创建以下三种资源类型:

    • Azure Compute Gallery
    • 自定义映像定义
    • 自定义映像定义版本
  8. 创建这三个资源后,请按照以下步骤创建使用 VM 映像的新批处理池:

    1. Azure 门户中,搜索并选择“Batch 帐户”。

    2. 在批处理帐户列表中,选择你的帐户。

    3. 在批处理帐户的菜单窗格中,选择“ ”,然后选择“ 添加 ”以创建批处理池。

    4. “添加池 ”页中,进行以下设置,然后选择“ 确定”。

      设置名称 设置值
      池 ID 池的新名称
      图像类型 自定义映像 - 共享映像库 *
      共享映像库 创建 VM 映像时指定的目标 Azure 计算库的名称
      图像 创建 VM 映像时指定的 VM 映像定义名称
      版本 创建 VM 映像时指定的版本号
      操作系统 Windows
      OS 分发 windowsserver
      OS SKU 所选操作系统版本的产品代码 (例如 microsoftwindowsserver-2019-datacenter)

      * 共享映像库是 Azure Compute Gallery 的另一个名称。 这是在 VM 映像创建期间创建的资源之一。

  9. 分配批处理池节点后,转到批处理池节点页,然后在标题菜单中选择“ 连接 ”。

  10. 在“ 连接 ”窗格中,选择“ 生成用户 ”选项,选择“ 生成随机用户 ”按钮,然后选择“ 下载 RDP 文件”。

  11. 运行下载的 RDP 文件以连接到新的批处理节点。

  12. 再次测试 Python 安装,确保预安装版本正常工作。

References

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。