将永久性磁盘添加到 TPU 虚拟机
TPU 虚拟机包含一个 100GB 的启动磁盘。在某些情况下,您的 TPU 虚拟机可能需要额外的存储空间来进行训练或预处理。您可以添加永久性磁盘来扩展本地磁盘容量。
概览
挂接到单设备 TPU(v2-8、v3-8、v4-8 等)的永久性磁盘可以配置为 read-write
或 read-only
。将永久性磁盘挂接到 TPU 分片中的 TPU 虚拟机时,该磁盘会挂接到该 Pod 中的每个 TPU 虚拟机。为了防止 Pod 中的两个或更多 TPU 虚拟机同时写入到一个永久性磁盘,必须将挂接到 Pod 中 TPU 虚拟机的所有永久性磁盘配置为 read-only
。read-only
磁盘非常适合存储数据集,以便在 TPU Pod 上进行处理。
创建永久性磁盘并将其挂接到 TPU 虚拟机后,您必须装载永久性磁盘,指定可在文件系统中的哪个位置访问永久性磁盘。如需了解详情,请参阅挂载磁盘。
前提条件
在按照以下步骤操作之前,您需要先设置 Google Cloud 账号和项目。如果您尚未设置 Cloud TPU 项目,请先按照设置 Cloud TPU 环境中的步骤操作,然后再继续。
简要步骤
设置 Persistent Disk 的简要步骤如下:
设置 TPU 虚拟机和永久性磁盘
您可以在创建 TPU 虚拟机时将永久性磁盘挂接到 TPU 虚拟机。您还可以将永久性磁盘挂接到现有 TPU 虚拟机。
创建永久性磁盘
使用以下命令创建 Persistent Disk:
$ gcloud compute disks createdisk-name \ --sizedisk-size \ --zonezone \ --typepd-balanced
挂接永久性磁盘
您可以在创建 TPU 虚拟机时将永久性磁盘挂接到 TPU 虚拟机,也可以在创建 TPU 虚拟机后添加永久性磁盘。
在创建 TPU 虚拟机时挂接永久性磁盘
创建 TPU 虚拟机时,请使用 --data-disk
标志挂接永久性磁盘。如果您要创建 TPU Pod,则必须指定 mode=read-only
。如果您要创建单个 TPU 设备,可以指定 mode=read-only
或 mode=read-write
。以下命令会创建一个 TPU,并将永久性磁盘模式设置为 read-write
:
$ gcloud compute tpus tpu-vm createtpu-name \ --projectproject-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 虚拟机
使用 gcloud alpha compute tpus tpu-vm attach-disk
命令将永久性磁盘挂接到现有 TPU 虚拟机。如需了解详情和示例,请参阅 gcloud
文档。
$ gcloud alpha compute tpus tpu-vm attach-disktpu-name \ --zone=zone \ --disk=disk-name \ --mode=disk-mode
命令标志说明
tpu-name
- TPU 资源的名称。
zone
- Cloud TPU 所在的可用区。
disk-name
- 要挂接到 TPU 虚拟机的永久性磁盘的名称。
mode
- 磁盘的模式。模式必须是
read-only
或read-write
中的一个。
如果您想在删除 TPU 虚拟机时删除永久性磁盘,则需要使用以下命令设置永久性磁盘的自动删除状态:
$ gcloud compute instances set-disk-auto-deletevm-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 虚拟机文件系统中可以访问永久性磁盘的位置。
使用 SSH 连接到 TPU 虚拟机:
$ gcloud compute tpus tpu-vm ssh
tpu-name --zonezone 使用 TPU Pod 时,Pod 中的每个 TPU 都有一个 TPU 虚拟机。上述命令适用于 TPU 设备和 TPU Pod。如果您使用的是 TPU Pod,此命令会将您连接到 Pod 中的第一个 TPU(也称为工作器 0)。
在 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
。如果磁盘尚未格式化,请立即格式化挂接的永久性磁盘:
(vm)$ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
创建一个目录来挂载永久性磁盘:
如果您使用的是 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"
装载永久性磁盘:
如果您使用的是 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-disktpu-name \ --zone=zone \ --disk=disk-name
清理
在用完 TPU 资源后,请将其删除。
断开与 Compute Engine 实例的连接(如果您尚未这样做):
(vm)$ exit
您的提示符现在应为
username@projectname
,表明您位于 Cloud Shell 中。删除您的 Cloud TPU 和 Compute Engine 资源。
$ gcloud compute tpus tpu-vm delete
tpu-name \ --zone=zone 通过运行
gcloud list
验证资源是否已删除。删除操作可能需要几分钟时间才能完成。gcloud list
的输出不应显示此流程创建的任何 TPU 虚拟机资源。$ gcloud compute tpus tpu-vm list --zone=
zone 通过列出您创建永久性磁盘的可用区中的所有磁盘,验证永久性磁盘在 TPU 虚拟机删除时是否已自动删除:
$ gcloud compute disks list --filter="zone:(
us-central1-b )"如果永久性磁盘在 TPU 虚拟机删除时未删除,请使用以下命令将其删除:
$ gcloud compute disks delete
disk-name \ --zonezone