将持久性块存储挂接到 TPU 虚拟机

TPU 虚拟机包含一个 10 GB 的启动磁盘。在某些情况下,需要额外的存储空间进行训练或预处理。添加 Google Cloud Hyperdisk永久性磁盘 (PD) 卷以扩展 本地磁盘容量。

为了获得最高性能和高级功能,请使用 Hyperdisk(如果适用于您的 TPU 版本)。 否则,请使用 Persistent Disk。如需详细了解 Compute Engine 中的块存储选项,请参阅选择磁盘类型

TPU 对 Hyperdisk 和永久性磁盘的支持

下表展示了每个 TPU 版本支持的磁盘类型:

TPU 版本 支持的磁盘类型 每个虚拟机的磁盘数量上限
(包括启动磁盘)
TPU7x Hyperdisk Balanced
Hyperdisk ML
128
v6e Hyperdisk Balanced
Hyperdisk ML
32
v5p Hyperdisk ML
平衡永久性磁盘
128

访问模式

以读写 (rw) 或只读 (ro) 模式配置挂接到单个 TPU 虚拟机(也称为单主机 TPU 切片)的磁盘,例如 ct6e-standard-4t

将磁盘挂接到多主机 TPU 切片时,该磁盘会挂接到切片中的每个虚拟机。为了防止多个 TPU 虚拟机同时写入磁盘,您必须将挂接到多主机 TPU 切片的所有磁盘都配置为只读 (ro)。只读磁盘对于存储数据集以在 TPU 切片上进行处理非常有用。

前提条件

在使用这些步骤之前,请设置 Google Cloud 账号和项目。如需了解详情,请参阅设置 Cloud TPU 环境

创建磁盘

如需创建磁盘,请使用以下命令:

gcloud compute disks create DISK_NAME \
    --size DISK_SIZE  \
    --zone ZONE \
    --type DISK_TYPE

替换以下占位符:

  • DISK_NAME:新磁盘的名称。
  • DISK_SIZE:新磁盘的大小。该值必须是一个整数,后跟大小单位(GB 表示吉比字节,或 TB 表示太比字节)。如果您未指定大小单位,系统会假定为 GB。
  • ZONE:要在其中创建新磁盘的可用区 的名称。这必须与您创建 TPU 的可用区相同。
  • DISK_TYPE:磁盘类型。 请使用以下值之一:hyperdisk-balancedhyperdisk-mlpd-balanced

对于 Hyperdisk,您可以选择使用以下值之一指定 --access-mode 标志:

  • READ_WRITE_SINGLE:从一个实例进行读写访问(默认)。
  • READ_ONLY_MANY:(仅限 Hyperdisk ML) 从多个实例同时进行只读 访问。

如需详细了解如何创建磁盘,请参阅创建新的 Hyperdisk 卷创建新的 Persistent Disk

挂接磁盘

您可以在创建 TPU 虚拟机或切片时挂接磁盘卷,也可以在创建后挂接磁盘卷。

在创建 TPU 虚拟机时挂接磁盘

创建 TPU 虚拟机或实例模板时,请使用 --disk 标志挂接磁盘卷。

在创建单个 TPU 虚拟机时挂接磁盘

以下示例展示了如何在创建单个 TPU 虚拟机时挂接磁盘卷:

  gcloud compute instances create TPU_NAME \
    --machine-type=MACHINE_TYPE \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --zone=ZONE \
    --maintenance-policy=TERMINATE \
    --disk=name=DISK_NAME,device-name=DEVICE_NAME,mode=MODE

替换以下占位符:

  • TPU_NAME:TPU 虚拟机的名称。
  • MACHINE_TYPE:TPU 虚拟机的机器类型 (例如 ct6e-standard-8t)。
  • IMAGE_FAMILY:TPU 虚拟机的 操作系统映像系列 。如果您要安装特定操作系统版本,请使用 --image 标志。如需详细了解操作系统映像,请参阅操作系统映像
  • IMAGE_PROJECT:包含操作系统映像的项目。 对于 TPU 映像,此值为 ubuntu-os-accelerator-images
  • ZONE:TPU 虚拟机的可用区
  • DEVICE_NAME:用于 磁盘的设备的名称。此名称用于在操作系统中标识磁盘。
  • MODE:磁盘的模式。此值可以是 rw(读写)或 ro(只读)。如需了解详情,请参阅访问模式

在创建多主机 TPU 切片时挂接磁盘

创建多主机 TPU 切片时,您必须指定 mode=read-only(仅限 Hyperdisk ML 和平衡永久性磁盘)。如需了解详情,请参阅 访问模式

如需在多主机 TPU 切片中挂接磁盘,请创建一个包含挂接磁盘的实例模板,创建一个工作负载政策,然后创建一个 MIG:

  1. 创建实例模板

    gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --disk=name=DISK_NAME,mode=MODE
    

    替换以下占位符:

    • INSTANCE_TEMPLATE_NAME:实例 模板的名称。
    • MACHINE_TYPE:TPU 虚拟机的机器类型 ,例如ct6e-standard-8t
    • IMAGE_FAMILY:TPU 虚拟机的 操作系统映像系列 。如果您要安装特定操作系统版本,请使用 --image 标志。如需详细了解操作系统映像,请参阅操作系统映像
    • IMAGE_PROJECT:包含操作系统映像的项目。 对于 TPU 映像,此值为 ubuntu-os-accelerator-images
    • DISK_NAME:要挂接到 TPU 虚拟机的磁盘的名称。
    • MODE:磁盘的模式。对于多主机 TPU 切片,模式必须为 ro(只读)。
  2. 创建工作负载政策

    gcloud compute resource-policies create workload WORKLOAD_POLICY_NAME \
    --type=high-throughput \
    --accelerator-topology=TOPOLOGY
    

    替换以下占位符:

    • WORKLOAD_POLICY_NAME:工作负载政策的名称。
    • TOPOLOGY:TPU 虚拟机的拓扑,例如 4x4x8。如需详细了解每个 TPU 版本的拓扑,请参阅 系统架构
  3. 创建 MIG:

    gcloud compute instance-groups managed create MIG_NAME \
        --project=PROJECT_ID \
        --zone=ZONE \
        --template=TEMPLATE_NAME \
        --size=SIZE \
        --workload-policy=WORKLOAD_POLICY_NAME
    

    替换以下占位符:

    • MIG_NAME:MIG 的名称。
    • PROJECT_ID:项目 ID。
    • ZONE:Cloud TPU 所在的可用区
    • TEMPLATE_NAME:实例模板的名称。
    • SIZE:多主机 TPU 切片的虚拟机数量。
    • WORKLOAD_POLICY_NAME:工作负载政策的名称。

在创建包含多个单主机 TPU 切片的 MIG 时挂接磁盘

如果您创建单主机 TPU 切片,则可以指定 mode=read-only(仅限 Hyperdisk ML 和平衡永久性磁盘)或 mode=read-write

如需将持久性存储挂接到包含独立单主机 TPU 切片的 MIG,请配置实例模板,以使用 --create-disk 标志为每个实例创建新磁盘:

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --disk=name=DISK_NAME,mode=MODE

替换以下占位符:

  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • MACHINE_TYPE:TPU 虚拟机的机器类型(例如 ct6e-standard-8t)。
  • IMAGE_FAMILY:TPU 虚拟机的操作系统映像系列。
  • IMAGE_PROJECT:包含操作系统映像的项目 (ubuntu-os-accelerator-images)。
  • DISK_NAME:要创建并 挂接到每个 TPU 虚拟机的磁盘的基本名称。
  • DISK_SIZE:磁盘大小(以 GB 为单位)。
  • DISK_TYPE:磁盘类型(例如 pd-balancedhyperdisk-balanced)。

然后,按照上一部分所示创建 MIG, 并将 --size 设置为您选择的 TPU 虚拟机数量。

将磁盘挂接到现有 TPU 虚拟机

如需将磁盘挂接到现有 TPU 虚拟机,请使用 gcloud compute instances attach-disk 命令。

gcloud compute instances attach-disk VM_NAME \
    --zone=ZONE \
    --disk=DISK_NAME \
    --mode=MODE

替换以下占位符:

  • VM_NAME:TPU 虚拟机的名称。
  • ZONE:Cloud TPU 所在的可用区
  • DISK_NAME:要挂接到 TPU 虚拟机的磁盘的名称。
  • MODE:磁盘的模式。如需了解详情,请参阅 访问模式

如果您的虚拟机因任何原因而关停,您可能需要在重启虚拟机后装载磁盘。如需了解如何使磁盘在虚拟机重启时自动装载 ,请参阅配置系统重启时的自动装载

如需详细了解如何自动删除磁盘,请参阅修改 Hyperdisk修改 永久性磁盘

格式化并装载磁盘

如果您将新的空白磁盘挂接到 TPU 虚拟机,则必须先格式化并装载磁盘,然后才能使用磁盘。如果挂接的磁盘已包含数据,则必须先装载该磁盘,然后才能使用它。

如需详细了解如何格式化和装载非启动磁盘,请参阅 在 Linux 虚拟机上格式化和装载非启动磁盘

分离磁盘

如需从 TPU 虚拟机分离磁盘,请运行以下命令:

gcloud compute instances detach-disk VM_NAME \
    --zone=ZONE \
    --disk=DISK_NAME

替换以下占位符:

  • VM_NAME:TPU 虚拟机的名称。
  • ZONE:Cloud TPU 所在的可用区
  • DISK_NAME:要从 TPU 虚拟机分离的磁盘的名称。

如需详细了解如何分离磁盘,请参阅分离磁盘

清理

使用完毕后,删除您的 Cloud TPU 和 Compute Engine 资源。

  1. 断开与 Cloud TPU 的连接(如果您尚未这样做):

    exit
    
  2. 删除 TPU 虚拟机:

    gcloud compute instances delete VM_NAME \
        --zone=ZONE
    

    替换以下占位符:

    • VM_NAME:TPU 虚拟机的名称。
    • ZONE:Cloud TPU 所在的可用区

    如果您使用 MIG 创建了多主机 TPU 切片,请改为删除实例组:

    gcloud compute instance-groups managed delete MIG_NAME \
        --zone=ZONE
    

    替换以下占位符:

    • MIG_NAME:MIG 的名称。
    • ZONE:Cloud TPU 所在的可用区
  3. 验证 Cloud TPU 删除操作。删除操作可能需要几分钟时间才能完成。

    gcloud compute instances list --zone=ZONE
    
  4. 通过列出您在其中创建磁盘的可用区中的所有磁盘,验证磁盘在 TPU 虚拟机删除时是否已自动删除:

    gcloud compute disks list --filter="zone:( ZONE )"
    

    替换以下占位符:

    如果磁盘在 TPU 虚拟机删除时未删除,请使用以下命令将其删除:

    gcloud compute disks delete DISK_NAME \
        --zone=ZONE
    

    替换以下占位符:

    • DISK_NAME:要删除的磁盘的名称。
    • ZONE:Cloud TPU 所在的可用区