この概要では、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 エフェメラル ボリュームとしてマウントするをご覧ください。
- PersistentVolumes: 静的プロビジョニングを使用して、Cloud Storage バケットを参照する PersistentVolume リソースを作成します。これにより、Pod はこの PersistentVolume にバインドされた PersistentVolumeClaim を参照できます。PersistentVolume に精通していて、このリソースタイプに依存する既存のデプロイとの整合性を維持する場合は、このオプションを使用します。このオプションを使用するには、Cloud Storage バケットを永続ボリュームとしてマウントするをご覧ください。
ユースケース
Cloud Storage FUSE CSI ドライバは、次のようなシナリオに適しています。
AI と機械学習
- トレーニング: 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 ドライバには特権アクセスは必要ありません。これにより、特権アクセスに関連するリスクを最小限に抑え、セキュリティ体制を強化できます。GKE 用 Workload Identity 連携を使用して認証を管理すると、Pod が Cloud Storage オブジェクトにアクセスする方法をきめ細かく制御できます。
- パフォーマンス: Cloud Storage FUSE CSI ドライバは、最適化されたインタラクションのためのサイドカー、高速なデータアクセスのための並列ダウンロード、メタデータとファイルのキャッシュ保存などの機能により、パフォーマンスを強化し、読み取りパフォーマンスを向上させ、レイテンシを短縮します。これらの機能の詳細については、パフォーマンス チューニングのオプションと機能をご覧ください。
- ポータビリティと柔軟性: Cloud Storage FUSE CSI ドライバを使用すると、標準のファイル システム セマンティクスを使用して Cloud Storage バケットをマウントしてアクセスできます。これにより、ML ワークロードのポータビリティが向上し、コードやアプリケーションを大幅に変更する必要がなくなります。このドライバは、GPU や TPU など、GKE で利用可能なすべてのアクセラレータでサポートされています。Cloud Storage FUSE の CSI ドライバは、
ReadWriteMany
、ReadOnlyMany
、ReadWriteOnce
のアクセスモードをサポートしています。Cloud Storage FUSE ボリュームを init コンテナで使用できます。 - 管理性: ドライバを使用すると、Cloud Storage FUSE をインストールまたは管理しなくても、バックグラウンドで実行できます。ファイル システム、Cloud Storage、ファイル キャッシュの使用状況など、Cloud Storage FUSE の指標分析情報も表示できます。
パフォーマンス チューニングのオプションと機能
Cloud Storage FUSE CSI ドライバには、Cloud Storage バケットに保存されているデータに Pod がアクセスする方法を最適化するためのパフォーマンス チューニング オプションと機能がいくつか用意されています。
たとえば、ファイル キャッシュを有効にしてリクエストの同時実行を調整することで、トレーニング データの読み込み時間を大幅に短縮し、トレーニング時間を短縮できます。
ネイティブ サイドカー: Cloud Storage FUSE CSI ドライバは、Pod にサイドカー コンテナを接続して、Cloud Storage とのやり取りを管理します。サイドカーは、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 を超える読み取りでモデルの読み込み時間を短縮できます(たとえば、Llama 2 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 のパフォーマンスを向上させるために Cloud Storage FUSE CSI ドライバを最適化するをご覧ください。
制限事項
この CSI ドライバには次の制限があります。
- Cloud Storage FUSE ファイル システムでは、POSIX ファイル システムと比較して、パフォーマンス、可用性、アクセス承認、セマンティクスが異なります。
- Cloud Storage FUSE の CSI ドライバは、GKE Sandbox ではサポートされていません。
- Cloud Storage FUSE の CSI ドライバは、ボリューム スナップショット、ボリュームのクローン作成、ボリュームの拡張をサポートしていません。
- Cloud Storage FUSE CSI ドライバは、Workload Identity Federation for GKE の制限事項により、ホスト ネットワーク(
hostNetwork: true
)で実行されている Pod をサポートしていません。 - Workload Identity Federation for GKE を使用する場合、読み書きワークロードには均一なバケットレベルのアクセスが必要です。
- Cloud Storage FUSE の CSI ドライバの GitHub プロジェクトで既知の問題をご覧ください。
- Cloud Storage FUSE の CSI ドライバの GitHub プロジェクトで未解決の問題をご覧ください。
要件
Cloud Storage FUSE CSI ドライバを使用するには、クラスタが次の GKE バージョン要件を満たしている必要があります。
- GKE バージョン 1.24 以降を実行している Linux クラスタを使用する。
- GKE 用 Workload Identity 連携と GKE メタデータ サーバーが有効になっている。
- Google Cloud CLI の最新バージョンを使用します。
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.31.3-gke.1162000 以降。 |