将持久性块存储空间挂接到 TPU 虚拟机
TPU 虚拟机包含一个 100 GiB 启动磁盘。在某些情况下,TPU 虚拟机可能需要额外的存储空间进行训练或预处理。您可以添加 Google Cloud Hyperdisk 或永久性磁盘(PD)卷来扩展本地磁盘容量。
为了获得最高性能和高级功能,Google 建议您使用 Hyperdisk(如果适用于 TPU)。否则,请使用永久性磁盘。如需详细了解 Compute Engine 中的块存储选项,请参阅选择磁盘类型。
TPU 对 Hyperdisk 和永久性磁盘的支持
下表展示了每个 TPU 版本支持的磁盘类型:
| TPU 版本 | 支持的磁盘类型 | 每个虚拟机的磁盘数量上限 (包括启动磁盘) | 
|---|---|---|
| v6e | Hyperdisk Balanced Hyperdisk ML | 32 | 
| v5p | 平衡永久性磁盘 | 128 | 
| v5e | 平衡永久性磁盘 | 128 | 
| v4 | 平衡永久性磁盘 | 128 | 
| v3 | 平衡永久性磁盘 | 128 | 
| v2 | 平衡永久性磁盘 | 128 | 
访问模式
您可以将挂接到 TPU 的磁盘配置为单写入者模式或只读模式,如下表所示:
| 访问模式 | 说明 | Compute Engine API 中的值 | Cloud TPU API 中的价值 | 支持的磁盘类型 | 
|---|---|---|---|---|
| 单写入者模式 | 这是默认的访问模式。允许磁盘在任何时间最多挂接到一个实例。实例具有磁盘的读写权限。 | READ_WRITE_SINGLE | read-write | 
 | 
| 只读模式 | 以只读模式同时挂接到多个实例。实例无法将数据写入此模式下的磁盘。此模式对于只读共享是必需的。 | READ_ONLY_MANY | read-only | 
 | 
您可以将挂接到单主机 TPU(例如 v6e-8、v5p-8 或 v5litepod-8)的磁盘配置为单写入者模式或只读模式。
将磁盘挂接到多主机 TPU 时,该磁盘会挂接到该 TPU 中的每个虚拟机。为了防止两个或多个 TPU 虚拟机同时写入磁盘,您必须将挂接到多主机 TPU 的所有磁盘都配置为只读。只读磁盘可用于存储在 TPU 切片上处理的数据集。
前提条件
在按照以下过程操作之前,您需要先设置 Google Cloud 账号和项目。如需了解详情,请参阅设置 Cloud TPU 环境。
创建磁盘
使用以下命令创建磁盘:
$ gcloud compute disks create DISK_NAME \ --size DISK_SIZE \ --zone ZONE \ --type DISK_TYPE
命令标志说明
对于 Hyperdisk,您可以选择使用以下值之一指定 --access-mode 标志:
- READ_WRITE_SINGLE:从一个实例进行读写访问。这是默认值。
- READ_ONLY_MANY:(仅限 Hyperdisk ML)从多个实例同时进行只读访问。
如需详细了解如何创建磁盘,请参阅创建新的 Hyperdisk 卷和创建新的永久性磁盘卷。
挂接磁盘
您可以在创建 TPU 虚拟机时将磁盘卷挂接到 TPU 虚拟机,也可以在创建 TPU 虚拟机后挂接一个磁盘卷。
在创建 TPU 虚拟机时挂接磁盘
在创建 TPU 虚拟机时,使用 --data-disk 标志挂接磁盘卷。
如果您要创建多主机 TPU,则必须指定 mode=read-only(仅限 Hyperdisk ML 和平衡永久性磁盘)。如果您要创建单主机 TPU,可以指定 mode=read-only(仅限 Hyperdisk ML 和平衡永久性磁盘)或 mode=read-write。如需了解详情,请参阅访问模式。
以下示例展示了如何在使用已排队的资源创建 TPU 虚拟机时挂接磁盘卷:
$ gcloud compute tpus queued-resources create QR_NAME \ --node-id=TPU_NAME --project PROJECT_ID \ --zone=ZONE \ --accelerator-type=ACCELERATOR_TYPE \ --runtime-version=TPU_SOFTWARE_VERSION \ --data-disk source=projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME,mode=MODE
命令标志说明
- QR_NAME
- 已排队的资源请求的名称。
- TPU_NAME
- 新 TPU 的名称。
- PROJECT_ID
- 要在其中创建 TPU 的 Google Cloud 项目的 ID。
- ZONE
- 要在其中创建 Cloud TPU 的可用区的名称。
- ACCELERATOR_TYPE
- 加速器类型用于指定您要创建的 Cloud TPU 的版本和大小。如需详细了解每个 TPU 版本支持的加速器类型,请参阅 TPU 版本。
- TPU_SOFTWARE_VERSION
- TPU 软件版本。
- DISK_NAME
- 要挂接到 TPU 虚拟机的磁盘的名称。
- MODE
- 磁盘的模式。模式必须是以下值之一:read-only或read-write。如果未指定,则默认模式为read-write。如需了解详情,请参阅访问模式。
您还可以在使用 gcloud compute tpus tpu-vm create 命令创建 TPU 虚拟机时挂接磁盘:
$ gcloud compute tpus tpu-vm create TPU_NAME \ --project PROJECT_ID \ --zone=ZONE \ --accelerator-type=ACCELERATOR_TYPE \ --version=TPU_SOFTWARE_VERSION \ --data-disk source=projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME,mode=MODE
命令标志说明
- TPU_NAME
- 新 TPU 的名称。
- PROJECT_ID
- 要在其中创建 TPU 的 Google Cloud 项目的 ID。
- ZONE
- 要在其中创建 Cloud TPU 的可用区的名称。
- ACCELERATOR_TYPE
- 加速器类型用于指定您要创建的 Cloud TPU 的版本和大小。如需详细了解每个 TPU 版本支持的加速器类型,请参阅 TPU 版本。
- TPU_SOFTWARE_VERSION
- TPU 软件版本。
- DISK_NAME
- 要挂接到 TPU 虚拟机的磁盘的名称。
- MODE
- 磁盘的模式。模式必须是以下值之一:read-only或read-write。如果未指定,则默认模式为read-write。如需了解详情,请参阅访问模式。
将磁盘挂接到现有 TPU 虚拟机
使用 gcloud alpha compute tpus tpu-vm
attach-disk 命令将磁盘挂接到现有 TPU 虚拟机。
$ gcloud alpha compute tpus tpu-vm attach-disk TPU_NAME \ --zone=ZONE \ --disk=DISK_NAME \ --mode=MODE
命令标志说明
如果您的虚拟机因任何原因而关停,您可能需要在重启虚拟机后装载磁盘。如需了解如何使磁盘在虚拟机重启时自动装载,请参阅配置系统重启时的自动装载。
如需详细了解如何自动删除磁盘,请参阅修改Hyperdisk 和修改永久性磁盘。
格式化并装载磁盘
如果您将新的空白磁盘挂接到 TPU 虚拟机,则必须先格式化并装载磁盘,然后才能使用磁盘。如果挂接的磁盘已包含数据,则必须先装载该磁盘,然后才能使用它。
如需详细了解如何格式化和装载非启动磁盘,请参阅在 Linux 虚拟机上格式化和装载非启动磁盘。
- 使用 SSH 连接到 TPU 虚拟机: - $ gcloud compute tpus tpu-vm ssh TPU_NAME --zone ZONE - 如果您使用的是多主机 TPU,此命令会将您连接到 TPU 切片中的第一个 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 - 在此示例中, - sda是启动磁盘,- sdb是新挂接的磁盘的名称。所挂接磁盘的名称取决于挂接到虚拟机的磁盘数量。- 使用多主机 TPU 时,您需要在 TPU 切片中的所有 TPU 虚拟机上装载磁盘。所有 TPU 虚拟机的磁盘名称应相同,但不能保证这一点。例如,如果您先分离再重新挂接磁盘,设备名称会递增,从 - sdb更改为- sdc。
- 如果磁盘尚未格式化,请使用 - mkfs工具格式化挂接的磁盘。如果磁盘具有不同的设备名称,请替换 sdb。如果您想使用不同的文件系统,请替换 ext4。- (vm)$ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb 
- 创建一个用于装载 TPU 上的磁盘的目录。 - 如果您使用的是单主机 TPU,请从 TPU 运行以下命令来创建用于装载磁盘的目录: - (vm)$ sudo mkdir -p /mnt/disks/MOUNT_DIR - 将 MOUNT_DIR 替换为用于装载磁盘的目录。 - 如果您使用的是多主机 TPU,请在 TPU 虚拟机外部运行以下命令。此命令会在 TPU 切片中的所有 TPU 虚拟机上创建该目录。 - (vm)$ gcloud compute tpus tpu-vm ssh TPU_NAME --worker=all --command="sudo mkdir -p /mnt/disks/MOUNT_DIR" 
- 使用 - mount工具将磁盘装载到 TPU 上。- 如果您使用的是单主机 TPU,请运行以下命令以在 TPU 虚拟机上装载磁盘: - (vm)$ sudo mount -o discard,defaults /dev/sdb /mnt/disks/MOUNT_DIR - 如果您使用的是多主机 TPU,请在 TPU 虚拟机外部运行以下命令。该命令会在 TPU 切片中的所有 TPU 虚拟机上装载磁盘。 - (vm)$ gcloud compute tpus tpu-vm ssh TPU_NAME --worker=all --command="sudo mount -o discard,defaults /dev/sdb /mnt/disks/MOUNT_DIR" 
- 配置对磁盘的读写权限。例如,以下命令会为所有用户授予对磁盘的写入权限。 - (vm)$ sudo chmod a+w /mnt/disks/MOUNT_DIR 
卸载磁盘
如需从 TPU 虚拟机卸载(分离)磁盘,请运行以下命令:
$ gcloud alpha compute tpus tpu-vm detach-disk TPU_NAME \ --zone=ZONE \ --disk=DISK_NAME
命令标志说明
- TPU_NAME
- TPU 的名称。
- ZONE
- Cloud TPU 所在的可用区。
- DISK_NAME
- 要从 TPU 虚拟机分离的磁盘的名称。
清理
使用完 Cloud TPU 和 Compute Engine 资源后,请将其删除。
- 断开与 Cloud TPU 的连接(如果您尚未这样做): - (vm)$ exit - 您的提示符现在应为 - username@projectname,表明您位于 Cloud Shell 中。
- 删除您的 Cloud TPU: - $ gcloud compute tpus tpu-vm delete TPU_NAME \ --zone=ZONE 
- 验证 Cloud TPU 是否已删除。删除操作可能需要几分钟时间才能完成。 - $ gcloud compute tpus tpu-vm list --zone=ZONE 
- 通过列出您在其中创建磁盘的可用区中的所有磁盘,验证磁盘在 TPU 虚拟机删除时是否已自动删除: - $ gcloud compute disks list --filter="zone:( ZONE )" - 如果磁盘在 TPU 虚拟机删除时未删除,请使用以下命令将其删除: - $ gcloud compute disks delete DISK_NAME \ --zone ZONE