将永久性磁盘添加到 TPU 虚拟机
TPU 虚拟机包含一个 100GB 的启动磁盘。在某些情况下,您可能需要更多本地存储空间来进行训练或预处理。您可以添加永久性磁盘来扩展本地磁盘容量。
概览
挂接到单设备 TPU(v2-8、v3-8、v4-8 等)的永久性磁盘可以配置为 read-write
或 read-only
。当您将一个永久性磁盘挂接到属于 TPU Pod 的 TPU 虚拟机时,该磁盘会挂接到该 Pod 中的每个 TPU 虚拟机。为防止 Pod 中的两个或更多 TPU 虚拟机同时向永久性磁盘写入数据,您必须将一个 Pod 中挂接到 TPU 虚拟机的所有永久性磁盘配置为 read-only
。read-only
磁盘可用于在 TPU Pod 上存储数据集以进行处理。
创建永久性磁盘并将其挂接到 TPU 虚拟机后,必须装载永久性磁盘,指定永久性磁盘可以在文件系统中的什么位置访问。如需了解详情,请参阅装载磁盘。
前提条件
您需要先设置 Google Cloud 帐号和项目,然后才能按照以下步骤执行操作。如果您尚未设置 Cloud TPU 项目,请先按照设置帐号和 Cloud TPU 项目中的步骤操作,然后再继续。
简要步骤
设置永久性磁盘的简要步骤如下:
设置 TPU 虚拟机和永久性磁盘
创建 TPU 虚拟机时,您可以将永久性磁盘挂接到 TPU 虚拟机。您还可以将永久性磁盘挂接到现有的 TPU 虚拟机。
创建永久性磁盘
使用以下命令创建永久性磁盘:
$ gcloud compute disks create disk-name \
--size disk-size \
--zone zone \
--type pd-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 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 虚拟机的永久性磁盘的名称和读写模式。
将永久性磁盘挂接到现有 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
- 磁盘的模式。模式必须是“只读”或“读写”。
如果要在删除 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 虚拟机文件系统中可访问永久性磁盘的位置。
使用 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
是永久性磁盘。挂接的永久性磁盘的名称取决于挂接到虚拟机的永久性磁盘数量。使用 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 设备,请运行以下命令来创建一个目录来装载永久性磁盘:
(vm)$ sudo mkdir -p /mnt/disks/persist
如果您使用的是 TPU Pod,请在 TPU 虚拟机之外运行以下命令。这将在 Pod 中的所有 TPU 虚拟机上创建该目录。
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all --command="sudo mkdir -p /mnt/disks/persist"
装载永久性磁盘:
如果您使用的是 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"
清理
用完 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 虚拟机资源。TPU 虚拟机
$ gcloud compute tpus tpu-vm list --zone=zone
TPU 节点
$ gcloud compute tpus execution-groups list --zone zone
通过列出您创建永久性磁盘的可用区中的所有磁盘,验证永久性磁盘在 TPU 虚拟机删除时是否已自动删除:
$ gcloud compute disks list --filter="zone:( us-central1-b )"
如果永久性磁盘在 TPU 虚拟机删除时未删除,请使用以下命令将其删除:
$ gcloud compute disks delete disk-name \ --zone zone