将 Persistent Disk 添加到 TPU 虚拟机
TPU 虚拟机包含一个 100GB 的启动磁盘。在某些情况下,您的 TPU 虚拟机可能需要额外的存储空间来进行训练或预处理。您可以添加永久性磁盘来扩展本地磁盘容量。
概览
挂接到单设备 TPU(v2-8、v3-8、v4-8 等)的 Persistent Disk 可以配置为 read-write
或 read-only
。将 Persistent Disk 挂接到 TPU Pod 中的 TPU 虚拟机时,该磁盘会挂接到该 Pod 中的每个 TPU 虚拟机。为了防止 Pod 中的两个或更多 TPU 虚拟机同时写入到一个 Persistent Disk,必须将挂接到 Pod 中 TPU 虚拟机的所有永久性磁盘配置为 read-only
。read-only
磁盘非常适合存储数据集,以便在 TPU Pod 上进行处理。
创建 Persistent Disk 并将其挂接到 TPU 虚拟机后,您必须装载 Persistent Disk,指定可在文件系统中的哪个位置访问 Persistent Disk。如需了解详情,请参阅挂载磁盘。
前提条件
在按照以下步骤操作之前,您需要先设置 Google Cloud 账号和项目。如果您尚未设置 Cloud TPU 项目,请先按照设置 Cloud 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
命令标志说明
挂接 Persistent Disk
您可以在创建 TPU 虚拟机时将 Persistent Disk 挂接到 TPU 虚拟机,也可以在创建 TPU 虚拟机后添加永久性磁盘。
在创建 TPU 虚拟机时挂接 Persistent Disk
创建 TPU 虚拟机时,请使用 --data-disk
标志挂接 Persistent Disk。如果您要创建 TPU Pod,则必须指定 mode=read-only
。如果您要创建单个 TPU 设备,可以指定 mode=read-only
或 mode=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=tpu-vm-image \ --data-disk source=projects/project-id/zones/zone/disks/disk-name,mode=read-write
命令标志说明
将 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-only
或read-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 的位置。
使用 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)。
在 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
。如果磁盘尚未格式化,请立即格式化已挂接的 Persistent Disk:
(vm)$ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
创建一个目录来挂载 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"
装载 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"
卸载永久性磁盘
如需卸载(分离)永久性磁盘,请运行以下命令:
$ gcloud alpha compute tpus tpu-vm detach-disk tpu-name \ --zone=zone \ --disk=disk-name
命令标志说明
tpu-name
- TPU 资源的名称。
zone
- Cloud TPU 所在的可用区。
disk-name
- 要从 TPU 虚拟机分离的 Persistent Disk 的名称。
清理
在用完 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
通过列出您创建 Persistent Disk 的可用区中的所有磁盘,验证 Persistent Disk 在 TPU 虚拟机删除时是否已自动删除:
$ gcloud compute disks list --filter="zone:( us-central1-b )"
如果 Persistent Disk 在 TPU 虚拟机删除时未删除,请使用以下命令将其删除:
$ gcloud compute disks delete disk-name \ --zone zone