耐久性のあるブロック ストレージを TPU VM にアタッチする
TPU VM には 100 GiB のブートディスクが含まれています。シナリオによっては、TPU VM でトレーニングまたは前処理用に追加のストレージが必要になる場合があります。Google Cloud Hyperdisk ボリュームまたは Persistent Disk ボリュームを追加して、ローカル ディスクの容量を拡張できます。
最高のパフォーマンスと高度な機能を実現するには、TPU で使用可能であれば、Hyperdisk を使用することをおすすめします。それ以外の場合は、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 の値 | サポートされているディスクタイプ |
---|---|---|---|---|
シングルライター モード | これがデフォルトのアクセスモードです。ディスクを一度に最大 1 つのインスタンスにアタッチできます。インスタンスにはディスクに対する読み取り / 書き込みアクセス権があります。 | READ_WRITE_SINGLE |
read-write |
|
読み取り専用モード | 読み取り専用モードでの複数のインスタンスへの同時アタッチを有効にします。このモードでは、インスタンスはディスクに書き込むことはできません。読み取り専用の共有の場合に必要です。 | READ_ONLY_MANY |
read-only |
|
単一ホストの TPU(v6e-8、v5p-8、v5litepod-8 など)にアタッチされているディスクは、シングルライター モードまたは読み取り専用モードで構成できます。
ディスクをマルチホスト TPU にアタッチすると、ディスクはその TPU 内の各 VM にアタッチされます。2 つ以上の TPU VM が同時にディスクに書き込まないようにするには、マルチホスト 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
: 1 つのインスタンスからの読み取り / 書き込みアクセス。これがデフォルトです。READ_ONLY_MANY
(Hyperdisk ML のみ): 複数のインスタンスの同時読み取り専用アクセス。
ディスクの作成の詳細については、新しい Hyperdisk ボリュームを作成すると新しい Persistent Disk ボリュームを作成するをご覧ください。
ディスクをアタッチする
ディスク ボリュームは、TPU VM の作成時に TPU VM にアタッチできます。また、TPU VM の作成後にアタッチすることもできます。
TPU VM の作成時にディスクをアタッチする
TPU VM の作成時にディスク ボリュームをアタッチするには、--data-disk
フラグを使用します。
マルチホスト TPU を作成する場合は、mode=read-only
を指定する必要があります(Hyperdisk ML と Balanced Persistent Disk のみ)。単一ホスト TPU を作成する場合は、mode=read-only
(Hyperdisk ML と Balanced Persistent Disk のみ)または mode=read-write
を指定できます。詳細については、アクセスモードをご覧ください。
次の例は、キューに格納されたリソースを使用して TPU VM を作成するときにディスク ボリュームをアタッチする方法を示しています。
$ 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 VM にアタッチするディスクの名前。
MODE
- ディスクのモード。モードは
read-only
またはread-write
のいずれかにする必要があります。指定しない場合、デフォルトのモードはread-write
です。詳細については、アクセスモードをご覧ください。
gcloud compute tpus tpu-vm create
コマンドを使用して TPU VM を作成するときにディスクをアタッチすることもできます。
$ 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 VM にアタッチするディスクの名前。
MODE
- ディスクのモード。モードは
read-only
またはread-write
のいずれかにする必要があります。指定しない場合、デフォルトのモードはread-write
です。詳細については、アクセスモードをご覧ください。
既存の TPU VM にディスクをアタッチする
gcloud alpha compute tpus tpu-vm
attach-disk
コマンドを使用して、ディスクを既存の TPU VM にアタッチします。
$ gcloud alpha compute tpus tpu-vm attach-disk TPU_NAME \ --zone=ZONE \ --disk=DISK_NAME \ --mode=MODE
コマンドフラグの説明
なんらかの理由で VM がシャットダウンした場合は、VM を再起動した後にディスクをマウントする必要があります。VM の再起動時にディスクが自動的にマウントされるようにする方法については、システムの再起動時に自動マウントを構成するをご覧ください。
ディスクの自動削除の詳細については、Hyperdisk を変更すると Persistent Disk を変更するをご覧ください。
ディスクをフォーマットしてマウントする
新しい空のディスクを TPU VM にアタッチした場合は、使用する前にディスクをフォーマットしてマウントする必要があります。すでにデータが含まれているディスクをアタッチした場合は、ディスクを使用する前にマウントする必要があります。
非ブートディスクのフォーマットとマウントの詳細については、Linux VM で非ブートディスクをフォーマットしてマウントするをご覧ください。
SSH を使用して TPU VM に接続します。
$ gcloud compute tpus tpu-vm ssh TPU_NAME --zone ZONE
マルチホスト TPU を使用している場合、このコマンドにより TPU スライスの最初の 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
この例では、
sda
はブートディスク、sdb
は新しくアタッチされたディスクの名前です。アタッチされるディスクの名前は、VM にアタッチされているディスクの数によって異なります。マルチホスト TPU を使用する場合は、TPU スライス内のすべての TPU VM にディスクをマウントする必要があります。ディスクの名前はすべての TPU VM で同じであるはずですが、必ずしもそうとは限りません。たとえば、ディスクのアタッチを解除してから再アタッチすると、デバイス名は増分され、
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 VM の外部で次のコマンドを実行します。このコマンドを実行すると、TPU スライスのすべての TPU VM にディレクトリが作成されます。
(vm)$ gcloud compute tpus tpu-vm ssh TPU_NAME --worker=all --command="sudo mkdir -p /mnt/disks/MOUNT_DIR"
mount
ツールを使用して、ディスクを TPU にマウントします。単一ホストの TPU を使用している場合は、次のコマンドを実行して TPU VM にディスクをマウントします。
(vm)$ sudo mount -o discard,defaults /dev/sdb /mnt/disks/MOUNT_DIR
マルチホスト TPU を使用している場合は、TPU VM の外部で次のコマンドを実行します。これにより、TPU スライスのすべての TPU VM にディスクがマウントされます。
(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 VM からディスクをマウント解除(切断)するには、次のコマンドを実行します。
$ 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 から切断するディスクの名前。
クリーンアップ
使用が終了したら、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 VM の削除時にディスクが自動的に削除されたことを確認します。
$ gcloud compute disks list --filter="zone:( ZONE )"
TPU VM の削除時にディスクが削除されていない場合は、次のコマンドを使用して削除します。
$ gcloud compute disks delete DISK_NAME \ --zone ZONE