配置网络和对 TPU 实例的访问权限

本页介绍如何为 TPU 实例设置自定义网络和访问权限配置,包括:

  • 指定自定义网络和子网
  • 指定外部和内部 IP 地址
  • 启用对 TPU 的 SSH 访问权限
  • 将自定义服务帐号关联到您的 TPU
  • 启用自定义 SSH 方法
  • 使用 VPC Service Controls

前提条件

在运行这些程序之前,您必须安装 Google Cloud CLI、创建 a Google Cloud 项目并启用 Compute Engine API。如需查看相关 说明,请参阅为 TPU Google Cloud 设置项目

指定自定义网络和子网

创建 TPU 虚拟机实例或实例模板时,您可以选择指定要用于 TPU 的网络和子网。如果您未指定网络,TPU 将位于 default 网络中。子网需要与 TPU 运行的可用区位于同一区域。

  1. 按照创建 VPC 网络的说明创建网络和子网。

  2. 创建 TPU 虚拟机,并指定自定义网络和子网:

    如需指定网络和子网,请在运行 gcloud compute instances create 命令时添加以下示例中所示的网络标志:

    gcloud compute instances create TPU_NAME \
        --machine-type=MACHINE_TYPE \
        --image-family=IMAGE_FAMILY \
        --image-project=IMAGE_PROJECT \
        --zone=ZONE \
        --maintenance-policy=TERMINATE \
        --network=NETWORK_NAME \
        --subnet=SUBNET_NAME \
        --stack-type=STACK_TYPE \
        --private-network-ip=INTERNAL_IPV4_ADDRESS \
        --address=EXTERNAL_IPV4_ADDRESS
    

    替换以下占位符:

    • TPU_NAME:TPU 虚拟机的名称。
    • MACHINE_TYPE:TPU 虚拟机的机器类型 (例如 ct6e-standard-8t)。
    • IMAGE_FAMILY:TPU 虚拟机的 操作系统映像系列 。如果您想安装特定的操作系统版本,请使用 --image 标志。如需详细了解操作系统映像,请参阅操作系统 映像
    • IMAGE_PROJECT:包含操作系统 映像的项目。对于 TPU 映像,此值为 ubuntu-os-accelerator-images
    • ZONETPU 虚拟机的 可用区(例如 us-central1-b)。
    • NETWORK_NAME:可选:网络的名称。 如果您指定了网络,则必须指定子网,并且此子网必须属于同一个网络。如果您未指定网络,Compute Engine 会根据指定的子网推断网络。
    • SUBNET_NAME:要与 实例搭配使用的子网的名称。

      如需查看网络中的子网列表,请使用 gcloud compute networks subnets list 命令

    • STACK_TYPE:可选:网络接口的网络堆栈类型 。STACK_TYPE 必须是以下项之一:IPV4_ONLYIPV4_IPV6IPV6_ONLY预览版)。 默认值为 IPV4_ONLY

    • INTERNAL_IPV4_ADDRESS:可选:您希望计算实例在目标 子网中使用的内部 IPv4 地址。如果您不需要特定 IP 地址,请省略此标志。

      如需指定内部 IPv6 地址,请改用标志 --internal-ipv6-address

    • EXTERNAL_IPV4_ADDRESS:可选:要与网络接口搭配使用的静态 外部 IPv4 地址。将 EXTERNAL_IPV4_ADDRESS替换为以下项之一:

      • 指定子网中的有效 IPv4 地址。您之前必须已 预留外部 IPv4 地址
      • ''(空字符串),用于使用临时外部 IP 地址。

      如果您不希望虚拟机具有外部 IP 地址,请将 --address 标志替换为 --no-address 标志。

      如需指定外部 IPv6 地址,请改用标志 --external-ipv6-address

了解外部和内部 IP 地址

创建 TPU 虚拟机实例时,它们始终具有内部 IP 地址。 如果您使用 gcloud CLI 创建 TPU 实例,系统默认会生成外部 IP 地址。如果您通过 Compute Engine REST API (compute.googleapis.com) 创建它们,系统默认不会分配外部 IP 地址。在这两种情况下,您都可以更改默认行为。

以下是一些将 TPU 虚拟机限制为仅使用内部 IP 地址的原因:

  • 增强的安全性:内部 IP 地址只能由 同一 VPC 网络中的资源访问,这可以通过 限制对 TPU 虚拟机的外部访问来提高安全性。在处理敏感数据或希望将对 TPU 虚拟机的访问权限限制为网络中的特定用户或系统时,这一点尤为重要。
  • 节省费用:通过使用内部 IP 地址,您可以避免与外部 IP 地址相关的费用,这对于大量 TPU 虚拟机来说可能是一笔不小的费用。
  • 提升网络性能:内部 IP 地址可以提升 网络性能,因为流量保留在 Google 的网络中, 避免了通过公共互联网进行路由的开销。这对于需要在 TPU 虚拟机之间进行高带宽通信的大规模机器学习工作负载尤为重要。

创建没有外部 IP 地址的 TPU 虚拟机实例

如果您想创建没有外部 IP 地址的 TPU 虚拟机实例 ,请在运行 gcloud compute instances create 命令时使用 --no-address 标志:

gcloud compute instances create TPU_NAME \
    --machine-type=MACHINE_TYPE \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --zone=ZONE \
    --maintenance-policy=TERMINATE \
    --network=NETWORK_NAME \
    --subnet=SUBNET_NAME \
    --stack-type=STACK_TYPE \
    --private-network-ip=INTERNAL_IPV4_ADDRESS \
    --no-address

替换以下占位符:

  • TPU_NAME:TPU 虚拟机的名称。
  • MACHINE_TYPE:TPU 虚拟机的机器类型 (例如 ct6e-standard-8t)。
  • IMAGE_FAMILY:TPU 虚拟机的 操作系统映像系列 。如果您想安装特定的操作系统版本,请使用 --image 标志。如需详细了解操作系统映像,请参阅操作系统映像
  • IMAGE_PROJECT:包含操作系统映像的项目。 对于 TPU 映像,此值为 ubuntu-os-accelerator-images
  • ZONE:TPU 虚拟机的可用区 (例如 us-central1-b)。
  • NETWORK_NAME:可选:网络的名称。 如果您指定了网络,则必须指定子网,并且此子网必须属于同一个网络。如果您未指定网络,Compute Engine 会根据指定的子网推断网络。
  • SUBNET_NAME:要与实例搭配使用的子网的名称 。

    如需查看网络中的子网列表,请使用 gcloud compute networks subnets list 命令

  • STACK_TYPE:可选:网络接口的网络堆栈类型。STACK_TYPE 必须是以下项之一: IPV4_ONLYIPV4_IPV6IPV6_ONLY预览版)。 默认值为 IPV4_ONLY

  • INTERNAL_IPV4_ADDRESS(可选):您希望计算实例在目标子网中使用的内部 IPv4 地址。如果您不需要特定 IP 地址,请省略此标志。

    如需指定内部 IPv6 地址,请改用标志 --internal-ipv6-address

创建具有外部 IP 地址的 TPU 虚拟机实例

使用 gcloud CLI 创建 TPU 虚拟机实例时,该实例默认会获得一个临时外部 IP 地址。

如需在使用 REST API 时创建具有外部 IP 地址的 TPU 虚拟机,请向 instances.insert method 发出 POST 请求,并在请求正文的 networkInterfaces 数组中添加 accessConfigs 字段。如果请求正文未指定 accessConfigs 字段,则该实例将无法访问外部互联网。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
    "machineType":"zones/ZONE/machineTypes/MACHINE_TYPE",
    "name":"TPU_NAME",
    "disks":[
        {
            "initializeParams":{
                "sourceImage":"projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
            },
            "boot":true
        }
    ],
    "networkInterfaces":[
        {
            "network":"global/networks/NETWORK_NAME",
            "subnetwork":"regions/REGION/subnetworks/SUBNET_NAME",
            "stackType":"STACK_TYPE",
            "accessConfigs":[
                {
                    "name": "external-nat",
                    "type": "ONE_TO_ONE_NAT"
                }
            ]
        }
    ],
    "scheduling": {
        "onHostMaintenance": "TERMINATE"
    }
}

替换以下占位符:

  • PROJECT_ID:您要在其中 创建 TPU 虚拟机的项目的 ID。
  • ZONE:TPU 虚拟机所在的可用区(例如 us-central1-b)。
  • MACHINE_TYPE:TPU 虚拟机的机器类型 (例如 ct6e-standard-8t)。
  • TPU_NAME:TPU 虚拟机的名称。
  • IMAGE_PROJECT:包含操作系统 映像的项目。对于 TPU 映像,此值为 ubuntu-os-accelerator-images
  • IMAGE_FAMILY:TPU 虚拟机的 操作系统映像系列 。如果您想安装特定的操作系统版本,请将 整个 "sourceImage" 值替换为映像版本的名称,格式如下: projects/IMAGE_PROJECT/global/images/IMAGE_NAME

    如需详细了解操作系统映像,请参阅操作系统映像

  • NETWORK_NAME:可选:网络的名称。 如果您指定了网络,则必须指定子网,并且此子网必须属于同一个网络。如果您未指定网络,Compute Engine 会根据指定的子网推断网络。

  • REGION:子网所在的区域。

  • SUBNET_NAME:要与实例搭配使用的子网的名称 。

    如需查看网络中的子网列表,请使用 gcloud compute networks subnets list 命令

  • STACK_TYPE(可选):网络接口的栈类型。STACK_TYPE 必须是以下项之一:IPV4_ONLYIPV4_IPV6IPV6_ONLY预览版)。默认值为 IPV4_ONLY

如果您已预留静态外部 IP 地址,则可以在创建时使用带有静态 IP 地址的 --address 标志 或用于设置详细网络配置的 --network-interface 标志 将其分配给 实例。如需了解详情,请参阅配置 静态外部 IP 地址

启用对 TPU 虚拟机实例的 SSH 访问权限

如需启用对 TPU 虚拟机实例的 SSH 访问权限,请执行以下操作:

  • TPU 实例必须可通过外部 IP 地址或专用 Google 访问通道访问。
    • 如果您使用 gcloud CLI 创建 TPU 实例,该实例默认会获得一个临时外部 IP 地址。如果您使用 REST API 创建 TPU 实例,则必须指定该实例应具有外部 IP 地址。如需了解详情,请参阅创建具有外部 IP 地址的 TPU 虚拟机实例
    • 如果您的 TPU 实例没有外部 IP 地址,您可以配置专用 Google 访问通道。如需了解详情,请参阅启用 专用 Google 访问通道
  • TPU 实例使用的网络必须允许 SSH 流量。默认网络会自动允许 SSH 流量。如果您使用的是自定义网络 或更改了默认投放网络设置,则必须在网络上明确启用 SSH 。

启用专用 Google 访问通道

没有外部 IP 地址的 TPU 可以使用专用 Google 访问通道来访问 Google API 和服务。如需详细了解如何启用 专用 Google 访问通道,请参阅配置 专用 Google 访问通道

配置专用 Google 访问通道后,使用 SSH连接到虚拟机。

在网络上启用 SSH 流量

默认网络允许通过 SSH 访问所有 TPU 虚拟机。如果您使用的是自定义网络或更改了默认网络设置,则需要通过添加防火墙规则来明确启用 SSH 访问权限:

gcloud compute firewall-rules create \
    --network=NETWORK allow-ssh \
    --allow=tcp:22

关联自定义服务帐号

每个 TPU 虚拟机都有一个关联的服务帐号,用于代表您发出 API 请求。TPU 虚拟机使用此服务帐号调用 Compute Engine API 并访问 Cloud Storage 和其他服务。默认情况下,TPU 虚拟机 使用默认 Compute Engine 服务 账号

如需详细了解服务账号,请参阅 服务账号

如需在创建 TPU 虚拟机实例时指定自定义服务帐号,请使用 gcloud compute instances create 命令并提供服务 账号电子邮件地址和 cloud-platform 访问权限范围:

gcloud compute instances create TPU_NAME \
    --machine-type=MACHINE_TYPE \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --zone=ZONE \
    --maintenance-policy=TERMINATE \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=https://www.googleapis.com/auth/cloud-platform

替换以下内容:

  • TPU_NAME:TPU 虚拟机的名称。
  • MACHINE_TYPE:TPU 虚拟机的机器类型 (例如 ct6e-standard-8t)。
  • IMAGE_FAMILY:TPU 虚拟机的 操作系统映像系列 。如果您想安装特定的操作系统版本,请使用 --image 标志。如需详细了解操作系统映像,请参阅操作系统 映像
  • IMAGE_PROJECT:包含操作系统 映像的项目。对于 TPU 映像,此值为 ubuntu-os-accelerator-images
  • ZONE:TPU 虚拟机的可用区 (例如 us-central1-b)。
  • SERVICE_ACCOUNT_EMAIL:您创建的 服务帐号的电子邮件地址。例如:my-sa-123@my-project-123.iam.gserviceaccount.com。如需查看电子邮件 地址,请参阅列出服务 账号

如需在与创建 TPU 虚拟机的项目不同的项目中使用服务帐号,请按照使用跨项目服务 账号中的说明进行操作。

与 VPC Service Controls 集成

使用 VPC Service Controls 为 TPU 资源定义安全边界,并控制跨边界的数据移动。如需了解详情, 请参阅 VPC Service Controls 概览。如需了解将 TPU 与 VPC Service Controls 结合使用的限制,请参阅 支持的产品和 限制