耐久性のあるブロック ストレージを 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
  • Hyperdisk Balanced
  • Hyperdisk ML
  • バランス永続ディスク
読み取り専用モード 読み取り専用モードでの複数のインスタンスへの同時アタッチを有効にします。このモードでは、インスタンスはディスクに書き込むことはできません。読み取り専用の共有の場合に必要です。 READ_ONLY_MANY read-only
  • Hyperdisk Balanced
  • バランス永続ディスク

単一ホストの 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

コマンドフラグの説明

DISK_NAME
新しいディスクの名前
DISK_SIZE
新しいディスクのサイズ。この値は整数で、その後に GB(ギビバイト)または TB(テビバイト)のサイズ単位が続きます。サイズの単位が指定されていない場合、GB が使用されます。
ZONE
新しいディスクを作成するゾーンの名前。これは、TPU の作成に使用されるゾーンと同じである必要があります。
DISK_TYPE
ディスクのタイプhyperdisk-balancedhyperdisk-mlpd-balanced のいずれかの値を使用します。

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

コマンドフラグの説明

TPU_NAME
: TPU の名前。
ZONE
Cloud TPU が配置されているゾーン
DISK_NAME
TPU VM にアタッチするディスクの名前。
MODE
ディスクのモード。モードは read-only または read-write のいずれかにする必要があります。指定しない場合、デフォルトのモードは read-write です。これは、ディスクのアクセスモードに対応している必要があります。

なんらかの理由で VM がシャットダウンした場合は、VM を再起動した後にディスクをマウントする必要があります。VM の再起動時にディスクが自動的にマウントされるようにする方法については、システムの再起動時に自動マウントを構成するをご覧ください。

ディスクの自動削除の詳細については、Hyperdisk を変更するPersistent Disk を変更するをご覧ください。

ディスクをフォーマットしてマウントする

新しい空のディスクを TPU VM にアタッチした場合は、使用する前にディスクをフォーマットしてマウントする必要があります。すでにデータが含まれているディスクをアタッチした場合は、ディスクを使用する前にマウントする必要があります。

非ブートディスクのフォーマットとマウントの詳細については、Linux VM で非ブートディスクをフォーマットしてマウントするをご覧ください。

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

    $ gcloud compute tpus tpu-vm ssh TPU_NAME --zone ZONE

    マルチホスト TPU を使用している場合、このコマンドにより TPU スライスの最初の 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
    

    この例では、sda はブートディスク、sdb は新しくアタッチされたディスクの名前です。アタッチされるディスクの名前は、VM にアタッチされているディスクの数によって異なります。

    マルチホスト TPU を使用する場合は、TPU スライス内のすべての TPU VM にディスクをマウントする必要があります。ディスクの名前はすべての TPU VM で同じであるはずですが、必ずしもそうとは限りません。たとえば、ディスクのアタッチを解除してから再アタッチすると、デバイス名は増分され、sdb から sdc に変更されます。

  3. ディスクがフォーマットされていない場合は、mkfs ツールを使用して、アタッチされたディスクをフォーマットします。ディスクのデバイス名が異なる場合は、sdb を置き換えます。別のファイル システムを使用する場合は、ext4 を置き換えます。

    (vm)$ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
  4. 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"
  5. 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"
  6. ディスクに読み取り権限と書き込み権限を構成します。たとえば、次のコマンドは、すべてのユーザーにディスクへの書き込みアクセス権を付与します。

    (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 リソースを削除します。

  1. Cloud TPU との接続を切断していない場合は切断します。

    (vm)$ exit

    プロンプトが username@projectname に変わります。これは、現在、Cloud Shell 内にいることを示しています。

  2. Cloud TPU を削除します。

    $ gcloud compute tpus tpu-vm delete TPU_NAME \
        --zone=ZONE
  3. Cloud TPU が削除されたことを確認します。削除には数分かかることがあります。

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

    $ gcloud compute disks list --filter="zone:( ZONE )"

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

    $ gcloud compute disks delete DISK_NAME \
        --zone ZONE