将永久性磁盘添加到 TPU 虚拟机

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

概览

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

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

前提条件

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

简要步骤

设置 Persistent Disk 的简要步骤如下:

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

设置 TPU 虚拟机和永久性磁盘

您可以在创建 TPU 虚拟机时将永久性磁盘挂接到 TPU 虚拟机。您还可以将永久性磁盘挂接到现有 TPU 虚拟机。

创建永久性磁盘

使用以下命令创建 Persistent Disk:

  $ gcloud compute disks create disk-name \
    --size disk-size  \
    --zone zone \
    --type pd-balanced
disk-name
您为永久性磁盘选择的名称。
disk-size
永久性磁盘大小(以 GB 为单位)。
zone
要在其中创建永久性磁盘的可用区。该可用区必须是用于创建 TPU 的可用区。
type
要添加的磁盘类型。支持的类型包括:pd-standardpd-ssdpd-balanced

挂接永久性磁盘

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

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

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

  $ gcloud compute tpus tpu-vm create tpu-name \
    --project project-id \
    --zone=zone \
    --accelerator-type=v3-8 \
    --version=tpu-vm-image \
    --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 的版本和大小。 如需详细了解每个 TPU 版本支持的加速器类型,请参阅 TPU 版本
version
适用于您的框架的 TPU 虚拟机映像
data-disk
要挂接到 TPU 虚拟机的永久性磁盘的名称和读写模式。

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

使用 gcloud alpha compute tpus tpu-vm attach-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 虚拟机的永久性磁盘的名称。
mode
磁盘的模式。模式必须是 read-onlyread-write 中的一个。

如果您想在删除 TPU 虚拟机时删除永久性磁盘,则需要使用以下命令设置永久性磁盘的自动删除状态:

$ 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
永久性磁盘所在的可用区
auto-delete
在删除 TPU 资源时自动删除永久性磁盘。
disk-name
永久性磁盘的名称。

如果您的虚拟机因任何原因关闭,永久性磁盘可能会断开连接。请参阅配置系统重启时的自动装载,以便在虚拟机重启时自动装载永久性磁盘。

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

挂载永久性磁盘

如需从 TPU 虚拟机访问永久性磁盘,您必须挂载该磁盘。这会指定 TPU 虚拟机文件系统中可以访问永久性磁盘的位置。

  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 是新附加的永久性磁盘的名称。挂接的永久性磁盘的名称取决于挂接到该虚拟机的永久性磁盘的数量。

    使用 TPU Pod 时,您需要在 Pod 中的所有 TPU 虚拟机上挂载永久性磁盘。所有 TPU 虚拟机的永久性磁盘名称应相同,但不能保证。例如,如果您先解除永久性磁盘的挂接,然后再重新挂接,设备名称将递增,从 sdb 更改为 sdc

  3. 如果磁盘尚未格式化,请立即格式化挂接的永久性磁盘:

    (vm)$ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
  4. 创建一个目录来挂载永久性磁盘:

    如果您使用的是 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. 装载永久性磁盘:

    如果您使用的是 TPU 设备,请运行以下命令在 TPU 虚拟机上挂载永久性磁盘。

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

    如果您使用的是 TPU Pod,请在 TPU 虚拟机之外运行以下命令。它会在 Pod 中的所有 TPU 虚拟机上挂载永久性磁盘。

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

卸载永久性磁盘

如需卸载(分离)永久性磁盘,请运行以下命令:

  $ gcloud alpha compute tpus tpu-vm detach-disk tpu-name \
    --zone=zone \
    --disk=disk-name
tpu-name
TPU 资源的名称。
zone
Cloud TPU 所在的可用区
disk-name
要从 TPU 虚拟机分离的永久性磁盘的名称。

清理

在用完 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 虚拟机资源。

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

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

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

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