将永久性磁盘添加到 TPU 虚拟机

本文档介绍如何设置永久性磁盘并将其挂接到 TPU 虚拟机。

概览

TPU 虚拟机包含一个 100GB 的启动磁盘。对于某些数据集,您可能需要更多本地存储进行训练或预处理。如需训练这些模型,您可以添加永久性磁盘来扩展本地磁盘容量。

您可以在创建 TPU 虚拟机时将永久性磁盘添加到 TPU 虚拟机,也可以在创建 TPU 虚拟机后添加永久性磁盘。

前提条件

在按照以下步骤操作之前,您需要先设置 GCP 帐号和项目。如果您尚未设置 Cloud TPU 项目,请先按照设置帐号和 Cloud TPU 项目中的步骤操作,然后再继续。

简要步骤

使用 TPU 虚拟机设置永久性磁盘的简要步骤如下:

  1. 创建永久性磁盘
  2. 使用永久性磁盘启动 TPU 虚拟机将永久性磁盘添加到现有 TPU 虚拟机
  3. 通过 SSH 连接到 TPU 虚拟机
  4. 列出挂接的磁盘
  5. 设置挂接的永久性磁盘的格式
  6. 创建用于装载永久性磁盘的目录
  7. 装载永久性磁盘
  8. 为永久性磁盘设置权限
  9. 清理 TPU 虚拟机和永久性磁盘资源

设置 TPU 虚拟机和永久性磁盘

  1. 在 Cloud Shell 中,创建一个永久性磁盘:

    $ gcloud compute disks create disk-name \
    --size disk-size  \
    --zone zone \
    --type pd-balanced
    

    命令标志说明

    disk-name
    您为永久性磁盘选择的名称。
    disk-size
    永久性磁盘的大小(以 GB 为单位)。
    zone
    要在其中创建永久性磁盘的可用区。该可用区必须是用于创建 TPU 的可用区。
    type
    要添加的磁盘类型。支持的类型包括“pd-standard”、“pd-ssd”或“pd-balanced”。
  2. 启动挂接了永久性磁盘的 TPU 虚拟机,或向现有 TPU 虚拟机添加永久性磁盘。

    $ 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 虚拟机的永久性磁盘的名称和读/写模式。
    1. 使用以下命令将永久性磁盘添加到现有 TPU 虚拟机。如需了解详情和示例,请参阅 gcloud 文档。

      $ gcloud 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
      磁盘的模式。模式必须是 read-onlyread-write 之一。

  3. 通过 SSH 连接到 TPU 虚拟机

    $ gcloud compute tpus tpu-vm ssh tpu-name --zone zone
    
  4. 从 TPU 虚拟机中,列出挂接到 TPU 虚拟机的磁盘:

    (vm)$ sudo 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 是该虚拟机的启动磁盘。挂接的永久性磁盘的名称取决于挂接到该虚拟机的永久性磁盘的数量。

  5. 格式化挂接的永久性磁盘:

    (vm)$ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
    
  6. 创建用于装载永久性磁盘的目录:

    (vm)$ sudo mkdir -p /mnt/disks/persist
    
  7. 装载永久性磁盘:

    (vm)$ sudo mount -o discard,defaults /dev/sdb /mnt/disks/persist
  8. 为永久性磁盘设置权限:

    (vm)$ sudo chmod a+w /mnt/disks/persist
    
  9. 如果要在删除 TPU 虚拟机时删除永久性磁盘,您需要使用以下命令设置永久性磁盘的自动删除状态:

    $ gcloud alpha 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
    您的永久性磁盘的名称。

    如果您不希望自动删除永久性磁盘,请跳过此命令。您可以随时使用清理命令中显示的命令手动移除永久性磁盘。

如果您的虚拟机因任何原因关闭,则永久性磁盘可能会断开连接。请参阅在系统重启时配置自动装载,以使您的永久性磁盘在虚拟机重启时自动装载。如需了解详情,请参阅修改永久性磁盘

清理

  1. 断开与 Compute Engine 实例的连接(如果您尚未这样做):

    (vm)$ exit
    

    您的提示符现在应为 username@projectname,表明您位于 Cloud Shell 中。

  2. 删除您的 Cloud TPU 和 Compute Engine 资源。

    $ gcloud compute tpus tpu-vm delete tpu-name \
     --zone=zone
    
  3. 通过运行 gcloud list 验证资源是否已删除。删除操作可能需要几分钟时间才能完成。gcloud list 的输出不应显示此过程创建的任何 TPU 虚拟机资源。

    TPU 虚拟机

    $ gcloud compute tpus tpu-vm list --zone=zone
    

    TPU 节点

    $ gcloud compute tpus execution-groups list --zone zone
    
  4. 通过列出您创建永久性磁盘的可用区中的所有磁盘,验证永久性磁盘在 TPU 虚拟机删除时是否已自动删除:

    $ gcloud compute disks list --filter="zone:( us-central1-b )"
    

    如果永久性磁盘在 TPU 虚拟机删除时未删除,请使用以下命令将其删除:

    $ gcloud compute disks delete disk-name \
    --zone zone