使用虚拟网络保护 Azure 机器学习训练环境

本文介绍如何在 Azure 机器学习中使用虚拟网络保护训练环境。

提示

本文是有关保护 Azure 机器学习工作流的系列文章的一部分。 请参阅本系列中的其他文章:

有关创建安全工作区、计算群集和计算实例的教程,请参阅教程:创建安全工作区

本文介绍如何在虚拟网络中保护以下训练计算资源:

  • Azure 机器学习计算群集
  • Azure 机器学习计算实例
  • Azure Databricks
  • 虚拟机
  • HDInsight 群集

先决条件

  • 用于计算资源的现有虚拟网络和子网。

  • 若要将资源部署到虚拟网络或子网中,你的用户帐户必须在 Azure 基于角色的访问控制 (Azure RBAC) 中具有以下操作的权限:

    • “Microsoft.Network/virtualNetworks/*/read”(在虚拟网络资源上)。 这对于 ARM 模板部署来说是不需要的
    • “Microsoft.Network/virtualNetworks/subnet/join/action”(在子网资源上)。

    若要详细了解如何将 Azure RBAC 与网络配合使用,请参阅网络内置角色

Azure 机器学习计算群集/实例

  • 该虚拟网络必须与 Azure 机器学习工作区位于同一订阅。

  • 用于计算实例或群集的子网必须有足够多的未分配 IP 地址。

    • 计算群集可以动态缩放。 如果没有足够的未分配 IP 地址,则只分配该群集的一部分资源。
    • 一个计算实例只需要一个 IP 地址。
  • 确保没有限制虚拟网络管理权限的安全策略或锁定。 检查策略或锁定时,请查看虚拟网络的订阅和资源组。

  • 检查对虚拟网络的订阅或资源组实施的安全策略或锁定是否限制了管理虚拟网络所需的权限。

  • 如果计划通过限制流量来保护虚拟网络,请参阅所需的公共 Internet 访问权限部分。

  • 用于部署计算群集/实例的子网不应委托给任何其他服务。 例如,不应将其委托给 ACI。

Azure Databricks

  • 该虚拟网络必须与 Azure 机器学习工作区位于同一订阅和区域。
  • 如果工作区的 Azure 存储帐户也在虚拟网络中受保护,则它们必须与 Azure Databricks 群集位于同一虚拟网络中。

限制

Azure 机器学习计算群集/实例

  • 若将多个计算实例或群集放入一个虚拟网络,可能需要请求提高一个或多个资源的配额。 机器学习计算实例或群集自动在包含虚拟网络的资源组中分配更多网络资源。 对于每个计算实例或群集,此服务分配以下资源:

    • 一个网络安全组 (NSG)。 此 NSG 包含以下特定于计算群集和计算实例的规则:

      • 允许 BatchNodeManagement 服务标记中端口 29876-29877 上的入站 TCP 流量。
      • 允许 AzureMachineLearning 服务标记中端口 44224 上的入站 TCP 流量。

      下面的屏幕截图展示了这些规则的示例:

      NSG 的屏幕截图

    • 一个公共 IP 地址。 如果你的 Azure 策略禁止创建公共 IP,则群集/实例的部署将失败

    • 一个负载均衡器

    对于计算群集,每当群集纵向缩减到 0 个节点时,将删除这些资源,而当群集横向扩展时,将创建这些资源。

    对于计算实例,这些资源将一直保留,直到该实例被删除。 停止实例不会删除资源。

    重要

    这些资源受订阅的资源配额限制。 如果虚拟网络资源组被锁定,则删除计算群集/实例将失败。 在删除计算群集/实例之前,无法删除负载均衡器。 另外,请确保不存在禁止创建网络安全组的 Azure 策略。

  • 如果工作区的 Azure 存储帐户也位于虚拟网络,请遵循以下关于子网限制的指南:

    • 如果计划使用 Azure 机器学习工作室来可视化数据或使用设计器,则存储帐户必须位于计算实例或群集所在子网 。
    • 如果计划使用 SDK,存储帐户可以位于其他子网。

    备注

    选择“允许信任的 Microsoft 服务访问此帐户”复选框不足以允许来自计算的通信。

  • 当工作区使用专用终结点时,只能从虚拟网络内部访问计算实例。 如果使用自定义 DNS 或主机文件,请为 <instance-name>.<region>.instances.azureml.ms 添加条目。 将此条目映射到工作区专用终结点的专用 IP 地址。 有关详细信息,请参阅 自定义 DNS 一文。

  • 虚拟网络服务终结点策略不适用于计算群集/实例系统存储帐户。

  • 如果存储和计算实例位于不同的区域,你可能会看到间歇性超时。

  • 如果要在计算实例上使用 Jupyter Notebooks:

    • 请勿禁用 websocket 通信。 确保网络允许与 *.instances.azureml.net*.instances.azureml.ms 进行 websocket 通信。
    • 确保笔记本在与数据相同的虚拟网络和子网后的计算资源上运行。 创建计算实例时,使用“高级设置” > “配置虚拟网络”,选择网络和子网 。
  • 可以在你的工作区所在区域以外的区域中创建计算群集。 此功能处于预览版阶段,只可用于计算群集,不可用于计算实例 。 为群集使用不同的区域时,有以下限制:

    • 如果工作区关联的资源(例如存储)与群集位于不同的虚拟网络中,请在网络之间设置全局虚拟网络对等互连。 有关详细信息,请参阅虚拟网络对等互连
    • 如果使用已启用专用终结点的工作区,则不支持在不同的区域中创建群集。
    • 你可能会看到网络延迟和数据传输成本增加。 在创建群集和在该群集上运行作业时,可能会产生延迟和成本。

    当使用不同于工作区的区域时,诸如使用 NSG 规则、用户定义的路由和输入/输出要求等指南可以正常应用。

Azure Databricks

  • 除了 Azure Databricks 使用的 databricks-privatedatabricks-public 子网以外,还需要为虚拟网络创建 default 子网。
  • Azure Databricks 不使用专用终结点与虚拟网络进行通信。

有关在虚拟网络中使用 Azure Databricks 的详细信息,请参阅在 Azure 虚拟网络中部署 Azure Databricks

Azure HDInsight 或虚拟机

  • Azure 机器学习只支持运行 Ubuntu 的虚拟机。

所需的公共 Internet 访问权限

Azure 机器学习需要对公共 Internet 进行入站和出站访问。 下表概述了需要的访问权限及其用途。 所有项的协议都是 TCP 。 对于以 .region 结尾的服务标记,请将 region 替换为包含你的工作区的 Azure 区域。 例如,Storage.westus

方向 端口 服务标记 目的
入站 29876-29877 BatchNodeManagement Azure 机器学习计算实例和计算群集。
入站 44224 AzureMachineLearning Azure 机器学习计算实例。
出站 * AzureActiveDirectory Azure Active Directory 身份验证。
出站 443 AzureMachineLearning Azure 机器学习。
出站 443 AzureResourceManager Azure 资源管理器。
出站 443 Storage.region Azure 存储帐户。
出站 443 AzureFrontDoor.FrontEnd
* Azure 中国区域中不需要。
Azure Front Door。
出站 443 ContainerRegistry.region Azure 容器注册表。 仅在使用自定义 Docker 映像时需要。 包括对 Microsoft 提供的基本映像的少量修改(例如额外的包)。
出站 443 MicrosoftContainerRegistry.region 仅当使用 Microsoft 提供的 Docker 映像并启用用户管理的依赖项时才需要。

提示

如果需要 IP 地址而不是服务标记,请使用下列选项之一:

IP 地址可能会定期改变。

可能还需要允许流向 Visual Studio Code 和非 Microsoft 站点的出站流量,以安装机器学习项目所需的包。 下表列出了用于机器学习的常用存储库:

主机名 目的
anaconda.com
*.anaconda.com
用于安装默认包。
*.anaconda.org 用于获取存储库数据。
pypi.org 用于列出默认索引的依赖项(如果有),索引不会被用户设置覆盖。 如果索引被覆盖,则还必须允许“*.pythonhosted.org”。
cloud.r-project.org 在安装用于 R 开发的 CRAN 包时使用。
*pytorch.org 由基于 PyTorch 的一些示例使用。
*.tensorflow.org 由基于 Tensorflow 的一些示例使用。
update.code.visualstudio.com

*.vo.msecnd.net
用于检索通过安装脚本安装在计算实例上的 VS Code 服务器位。
raw.githubusercontent.com/microsoft/vscode-tools-for-ai/master/azureml_remote_websocket_server/* 用于检索安装在计算实例上的 websocket 服务器位。 websocket 服务器用于将来自 Visual Studio Code 客户端(桌面应用程序)的请求传输到计算实例上运行的 Visual Studio Code 服务器。

有关使用防火墙解决方案的信息,请参阅将防火墙和 Azure 机器学习结合使用

计算群集和实例

使用以下选项卡选择如何计划创建计算群集:

使用以下步骤在 Azure 机器学习工作室中创建计算群集:

  1. 登录 Azure 机器学习工作室,然后选择你的订阅和工作区。

  2. 在左侧选择“计算”,从中心选择“计算群集”,然后选择“+ 新建”。

    创建群集的屏幕截图

  3. 在“创建计算群集”对话中,选择所需的 VM 大小和配置,然后选择“下一步”。

    设置 VM 配置的屏幕截图

  4. 在“配置设置”部分中,设置“计算名称”、“虚拟网络”和“子网”。

    提示

    如果工作区使用专用终结点连接到虚拟网络,则“虚拟网络”选择字段将显示为灰色。

    虚拟网络设置的屏幕快照

  5. 选择“创建”以创建计算群集。

创建过程完成后,请在试验中使用该群集训练模型。 有关详细信息,请参阅选择并使用用于训练的计算目标

入站流量

使用 Azure 机器学习计算实例或计算群集时,允许来自 Azure Batch 管理和 Azure 机器学习服务的入站流量 。 为此流量创建用户定义的路由时,可以使用 IP 地址或服务标记来路由流量 。

重要

结合使用服务标记与用户定义的路由目前处于预览阶段,可能不完全受支持。 有关详细信息,请参阅虚拟网络路由

对于 Azure 机器学习服务,必须添加主要和次要区域的 IP 地址 。 若要查找次要区域,请参阅使用 Azure 配对区域确保业务连续性和灾难恢复。 例如,如果 Azure 机器学习服务位于“中国东部 2”,则次要区域是“中国北部”。

若要获取 Batch 服务和 Azure 机器学习服务的 IP 地址列表,请使用以下方法之一:

  • 下载 Azure IP 范围和服务标记,并在文件中搜索 BatchNodeManagement.<region>AzureMachineLearning.<region>(其中 <region> 是你的 Azure 区域)。

  • 使用 Azure CLI 下载信息。 下面的示例下载 IP 地址信息,并筛选出“中国东部 2”区域(主要)和“中国北部”区域(次要)的信息:

    az network list-service-tags -l "China East 2" --query "values[?starts_with(id, 'Batch')] | [?properties.region=='chinaeast2']"
    # Get primary region IPs
    az network list-service-tags -l "China East 2" --query "values[?starts_with(id, 'AzureMachineLearning')] | [?properties.region=='chinaeast2']"
    # Get secondary region IPs
    az network list-service-tags -l "China North" --query "values[?starts_with(id, 'AzureMachineLearning')] | [?properties.region=='chinanorth']"
    

    提示

    如果使用的是“中国东部 2”区域,则这些命令不会返回 IP 地址。 而如果使用以下链接之一下载 IP 地址列表:

重要

IP 地址可能会随时间推移而改变。

创建 UDR 时,将“下一个跃点类型”设置为 Internet 。 下图显示了 Azure 门户中基于 IP 地址的 UDR 示例:

该图显示了用户定义的路由配置

有关配置 UDR 的信息,请参阅使用路由表路由网络流量

有关 Azure 机器学习的输入和输出流量要求的详细信息,请参阅使用防火墙保护的工作区

Azure Databricks

若要详细了解如何结合使用 Azure Databricks 和虚拟网络,请参阅在 Azure 虚拟网络中部署 Azure Databricks

虚拟机或 HDInsight 群集

本部分介绍如何将虚拟网络中的虚拟机或 Azure HDInsight 群集用于工作区。

创建 VM 或 HDInsight 群集

使用 Azure 门户或 Azure CLI 创建 VM 或 HDInsight 群集,然后将群集置于 Azure 虚拟网络中。 有关详细信息,请参阅以下文章:

配置网络端口

允许 Azure 机器学习与 VM 或群集上的 SSH 端口进行通信,为网络安全组配置源条目。 SSH 端口通常是端口 22。 若要允许来自此源的流量,请执行以下操作:

  1. 在“源”下拉列表中,选择“服务标记”。

  2. 在“源服务标记”下拉列表中,选择“AzureMachineLearning”。

    用于在虚拟网络中的 VM 或 HDInsight 群集上执行试验的入站规则

  3. 在“源端口范围”下拉列表中,选择 *

  4. 在“目标”下拉列表中,选择“任何”。

  5. 在“目标端口范围”下拉列表中,选择“22”。

  6. 在“协议”下,选择“任何”。

  7. 在“操作”下,选择“允许”。

保留网络安全组的默认出站规则。 有关详细信息,请参阅安全组中的“默认安全规则”。

如果你不想要使用默认的出站规则,同时想要限制虚拟网络的出站访问,请参阅所需公共 Internet 访问部分。

附加 VM 或 HDInsight 群集

将 VM 或 HDInsight 群集附加到 Azure 机器学习工作区。 有关详细信息,请参阅设置模型训练的计算目标

后续步骤

本文是有关保护 Azure 机器学习工作流的系列文章的一部分。 请参阅本系列中的其他文章: