Storage

Gemini Enterprise Agent Platform トレーニング クラスタに関心をお持ちの場合は、営業担当者にお問い合わせください。

適切なストレージ構成を選択することは、トレーニング クラスタのパフォーマンスと安定性にとって重要です。このサービスは、以下の 2 つの異なる高性能ストレージ ソリューションと統合されています。

  • Filestore: クラスタ内のすべてのノードに共有 /home ディレクトリを提供する必須のマネージド ファイル サービス。
  • Google Cloud Managed Lustre: 大規模なデータセットのトレーニングに最適な、極端な I/O パフォーマンス向けに設計されたオプションの並列ファイル システム。記録システムではなく、高パフォーマンスの作業用ストレージとして扱い、Cloud Storage を信頼できる情報源として維持します。詳細については、Managed Lustre データを Cloud Storage にバックアップするをご覧ください。

このページでは、主な用途の概要と、クラスタとのインテグレーションを成功させるためのネットワーキングとデプロイの具体的な要件について説明します。

トレーニング クラスタのストレージ統合

Gemini Enterprise Agent Platform トレーニング クラスタは、特定のネットワーク ストレージ ソリューションに依存しています。Filestore は、クラスタの共有 /home ディレクトリを提供するために必要です。一方、Managed Lustre は、要求の厳しいワークロード向けのオプションの高パフォーマンス ファイル システムです。

クラスタをデプロイする前に、これらのストレージ サービスのネットワーキングを正しく構成することが重要です。

ホーム ディレクトリ用の Filestore

このサービスは、Filestore インスタンスを使用して、クラスタの共有 /home ディレクトリを提供します。接続を適切に行うには、次の順序でクラウド リソースを作成する必要があります。

  1. VPC ネットワークを作成する: まず、推奨される MTU(8896 など)で構成された VPC ネットワークをデプロイします。
  2. Filestore インスタンスを作成する: 次に、作成した VPC に Filestore インスタンスをデプロイします。
  3. トレーニング クラスタを作成する: 最後に、クラスタをデプロイします。これにより、同じネットワーク内の Filestore インスタンスに接続できるようになります。

高性能ワークロード用の Google Cloud Managed Lustre

最大 I/O パフォーマンスを必要とするワークロードには、Managed Lustre ファイル システムを接続できます。このサービスは、プライベート サービス アクセスを使用して VPC に接続します。

Managed Lustre は、耐久性ではなくスループットに対して最適化されています。インスタンスはゾーン限定であり、スナップショット、バックアップ、削除取り消し機能はありません。再生成できないものはすべて Cloud Storage にバックアップします。詳細については、Managed Lustre データを Cloud Storage にバックアップするをご覧ください。

Managed Lustre データを Cloud Storage にバックアップする

Managed Lustre の背後にある信頼できる情報源として Cloud Storage を維持します。これにより、チェックポイントが保護され、インスタンスが失敗または削除された場合に迅速に復元できます。

Managed Lustre には、Cloud Storage に直接エクスポートする高スループットの転送機能が組み込まれています。転送は増分です。各実行では、転送先にまだ存在しないファイル、または前回の転送以降に変更されたファイルのみがコピーされます。

2 つの ID に権限が必要です。エクスポートを開始するユーザーまたはサービス アカウントには、lustre.instances.exportData が必要です。これは、roles/lustre.admin ロールに含まれているか、カスタムロールで付与できます。Managed Lustre サービス エージェントには、宛先バケットに対する書き込みアクセス権が別途必要です。

  1. Managed Lustre サービス エージェントに宛先バケットへの書き込みアクセス権を付与します。この操作が必要なのはバケットごとに 1 回だけです。

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-lustre.s3ns-system.iam.gserviceaccount.com \
      --role=roles/storage.objectUser
    

    ここで

  2. ファイル システムをバケットにエクスポートします。

    gcloud lustre instances export-data INSTANCE_ID \
      --location=ZONE \
      --lustre-path="/" \
      --gcs-path-uri="gs://BUCKET_NAME/INSTANCE_ID/"
    

    ここで

    • INSTANCE_ID は、バックアップする Managed Lustre インスタンスの名前です。
    • ZONE はインスタンスのゾーンです(例: us-central1-a)。

    --gcs-path-uri 値には、バケット単体またはバケット内のパスを指定できます。パスを含める場合は、スラッシュで終わる必要があります。各インスタンスをその名前のパスにエクスポートすると、インスタンスが分離されます。複数の Managed Lustre インスタンスをクラスタに接続する場合は、それぞれに独自のパスを指定します。同じパスにエクスポートする 2 つのインスタンスは、互いのファイルを上書きします。

バックアップを最新の状態に保つには、スケジュールに従ってエクスポートを実行します。たとえば、トレーニング実行の終了時にのみ実行するのではなく、ログインノードで毎日 cron ジョブを実行できます。転送は増分で行われるため、初回以降の実行では変更されたもののみがコピーされます。

バックアップを計画する際は、次の点を考慮してください。

  • 一度に有効にできる転送オペレーションは、インスタンスごとに 1 つだけです。別の転送が実行中に開始された転送は、ABORTED: unable to queue the operation で失敗します。
  • エクスポートでは移行先のオブジェクトが削除されることはないため、Managed Lustre で削除したファイルはバケットに残ります。転送先のバケットでオブジェクトのバージョニングを有効にして、不要なコンテンツで上書きされたファイルも復元できるようにします。
  • シンボリック リンク、空のディレクトリ、lfs setstripe で設定されたストライピング レイアウトは保持されません。ハードリンクは個別のオブジェクトとしてエクスポートされるため、ハードリンクされたファイルはバケット内のリンクごとに 1 回容量を消費します。POSIX UID、GID、モード、mtime は、カスタム オブジェクト メタデータとして保持されます。
  • チェックポイントをアトミックに書き込みます。一時パスに書き込んでから、ファイルをその場所に名前変更します。これにより、書き込み中に実行されるエクスポートで、前のファイルまたは完全な新しいファイルのいずれかがキャプチャされ、部分的なファイルがキャプチャされることはありません。

復元するには、新しい Managed Lustre インスタンスを作成し、gcloud lustre instances import-data を使用してデータを読み込みます。詳細については、Cloud Storage との間でデータを転送するをご覧ください。

ネットワーキングの重大な制限: 推移的ピアリングがない

Filestore と Google Cloud Managed Lustre の両方で重要な制限事項は、推移的ピアリングをサポートしていないことです。つまり、直接接続された VPC 内のリソースのみがストレージ サービスにアクセスできます。たとえば、クラスタの VPC(N1)がストレージ サービスとピアリングされている場合、N1 とピアリングされている別の VPC(N2)はアクセスできません。

トレーニング クラスタのストレージ統合

Gemini Enterprise Agent Platform トレーニング クラスタは、特定のネットワーク ストレージ ソリューションに依存しています。Filestore は、クラスタの共有 /home ディレクトリを提供するために必要です。一方、Google Cloud Managed Lustre は、要求の厳しいワークロード向けのオプションの高パフォーマンス ファイル システムです。クラスタをデプロイする前に、これらのストレージ サービスのネットワーキングを正しく構成することが重要です。

Filestore

トレーニング クラスタでの Filestore の主な用途

Filestore は、必須のホーム ディレクトリとしての役割だけでなく、クラスタとデータを共有する柔軟な方法も提供します。
追加の共有ストレージ: 1 つ以上の追加の Filestore インスタンスを任意のノードプールに接続できます。これは、共有データセット、アプリケーション バイナリ、その他の一般的なファイルをトレーニング ジョブに提供する場合に役立ちます。ノードプール構成で指定すると、トレーニング クラスタはこれらのインスタンスを各ノードの /mnt/filestore ディレクトリに自動的にマウントします。

Filestore の要件

トレーニング クラスタと Filestore インテグレーションを成功させるには、次の構成が必要です。

  • API を有効にする: クラスタを作成する前に、Google Cloud プロジェクトで Filestore API を有効にする必要があります。
  • 必須の /home ディレクトリ: すべてのトレーニング クラスタには、共有 /home ディレクトリとして機能する専用の Filestore インスタンスが必要です。このインスタンスには、特定の構成要件があります。
    • ネットワーク: クラスタのコンピューティング ノードとログインノードと同じ VPC ネットワークに存在する必要があります。
    • ロケーション: クラスタと同じリージョンまたはゾーンに配置する必要があります。
    • 構成: API を介してクラスタを作成するときに、orchestrator_spec.slurm_spec.home_directory_storage フィールドでこのインスタンスの完全なリソース名を指定する必要があります。

Filestore ストレージを構成する

クラスタを作成するゾーンに、ゾーンまたはリージョンの Filestore インスタンスを作成します。Agent Platform API では、/home ディレクトリとして機能する Filestore をクラスタに接続する必要があります。この Filestore は、すべてのコンピューティング ノードとログインノードと同じゾーンまたはリージョンに存在し、同じネットワークに存在する必要があります。次の例では、Filestore デプロイに 172.16.10.0/24 が使用されています。

    SERVICE_TIER=ZONAL # Can use BASIC_SSD

    # Create reserved IP address range
    gcloud compute addresses create CLUSTER_IDfs-ip-range \
        --project=PROJECT_ID \
        --global \
        --purpose=VPC_PEERING \
        --addresses=172.16.10.0 \
        --prefix-length=24 \
        --description="Filestore instance reserved IP range" \
        --network=NETWORK

    # Get the CIDR range
    FS_IP_RANGE=$(
      gcloud compute addresses describe CLUSTER_IDfs-ip-range \
        --global  \
        --format="value[separator=/](address, prefixLength)"
    )

    # Create the Filestore instance
    gcloud filestore instances create FS_INSTANCE_ID \
        --project=PROJECT_ID \
        --location=ZONE \
        --tier=ZONAL \
        --file-share=name="nfsshare",capacity=1024 \
    --network=name=NETWORK,connect-mode=DIRECT_PEERING,reserved-ip-range="${FS_IP_RANGE}"
  

Lustre

Google Cloud Managed Lustre は、AI アプリケーションと HPC アプリケーション向けに最適化された、高パフォーマンスでフルマネージドの並列ファイル システムを提供します。Managed Lustre は、マルチペタバイト規模の容量と最大 1 TBps のスループットにより、要求の厳しいワークロードのクラウドへの移行を容易にします。

Managed Lustre インスタンスは、リージョン内のゾーンに存在します。リージョンとは、リソースを実行できる特定の地理的な場所です。各リージョンは、複数のゾーンに分割されています。たとえば、米国中部の us-central1 リージョンには、ゾーン us-central1-a、us-central1-b、us-central1-c、us-central1-f があります。詳細については、地域とリージョンをご覧ください。

ネットワーク レイテンシを短縮するには、使用する予定の場所に近いリージョンとゾーンに Managed Lustre インスタンスを作成することをおすすめします。

Managed Lustre インスタンスを作成するときは、次のプロパティを定義する必要があります。

  • Google Cloud で使用されるインスタンスの名前。
  • クライアントサイド ツールで使用されるファイル システム名(lfs など)。
  • ストレージ容量(ギビバイト(GiB)単位)。容量は 9,000 GiB~約 8 PiB(7,632,000 GiB)の範囲で指定できます。インスタンスの最大サイズは、パフォーマンス ティアによって異なります。
  • Managed Lustre には、TiB あたり 125 MBps から TiB あたり 1,000 MBps までのパフォーマンス ティアが用意されています。
  • パフォーマンスを最大限に高めるには、トレーニング クラスタと同じゾーンにインスタンスを作成します。
  • このインスタンスの VPC ネットワークは、トレーニング クラスタで使用しているものと同じでなければなりません。

Managed Lustre には 4 つのパフォーマンス ティアがあり、それぞれ TiB あたりの最大スループット速度が異なります。パフォーマンス ティアは、インスタンスの最小サイズと最大サイズ、許容可能な容量値間のステップサイズにも影響します。インスタンスの作成後にパフォーマンス ティアを変更することはできません。

Managed Lustre をデプロイするには、プライベート サービス アクセスが必要です。これにより、専用の /20 サブネットを使用して、トレーニング クラスタの VPC と Managed Lustre をホストする VPC の間に VPC ピアリングが確立されます。

Managed Lustre インスタンスを構成する(省略可)

Model Development Service で Managed Lustre を使用する場合にのみ、Google Cloud Managed Lustre を使用します。

Google Cloud Managed Lustre は、Google Cloud 上のフルマネージドの高パフォーマンス並列ファイル システム サービスです。これは、AI / ML とハイ パフォーマンス コンピューティング(HPC)の要求の厳しいワークロードを高速化するために特別に設計されています。

トレーニング クラスタを使用する際の最適なパフォーマンスを得るには、VPC ピアリングを使用してサービス ネットワーキングに接続し、トレーニング クラスタと同じ VPC とゾーンから Google Cloud Managed Lustre をデプロイする必要があります。

Lustre インスタンスを作成する

    gcloud lustre instances create LUSTRE_INSTANCE_ID \
    --project=PROJECT_ID \
    --location=ZONE \
    --filesystem=lustrefs \
    --per-unit-storage-throughput=500 \
    --capacity-gib=36000 \
    --network=NETWORK_NAME

  

Cloud Storage のマウント

前提条件として、VM サービス アカウントに Storage オブジェクト ユーザー ロールがあることを確認します。

デフォルトのマウント

Gemini Enterprise Agent Platform のトレーニング クラスターは、Cloud Storage FUSE を使用して、Cloud Storage バケットをすべてのログイン ノードとコンピューティング ノードに動的にマウントし、/gcs ディレクトリの下でアクセスできるようにします。動的にマウントされたバケットは、ルート マウント ポイント /gcs から一覧表示できません。動的にマウントされたバケットには、サブディレクトリとしてアクセスできます。

user@testcluster:$ ls /gcs/your-bucket-name
user@testcluster:$ cd /gcs/your-bucket-name

カスタム マウント

カスタム オプションを使用して特定の Cloud Storage バケットをローカル ディレクトリにマウントするには、クラスタの作成時に起動スクリプトの一部として渡すか、クラスタの作成後にノードで直接実行して、次のコマンド構造を使用します。

sudo mkdir -p $MOUNT_DIR
echo "$GCS_BUCKET $MOUNT_DIR gcsfuse $OPTION_1,$OPTION_2,..." | sudo tee -a /etc/fstab
sudo mount -a

たとえば、バケット mtdata を /data ディレクトリにマウントするには、次のコマンドを使用します。

sudo mkdir -p /data
echo "mtdata /data gcsfuse defaults,_netdev,implicit_dirs,allow_other,dir_mode=777,file-mode=777,metadata_cache_negative_ttl_secs=0,metadata_cache_ttl_secs=-1,stat_cache_max_size_mb=-1,type_cache_max_size_mb=-1,enable_streaming_writes=true" | sudo tee -a /etc/fstab
sudo mount -a

完全に自動化された一貫性のある設定を行うには、クラスタの起動スクリプトにカスタム マウント スクリプトを含めます。この方法により、Cloud Storage バケットが起動時にすべてのノードに自動的にマウントされるため、手動で構成する必要がなくなります。

AI/ML ワークロードに合わせた構成に関するその他の推奨事項については、パフォーマンス チューニングのベスト プラクティス ガイドをご覧ください。トレーニング、推論、チェックポイント設定用に Cloud Storage FUSE を最適化するための具体的なガイダンスを提供します。

次のステップ

次のステップでは、作成したクラスタを大規模なトレーニングに効果的に使用することに焦点を当てます。