将持久性块存储空间挂接到 TPU 虚拟机
TPU 虚拟机包含一个 100 GiB 的启动磁盘。在某些情况下,您的 TPU 虚拟机可能需要额外的存储空间来进行训练或预处理。您可以添加 Google Cloud Hyperdisk 或 Persistent Disk 卷来扩展本地磁盘容量。
为了获得最高性能和高级功能,Google 建议您使用 Hyperdisk(如果您的 TPU 支持)。否则,请使用 Persistent Disk。如需详细了解 Compute Engine 中的块存储选项,请参阅选择磁盘类型。
为 Hyperdisk 和 Persistent Disk 提供 TPU 支持
下表显示了每个 TPU 版本支持的磁盘类型:
TPU 版本 | 支持的磁盘类型 |
---|---|
v6e | Hyperdisk Balanced Hyperdisk ML |
v5p | 平衡永久性磁盘 |
v5e | 平衡永久性磁盘 |
v4 | 平衡永久性磁盘 |
v3 | 平衡永久性磁盘 |
v2 | 平衡永久性磁盘 |
访问模式
您可以将挂接到 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 卷和创建新的 Persistent Disk 卷。
挂接磁盘
您可以在创建 TPU 虚拟机时将磁盘卷挂接到 TPU 虚拟机,也可以在创建 TPU 虚拟机后挂接磁盘卷。
在创建 TPU 虚拟机时挂接磁盘
创建 TPU 虚拟机时,请使用 --data-disk
标志挂接磁盘卷。
如果您要创建多主机 TPU,则必须指定 mode=read-only
(仅限 Hyperdisk ML 和 Balanced 永久性磁盘)。如果您要创建单主机 TPU,可以指定 mode=read-only
(仅限 Hyperdisk ML 和平衡 Persistent Disk)或 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