解决重启或重新映像时的批处理节点创建延迟
本文讨论在重启或重置节点映像时如何解决批处理节点创建延迟问题。 避免安装大型 Python 运行时和 Python 包导致Microsoft Azure Batch 中出现的问题。 首次将批处理节点添加到批处理池或重启或重新映像节点时,此安装会导致长时间的延迟和可能的意外错误。
现象
创建批处理池并将节点添加到池,或者重启或重新映像节点时,应用程序安装需要很长时间才能完成,或者在安装时间过长后失败。
原因
出现此问题的原因是 Python 包太大,无法用作启动任务。
在 Azure Batch 中创建批处理池并添加批处理节点时,建议的过程是使用 启动任务 来准备操作环境。 此启动任务可以执行以下操作:
安装任务运行的应用程序。
首次将批处理节点添加到池或重启或重新映像节点时启动后台进程。
但是,对于需要 Python 运行的 Python 语言运行时和应用程序,包可能非常大,因此启动任务需要很长时间才能安装。 即使在大部分安装发生之后,安装也可能因为出现意外问题而失败。
解决方案
若要解决此问题,请先匹配虚拟机(VM)和批处理帐户位置和 OS 版本,并在捕获 Gen1 映像之前预安装 Python 及其包。
使用预打包的自定义映像来分配批处理节点。 有关此过程的一般信息,请参阅 使用托管映像创建自定义映像池。
若要防止长时间安装并帮助避免安装失败,请遵循以下常规做法:
指定创建批处理帐户并创建 VM 批处理节点时要使用的相同位置或区域。
选择名称中具有 Gen1 的映像,例如 Windows Server 2019 Datacenter - Gen1 (Windows 节点)或 Ubuntu Server 18.04 LTS - Gen1 (Linux 节点)。 第 1 代映像是必需的,因为某些 VM 系列不支持 Gen2 映像。
在Azure 门户中创建节点池时,请确保操作系统部分中的 Sku 列表包含指定的系统版本。
自定义 Python 安装,使其预安装在映像上,并适用于所有用户。
系统特定的过程
以下选项卡式部分介绍了必须对 Windows 批处理节点或 Linux 批处理节点执行的步骤。
Windows 节点:在 C 驱动器上安装所需的 Python 版本,并手动追加系统路径
流程摘要
创建并启动 VM 后,使用远程桌面协议(RDP)连接到 VM。 然后,在 VM 上安装所需的一切,包括所需的 Python 运行时版本(例如 Python 3.10.4),并编辑系统路径。 最后,捕获 VM 映像,将其部署到使用 VM 映像的批处理池,连接到新的批处理池节点,然后对其进行测试以确保预安装的 Python 运行时和包正常工作。
过程步骤
通过指定以下设置在Azure 门户中创建 Windows VM。
设置名 设置值 区域 分配给批处理帐户的同一区域 图像 名称中具有 Gen1 (而不是 Gen2)且由批处理服务支持的 Windows 映像 使用 RDP 连接到 VM。
运行 Python 安装向导,然后选择“ 自定义安装 ”选项。 然后,在 “高级选项” 页上,转到“ 自定义安装位置 ”框,并在 C 驱动器上指定路径。
编辑系统环境变量
Path
,使其包括 Python 安装路径(如 C:\Python\)和 Python 安装包的路径(如 C:\Python\Scripts\)。注意
Python 安装向导仅将这些路径添加到用户环境变量。
Path
因此,必须向相应的 系统 环境变量添加路径。 否则,捕获 VM 映像时,将从映像中删除用户安装的额外软件包 Python 设置和额外软件包。若要将这些路径追加到系统环境变量,请执行以下步骤:
选择“开始”,然后搜索并选择“设置”。
在“设置”应用中,选择“关于>高级系统设置的系统”。>
在 “系统属性 ”对话框中,选择“ 高级 ”选项卡,然后选择“ 环境变量”。
在 “环境变量 ”对话框中,转到 “系统变量 ”部分,选择 “路径 ”变量,然后选择“ 编辑”。
在“编辑环境变量”对话框中,选择“新建”,然后输入 Python 已安装包的路径。 然后,重复此步骤以输入 Python 运行时的路径。
选择“ 确定 ”三次,以在三个对话框中应用更改。
在控制台中测试 Python 安装。
例如,运行
python --version
以验证已安装的 Python 版本后,可以运行 Python 解释器以尝试导入尚未安装的包(例如numpy
)。 收到预期的ModuleNotFoundError
异常后,请运行pip install <package-name>
命令以安装包,然后再次运行 Python 解释器以导入该包。 导入命令现在应成功。按照门户中创建 VM 映像中的步骤捕获 VM 映像,但仅在“创建映像”页上应用以下设置。
设置名 设置值 资源组 从资源组列表中选择,或选择“新建”以创建资源组。 目标 Azure 计算库 从 Azure 计算库列表中选择,或选择“新建”以创建 Azure 计算库。 目标 VM 映像定义 选择新建。 在“ 创建 VM 映像定义 ”页中,仅 输入要提供给映像的 VM 映像定义名称 。 (页面将自动提供 发布者、 套餐和 SKU 设置。 版本号 输入要提供给 VM 映像的版本号。 应用 VM 映像设置后,选择“查看 + 创建”以验证设置,然后选择“创建”以创建映像。 此步骤创建以下三种资源类型:
- Azure Compute Gallery
- 自定义映像定义
- 自定义映像定义版本
创建三个资源后,请按照以下步骤创建新的使用 VM 映像的批处理池:
在Azure 门户中,搜索并选择 Batch 帐户。
在批处理帐户列表中,选择你的帐户。
在批处理帐户的菜单窗格中,选择“ 池”,然后选择“ 添加 ”以创建批处理池。
在 “添加池 ”页中,进行以下设置,然后选择“ 确定”。
设置名 设置值 池 ID 池的新名称 映像类型 自定义映像 - 共享映像库 * 共享映像库 创建 VM 映像时指定的目标 Azure 计算库的名称 图像 创建 VM 映像时指定的 VM 映像定义名称 版本 创建 VM 映像时指定的版本号 操作系统 Windows OS 分发 windowsserver OS SKU 所选操作系统版本的代码示例(例如 ,microsoftwindowsserver-2019-datacenter) * 共享映像库是 Azure 计算库的另一个名称。 这是在创建 VM 映像期间创建的资源之一。
分配批处理池节点后,转到批处理池节点页,然后在标题菜单中选择“ 连接 ”。
在 “连接 ”窗格中,选择“ 生成用户 ”选项,选择“ 生成随机用户 ”按钮,然后选择“ 下载 RDP 文件”。
运行下载的 RDP 文件以连接到新的批处理节点。
再次测试 Python 安装,以确保预安装的版本正常工作。
参考
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。