Persistent Disk を TPU VM に追加する

TPU VM には 100 GB のブートディスクが含まれています。シナリオによっては、TPU VM でトレーニングまたは前処理に追加のストレージが必要になる場合があります。Persistent Disk を追加してローカル ディスクの容量を増やすことができます。

概要

単一デバイスの TPU(v2-8、v3-8、v4-8 など)にアタッチされている Persistent Disk は、read-write または read-only として構成できます。Persistent Disk を TPU Pod の一部である TPU VM にアタッチすると、ディスクはその Pod 内の各 TPU VM にアタッチされます。1 つの Pod から 2 つ以上の TPU VM が同時に Persistent Disk に書き込まないようにするには、Pod 内の TPU VM にアタッチされているすべての Persistent Disk を read-only として構成する必要があります。read-only ディスクは、TPU Pod で処理するためのデータセットを保存する際に活用できます。

Persistent Disk を作成して TPU VM にアタッチしたら、Persistent Disk をマウントし、Persistent Disk にアクセスできるファイル システム内の場所を指定する必要があります。詳細については、ディスクのマウントをご覧ください。

前提条件

次の手順を使用する前に、Google Cloud アカウントとプロジェクトを設定しておく必要があります。Cloud TPU プロジェクトをまだ設定していない場合は、続行する前に Cloud TPU 環境を設定するの手順に沿って設定します。

手順の概要

永続ディスクを設定する手順の概要は次のとおりです。

  1. Persistent Disk を作成する
  2. Persistent Disk を TPU VM にアタッチする
  3. Persistent Disk をマウントする
  4. TPU VM と Persistent Disk のリソースをクリーンアップする

TPU VM と Persistent Disk の設定

TPU VM の作成時に、Persistent Disk を TPU VM にアタッチできます。Persistent Disk を既存の TPU VM にアタッチすることもできます。

Persistent Disk を作成する

Persistent Disk を作成するには、次のコマンドを使用します。

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

コマンドフラグの説明

disk-name
Persistent Disk に選択した名前。
disk-size
Persistent Disk のサイズ(GB)。
zone
Persistent Disk を作成するゾーン。これは、TPU の作成に使用されるゾーンと同じゾーンである必要があります。
type
追加するディスクタイプ。サポートされているタイプは pd-standardpd-ssdpd-balanced です。

Persistent Disk をアタッチする

Persistent Disk は、TPU VM の作成時に TPU VM にアタッチできます。また、TPU VM の作成後に追加することもできます。

TPU VM の作成時に Persistent Disk をアタッチする

TPU VM を作成するときに、--data-disk フラグを使用して Persistent Disk をアタッチします。TPU Pod を作成する場合は、mode=read-only を指定する必要があります。単一の TPU デバイスを作成する場合は、mode=read-only または mode=read-write を指定できます。次のコマンドは、1 つの 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

コマンドフラグの説明

tpu-name
TPU リソースに選択した名前。
project
プロジェクト ID。
zone
Cloud TPU を作成するゾーン
accelerator-type
アクセラレータ タイプでは、作成する Cloud TPU のバージョンとサイズを指定します。TPU のバージョンごとにサポートされているアクセラレータ タイプの詳細については、TPU のバージョンをご覧ください。
version
フレームワークの TPU VM イメージ
data-disk
TPU VM にアタッチする Persistent Disk の名前と読み取り / 書き込みモード。

既存の TPU VM に Persistent Disk をアタッチする

gcloud alpha compute tpus tpu-vm attach-disk コマンドを使用して、Persistent Disk を既存の TPU VM にアタッチします。詳細と例については、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 VM にアタッチする Persistent Disk の名前。
mode
ディスクのモード。モードは read-only または read-write のいずれかにする必要があります。

TPU VM の削除時に Persistent Disk を削除するには、次のコマンドを使用して Persistent Disk の自動削除状態を設定する必要があります。

$ gcloud compute instances set-disk-auto-delete vm-instance \
  --zone=zone \
  --auto-delete \
  --disk=disk-name

コマンドフラグの説明

vm-instance
TPU VM に SSH 接続すると、シェル プロンプトが変更され、ユーザー ID の後に生成された VM インスタンス名が続きます(例:pjohnston@t1v-n-...$)。vm-instance を生成された VM インスタンス名に置き換えます。
zone
Persistent Disk が配置されているゾーン
auto-delete
TPU リソースが削除されると、Persistent Disk が自動的に削除されます。
disk-name
Persistent Disk の名前。

なんらかの理由で VM がシャットダウンすると、Persistent Disk が切断される場合があります。VM の再起動時に Persistent Disk が自動的にマウントされるようにするには、システムの再起動時に自動マウントを構成するをご覧ください。

Persistent Disk の自動削除について詳しくは、Persistent Disk を変更するをご覧ください。

Persistent Disk をマウントする

TPU VM から Persistent Disk にアクセスするには、ディスクをマウントする必要があります。これにより、Persistent Disk にアクセスできる TPU VM ファイル システム内の場所を指定します。

  1. SSH を使用して TPU VM に接続します。

    $ gcloud compute tpus tpu-vm ssh tpu-name --zone zone

    TPU Pod を使用する場合、Pod 内の TPU ごとに 1 つの TPU VM があります。前述のコマンドは、TPU デバイスと TPU Pod の両方に対して機能します。TPU Pod を使用している場合、このコマンドにより Pod の最初の TPU(ワーカー 0 とも呼ばれます)に接続されます。

  2. TPU VM から、TPU VM に接続されているディスクを一覧表示します。

    (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 の名前は、VM にアタッチされている Persistent Disk の数によって異なります。

    TPU Pod を使用する場合は、Pod 内のすべての TPU VM に Persistent Disk をマウントする必要があります。Persistent Disk の名前はすべての TPU VM で同じであるはずですが、保証されているわけではありません。たとえば、Persistent Disk のアタッチを解除して、再アタッチすると、デバイス名は増分され、sdb から sdc に変更されます。

  3. ディスクがフォーマットされていない場合は、今すぐアタッチされた Persistent Disk をフォーマットしてください。

    (vm)$ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
  4. Persistent Disk をマウントするディレクトリを作成します。

    TPU デバイスを使用している場合は、次のコマンドを実行して、Persistent Disk をマウントするディレクトリを作成します。

    (vm)$ sudo mkdir -p /mnt/disks/persist

    TPU Pod を使用している場合は、TPU VM の外部で次のコマンドを実行します。これにより、Pod 内のすべての TPU VM にディレクトリが作成されます。

    (vm)$ gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all --command="sudo mkdir -p /mnt/disks/persist"
  5. Persistent Disk をマウントします。

    TPU デバイスを使用している場合は、次のコマンドを実行して、TPU VM に Persistent Disk をマウントします。

    (vm)$ sudo mount -o discard,defaults /dev/sdb /mnt/disks/persist

    TPU Pod を使用している場合は、TPU VM の外部で次のコマンドを実行します。Pod 内のすべての TPU VM に 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 VM から接続を解除する Persistent Disk の名前。

クリーンアップ

使用が完了したら TPU リソースを削除します。

  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 VM リソースは表示されません。

    $ gcloud compute tpus tpu-vm list --zone=zone
  4. Persistent Disk を作成したゾーン内のすべてのディスクを一覧表示して、TPU VM の削除時に Persistent Disk が自動的に削除されたことを確認します。

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

    TPU VM の削除時に Persistent Disk が削除されていない場合は、次のコマンドを使用して削除します。

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