向 TPU 虚拟机添加 Persistent Disk

TPU 虚拟机包含一个 100GB 的启动磁盘。在某些情况下,您的 TPU 虚拟机可能需要额外的存储空间来进行训练或预处理。您可以添加永久性磁盘来扩展本地磁盘容量。

概览

挂接到单设备 TPU(v2-8、v3-8、v4-8 等)的 Persistent Disk 可以配置为 read-writeread-only。当您将 Persistent Disk 挂接到属于 TPU Pod 的 TPU 虚拟机时,该磁盘会挂接到该 Pod 中的每个 TPU 虚拟机。为防止一个 Pod 中的两个或多个 TPU 虚拟机同时向一个 Persistent Disk 写入数据,挂接到 Pod 中某个 TPU 虚拟机的所有永久性磁盘都必须配置为 read-onlyread-only 磁盘适合存储要在 TPU Pod 上进行处理的数据集。

创建 Persistent Disk 并将其挂接到 TPU 虚拟机后,您必须装载该 Persistent Disk,并指定可以在文件系统中的哪个位置访问该 Persistent Disk。如需了解详情,请参阅装载磁盘

前提条件

在执行以下步骤之前,您需要先设置 Google Cloud 帐号和项目。如果您尚未设置 Cloud TPU 项目,请先按照设置帐号和 Cloud TPU 项目中的步骤进行操作,然后再继续操作。

简要步骤

设置 Persistent Disk 的简要步骤:

  1. 创建 Persistent Disk
  2. 将 Persistent Disk 连接到 TPU 虚拟机
  3. 装载永久性磁盘
  4. 清理 TPU 虚拟机和 Persistent Disk 资源

设置 TPU 虚拟机和 Persistent Disk

您可以在创建 TPU 虚拟机时将 Persistent Disk 挂接到 TPU 虚拟机。您还可以将 Persistent Disk 挂接到现有的 TPU 虚拟机。

创建 Persistent Disk

使用以下命令创建 Persistent Disk:

  $ gcloud compute disks create disk-name \
    --size disk-size  \
    --zone zone \
    --type pd-balanced

命令标志说明

disk-name
您为 Persistent Disk 选择的名称。
disk-size
Persistent Disk 的大小(以 GB 为单位)。
zone
要在其中创建 Persistent Disk 的区域。此地区必须是用于创建 TPU 的同一地区。
type
要添加的磁盘类型。支持的类型包括 pd-standardpd-ssdpd-balanced

挂接 Persistent Disk

您可以在创建 TPU 虚拟机时将 Persistent Disk 挂接到您的 TPU 虚拟机,也可以在创建 TPU 虚拟机后添加一个永久性磁盘。

创建 TPU 虚拟机时挂接 Persistent Disk

创建 TPU 虚拟机时,使用 --data-disk 标志挂接 Persistent Disk。如果要创建 TPU Pod,则必须指定 mode=read-only。如果您要创建单个 TPU 设备,则可以指定 mode=read-onlymode=read-write。以下命令会创建单个 TPU 并将 Persistent Disk 模式设置为 read-write

  $ gcloud compute tpus tpu-vm create tpu-name \
    --project project-id \
    --zone=zone \
    --accelerator-type=v3-8 \
    --version=Cloud TPU software version \
    --data-disk source=projects/project-id/zones/zone/disks/disk-name,mode=read-write

命令标志说明

tpu-name
您为 TPU 资源选择的名称。
project
您的项目 ID。
zone
要在其中创建 Cloud TPU 的区域
accelerator-type
要创建的 Cloud TPU 的类型
version
框架的 Cloud TPU 软件版本
data-disk
要挂接到 TPU 虚拟机的 Persistent Disk 的名称和读写模式。

将 Persistent Disk 连接到现有 TPU 虚拟机

使用 gcloud alpha compute tpus tpu-vm attach-disk 命令将 Persistent Disk 挂接到现有 TPU 虚拟机。如需了解详情和查看示例,请参阅 gcloud 文档。

  $ gcloud alpha compute tpus tpu-vm attach-disk tpu-name \
    --zone=zone \
    --disk=disk-name \
    --mode=disk-mode

命令标志说明

tpu-name
TPU 资源的名称。
zone
Cloud TPU 所在的区域
disk-name
要挂接到 TPU 虚拟机的 Persistent Disk 的名称。
mode
磁盘的模式。模式必须为 read-onlyread-write 之一。

如果要在删除 TPU 虚拟机时删除 Persistent Disk,则需要使用以下命令设置 Persistent Disk 的自动删除状态:

$ gcloud compute instances set-disk-auto-delete vm-instance \
  --zone=zone \
  --auto-delete \
  --disk=disk-name

命令标志说明

vm-instance
通过 SSH 连接到 TPU 虚拟机后,shell 提示符会更改为包含您的用户 ID,后跟生成的虚拟机实例名称(例如,pjohnston@t1v-n-...$)。将 vm-instance 替换为生成的虚拟机实例名称,
zone
Persistent Disk 所在的可用区
auto-delete
删除 TPU 资源后,自动删除 Persistent Disk。
disk-name
Persistent Disk 的名称。

如果您的虚拟机由于任何原因关闭,则 Persistent Disk 可能会断开连接。请参阅配置系统重启时自动装载,以便在虚拟机重启时自动装载 Persistent Disk。

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

装载 Persistent Disk

为了从 TPU 虚拟机访问 Persistent Disk,您必须装载磁盘。此字段指定 TPU 虚拟机文件系统中可以访问 Persistent Disk 的位置。

  1. 使用 SSH 连接到您的 TPU 虚拟机:

    $ gcloud compute tpus tpu-vm ssh tpu-name --zone zone
    

    使用 TPU Pod 时,Pod 中的每个 TPU 都有一个 TPU 虚拟机。上述命令将同时适用于 TPU 设备和 TPU Pod。如果您使用的是 TPU Pod,则此命令会将您连接到 Pod 中的第一个 TPU(也称为工作器 0)。

  2. 在 TPU 虚拟机中,列出挂接到 TPU 虚拟机的磁盘:

    (vm)$ sudo lsblk
    

    lsblk 命令的输出应如下所示:

    NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    loop0     7:0    0  55.5M  1 loop /snap/core18/1997
    loop1     7:1    0  67.6M  1 loop /snap/lxd/20326
    loop2     7:2    0  32.3M  1 loop /snap/snapd/11588
    loop3     7:3    0  32.1M  1 loop /snap/snapd/11841
    loop4     7:4    0  55.4M  1 loop /snap/core18/2066
    sda       8:0    0   300G  0 disk
    ├─sda1    8:1    0 299.9G  0 part /
    ├─sda14   8:14   0     4M  0 part
    └─sda15   8:15   0   106M  0 part /boot/efi
    sdb       8:16   0    10G  0 disk    <== Persistent Disk
    

    在此示例中,sda 是启动磁盘,sdb 是新挂接的 Persistent Disk 的名称。挂接的 Persistent Disk 的名称取决于挂接到虚拟机的永久性磁盘的数量。

    使用 TPU Pod 时,您需要在 Pod 中的所有 TPU 虚拟机上装载 Persistent Disk。所有 TPU 虚拟机的 Persistent Disk 名称都应相同,但不保证一定如此。例如,如果您分离然后重新挂接 Persistent Disk,设备名称将递增,从 sdb 更改为 sdc,依此类推。

  3. 如果磁盘尚未格式化,请立即格式化挂接的 Persistent Disk:

    (vm)$ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
    
  4. 创建一个用于装载 Persistent Disk 的目录:

    如果您使用的是 TPU 设备,请运行以下命令创建一个目录来装载 Persistent Disk:

    (vm)$ sudo mkdir -p /mnt/disks/persist
    

    如果您使用的是 TPU Pod,请在 TPU 虚拟机外部运行以下命令。这将在 Pod 中的所有 TPU 虚拟机上创建目录。

    (vm)$ gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all --command="sudo mkdir -p /mnt/disks/persist"
    
  5. 装载 Persistent Disk:

    如果您使用的是 TPU 设备,请运行以下命令,在 TPU 虚拟机上装载 Persistent Disk。

    (vm)$ sudo mount -o discard,defaults /dev/sdb /mnt/disks/persist

    如果您使用的是 TPU Pod,请在 TPU 虚拟机外部运行以下命令。它会在您的 Pod 中的所有 TPU 虚拟机上装载 Persistent Disk。

    (vm)$ gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all --command="sudo mount -o discard,defaults /dev/sdb /mnt/disks/persist"

清理

使用完 TPU 资源后将其删除。

  1. 断开与 Compute Engine 实例的连接(如果您尚未这样做):

    (vm)$ exit
    

    您的提示符现在应为 username@projectname,表明您位于 Cloud Shell 中。

  2. 删除您的 Cloud TPU 和 Compute Engine 资源。

    $ gcloud compute tpus tpu-vm delete tpu-name \
     --zone=zone
    
  3. 通过运行 gcloud list 验证资源是否已删除。删除操作可能需要几分钟时间才能完成。gcloud list 的输出不应显示此过程创建的任何 TPU 虚拟机资源。

    TPU 虚拟机

    $ gcloud compute tpus tpu-vm list --zone=zone
    

    TPU 节点

    $ gcloud compute tpus execution-groups list --zone zone
    
  4. 通过列出您创建 Persistent Disk 的地区中的所有磁盘,验证在删除 TPU 虚拟机时是否自动删除了 Persistent Disk:

    $ gcloud compute disks list --filter="zone:( us-central1-b )"
    

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

    $ gcloud compute disks delete disk-name \
    --zone zone