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 環境を設定するの手順に沿って設定します。
手順の概要
Persistent Disk を設定する手順の概要は次のとおりです。
- Persistent Disk を作成する
- Persistent Disk を TPU VM にアタッチする
- Persistent Disk をマウントする
- 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-standard
、pd-ssd
、pd-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 ファイル システム内の場所を指定します。
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 とも呼ばれます)に接続されます。
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
に変更されます。ディスクがフォーマットされていない場合は、今すぐアタッチされた Persistent Disk をフォーマットしてください。
(vm)$ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
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"
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"
クリーンアップ
使用が完了したら 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 VM リソースは表示されません。$ gcloud compute tpus tpu-vm list --zone=zone
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