GKE 用 Cloud Storage FUSE CSI ドライバについて


この概要では、Google Kubernetes Engine(GKE)で Cloud Storage バケットをローカル ファイル システムとしてマウントするための Cloud Storage FUSE CSI ドライバについて説明します。この機能は、トレーニング データ、モデル、チェックポイントを Cloud Storage に保存する必要がある ML ワークロードで特に役立ちます。

この概要は、Kubernetes アプリケーションから Cloud Storage に保存されているトレーニング データ、推論モデルの重み、チェックポイントへのアクセスや、保存を行うデベロッパーとデータ サイエンティストを対象としています。

このページを読む前に、Kubernetes、GKE、Cloud Storage について理解しておいてください。

仕組み

ドライバは Container Storage Interface(CSI)標準を使用して、Pod で実行されているアプリケーションが、マウントされたファイル システムであるかのように Cloud Storage バケットにシームレスにアクセスできるようにします。つまり、複雑な構成やコードの変更なしに、Cloud Storage バケットを Kubernetes アプリケーションの永続的でスケーラブルなデータソースとして扱うことができます。

Cloud Storage FUSE CSI ドライバは、オープンソースの Google Cloud Storage FUSE CSI プラグインを利用したフルマネージドのエクスペリエンスを提供します。CSI ドライバを使用すると、Kubernetes API を使用して既存の Cloud Storage バケットをボリュームとして使用できます。アプリケーションでは、Cloud Storage FUSE ファイル システム セマンティクスを使用して、オブジェクトのアップロードとダウンロードを行うことができます。

Filesystem in Userspace(FUSE)は、ファイル システムを Linux カーネルにエクスポートするために使用されるインターフェースです。Cloud Storage FUSE を使用すると、Cloud Storage バケットをファイル システムとしてマウントできます。これにより、アプリケーションはクラウド固有の API を使用せずに、一般的なファイル IO オペレーション(オープン、読み取り、書き込み、クローズなど)を使用してバケット内のオブジェクトにアクセスできます。

ドライバは、Cloud Storage ベースのボリュームを構成するために、次の方法をネイティブにサポートしています。

  • CSI エフェメラル ボリューム: Pod 仕様に沿って Cloud Storage バケットを指定します。Kubernetes 永続ボリュームで以前のエクスペリエンスを必要としない、合理化された Pod ベースのインターフェースが必要な場合は、エフェメラル CSI ボリュームを使用します。このオプションを使用するには、Cloud Storage バケットを CSI エフェメラル ボリュームとしてマウントするをご覧ください。
  • PersistentVolume: 静的プロビジョニングを使用して、Cloud Storage バケットを参照する PersistentVolume リソースを作成します。これにより、Pod はこの PersistentVolume にバインドされた PersistentVolumeClaim を参照できます。PersistentVolume に精通していて、このリソースタイプに依存する既存のデプロイメントとの整合性を維持したい場合は、このオプションを使用します。このオプションを使用するには、Cloud Storage バケットを永続ボリュームとしてマウントするをご覧ください。

ユースケース

Cloud Storage FUSE CSI ドライバは、次のようなシナリオに適しています。

AI と ML

  • トレーニング: Cloud Storage FUSE CSI ドライバを使用すると、Cloud Storage を信頼できる情報源として使用して、トレーニング データを読み取り、保存済みモデルをチェックポイントできます。たとえば、PyTorch、JAX、TensorFlow を使用して GKE でモデルをトレーニングする場合、ドライバは Cloud Storage バケットに保存されているトレーニング データセットへのアクセスを提供できます。
  • 推論: Cloud Storage に保存されているファイルから結果を推論する ML 推論モデルをサービングできます。Cloud Storage FUSE CSI を使用して、Cloud Storage に保存されているモデルの重みをプリロードできます。また、ファイル キャッシュ並列ダウンロードを使用すると、Cloud Storage からの大規模なファイルの読み取りを高速化し、マルチスレッド ダウンロードを実現できます。この機能を使用すると、特にサイズが 1 GB を超える読み取りでモデルの読み込み時間を短縮できます。

データ分析パイプライン

Cloud Storage FUSE CSI ドライバを使用すると、アプリケーションが Cloud Storage に保存されている大規模なデータセットに直接アクセスして分析できるようになり、データ処理タスクを合理化できます。たとえば、GKE で実行されている Spark ジョブは、CSI ドライバを使用して、Cloud Storage に保存されているデータを最初にダウンロードすることなく処理できます。

利点

CSI ドライバを使用すると、次のメリットがあります。

  • 設定が簡単: Cloud Storage FUSE の CSI ドライバは、Standard クラスタと Autopilot クラスタの両方でドライバを自動的にデプロイして管理します。CSI エフェメラル ボリュームを使用すると、ボリュームの構成と管理が簡素化されます。これは、PersistentVolumeClaim オブジェクトと PersistentVolume オブジェクトが不要になるためです。
  • セキュリティ: Cloud Storage FUSE の CSI ドライバには特権アクセスは必要ありません。これにより、特権アクセスに関連するリスクを最小限に抑え、セキュリティ ポスチャーを改善できます。Workload Identity Federation for GKE を使用すると、Pod が Cloud Storage オブジェクトにアクセスする方法を詳細に制御しながら、認証を管理できます。
  • パフォーマンス: Cloud Storage FUSE CSI ドライバは、最適化されたインタラクション用のサイドカー、高速データアクセス用の並列ダウンロード、読み取りパフォーマンスの向上とレイテンシの短縮を実現するメタデータとファイルのキャッシュ保存などの機能により、パフォーマンスを向上させます。これらの機能の詳細については、パフォーマンス チューニングのオプションと機能をご覧ください。
  • ポータビリティと柔軟性: Cloud Storage FUSE CSI ドライバを使用すると、標準のファイル システム セマンティクスを使用して Cloud Storage バケットをマウントしてアクセスできます。これにより、ML ワークロードのポータビリティを向上させる使い慣れたインターフェースが提供され、コードやアプリケーションを大幅に変更する必要がなくなります。このドライバは、GPU や TPU など、GKE で使用可能なすべてのアクセラレータでサポートされています。Cloud Storage FUSE の CSI ドライバは、ReadWriteManyReadOnlyManyReadWriteOnceアクセスモードをサポートしています。Cloud Storage FUSE ボリュームを init コンテナで使用できます。
  • 管理性: このドライバを使用すると、インストールや管理を必要とせずに、Cloud Storage FUSE をバック グラウンドで実行できます。ファイル システム、Cloud Storage、ファイル キャッシュの使用状況など、Cloud Storage FUSE の指標分析情報を表示できます。

パフォーマンス チューニングのオプションと機能

Cloud Storage FUSE CSI ドライバには、Pod が Cloud Storage バケットに保存されているデータにアクセスする方法を最適化するためのパフォーマンス チューニング オプションと機能がいくつか用意されています。

たとえば、ファイル キャッシュを有効にしてリクエストの同時実行数を調整すると、トレーニング データの読み込みにかかる時間を大幅に短縮し、トレーニング時間を短縮できます。

  • ネイティブ サイドカー: Cloud Storage FUSE CSI ドライバは、Cloud Storage とのやり取りを管理するために、Pod にサイドカー コンテナをアタッチします。サイドカーは、Cloud Storage とのマウントとやり取りを処理し、アプリケーションがデータにシームレスにアクセスできるようにします。サイドカー コンテナの CPU やメモリなどのリソースを構成する、またはキャッシュ保存やバッファリングに関連する設定を調整することで、パフォーマンスを微調整できます。Cloud Storage FUSE CSI ドライバのサイドカー コンテナと Istio は、Pod 内で共存して同時に実行できます。

  • 並列ダウンロード: GKE バージョン 1.30.3-gke.1571000 以降と、ファイル キャッシュが有効になっている Cloud Storage FUSE v.2.4.0 以降では、並列ダウンロード機能を使用して、Cloud Storage からの大規模なファイルの読み取りを高速化し、マルチスレッド ダウンロードを実現できます。この機能を使用すると、特にサイズが 1 GB を超える読み取りでモデルの読み込み時間を短縮できます(たとえば、Llama2 70B の読み込み速度が最大で 2 倍の速さになります)。

  • メタデータ キャッシュ保存のサポート: Cloud Storage FUSE CSI ドライバは、サイズや変更時間などのファイル メタデータをキャッシュに保存することでパフォーマンスを向上させます。CSI ドライバはデフォルトでこのデータ キャッシュを有効にし、Cloud Storage から情報を繰り返しリクエストするのではなく、ローカルに保存することでレイテンシを短縮します。最大サイズと、データがキャッシュに保持される期間を構成できます。メタデータ キャッシュをファイン チューニングすることで、Google Cloud Storage への API 呼び出しを減らし、ネットワーク トラフィックとレイテンシを最小限に抑えて、アプリケーションのパフォーマンスと効率を向上させることができます。

  • ファイル キャッシュ保存のサポート: Cloud Storage FUSE CSI ドライバとファイル キャッシュ保存を併用することで、Cloud Storage バケットの小さなファイルを扱うアプリケーションの読み取りパフォーマンスを改善できます。Cloud Storage FUSE ファイル キャッシュ機能は、クライアントベースの読み取りキャッシュであり、繰り返し実行されるファイルの読み取りを、選択したキャッシュストレージからより迅速に処理できます。読み取りキャッシュは、ローカル SSD、Persistent Disk ベースのストレージ、RAM ディスクなど、さまざまなストレージ オプションから、価格とパフォーマンスのニーズに基づいて選択できます。

  • ノードの再起動のサポート: GKE バージョン 1.33.1-gke.1959000 以降、GCSFuse CSI ボリュームを使用する Pod は、GKE ノードの再起動後に自動的に復元できます。以前のバージョンを実行しているクラスタでは、Pod を復元できないため、再デプロイする必要があります。

パフォーマンス チューニングのベスト プラクティスについては、GKE のパフォーマンスを向上させるために Cloud Storage FUSE CSI ドライバを最適化するをご覧ください。

制限事項

CSI ドライバには次の制限があります。

  • Cloud Storage FUSE ファイル システムでは、POSIX ファイル システムと比較して、パフォーマンス、可用性、アクセス承認、セマンティクスが異なります。
  • Cloud Storage FUSE の CSI ドライバは、GKE Sandbox ではサポートされていません。
  • Cloud Storage FUSE の CSI ドライバは、ボリューム スナップショット、ボリュームのクローン作成、ボリュームの拡張をサポートしていません。
  • Workload Identity Federation for GKE を使用する場合、読み書きワークロードには均一なバケットレベルのアクセスが必要です。
  • Cloud Storage FUSE CSI ドライバの GitHub プロジェクトで既知の問題をご覧ください。
  • Cloud Storage FUSE CSI ドライバの GitHub プロジェクトで未解決の問題をご覧ください。
  • Cloud Storage FUSE CSI ドライバは、Workload Identity Federation for GKE の制限事項により、ホスト ネットワークhostNetwork: true)で実行されている Pod をサポートしていません。
  • 1.32.3-gke.1099000 より前の GKE クラスタ バージョンでは、JSON で暗号化された mountOption 文字列のサイズに厳しい制限があります。バケット名、ユーザーが指定したマウント オプション、ドライバが指定した mountOptions の組み合わせは 500 文字未満にする必要があります。GKE クラスタ バージョン 1.32.3-gke.1099000 以降では、JSON メッセージのしきい値を 5,000 バイトに引き上げました。

要件

Cloud Storage FUSE CSI ドライバを使用するには、クラスタが次の GKE バージョンの要件を満たしている必要があります。

Cloud Storage FUSE CSI ドライバの特定の機能を使用するには、次の要件も満たす必要があります。

機能 GKE バージョンの要件
サイドカー コンテナの非公開イメージ、カスタム書き込みバッファ ボリューム、サイドカー コンテナのリソース リクエスト 1.27.10-gke.1055000、1.28.6-gke.1369000、1.29.1-gke.1575000 以降。
ファイル キャッシュ、ボリューム属性 1.27.12-gke.1190000、1.28.8-gke.1175000、1.29.3-gke.1093000 以降。
init コンテナの Cloud Storage FUSE ボリューム 1.29.3-gke.1093000 以降。すべてのノードが GKE バージョン 1.29 以降であること。
並列ダウンロード 1.29.6-gke.1254000、1.30.2-gke.1394000 以降。
Cloud Storage FUSE 指標 1.31.1-gke.1621000 以降。1.33.0-gke.2248000 以降ではデフォルトで有効になっていること。
メタデータのプリフェッチ 1.32.1-gke.1357001 以降。
ストリーミング書き込み 1.32.1-gke.1753001 以降。1.33.2-gke.1043000 以降ではデフォルトで有効になっていること。
カーネルの先読みを構成する 1.32.2-gke.1297001 以降。
ノードの再起動のサポート 1.33.1-gke.1959000 以降。

次のステップ