このドキュメントでは、Cloud Storage FUSE の概要について説明します。Cloud Storage FUSE は、Cloud Storage バケットをローカル ファイル システムとしてマウントしてアクセスできるようにする FUSE アダプタです。これにより、アプリケーションは、標準のファイル システムのセマンティクスを使用して、バケット内のオブジェクトの読み取りと書き込みを行うことができます。
このドキュメントには、常に Cloud Storage FUSE の最新バージョンが反映されています。最新バージョンの詳細については、GitHub の Cloud Storage FUSE のリリースをご覧ください。
Cloud Storage FUSE は、Google がサポートするオープンソース プロダクトです。Cloud Storage FUSE は、FUSE と Cloud Storage API を使用して、ファイル システムのローカルにマウントされたフォルダとしてバケットを透過的に公開します。
Cloud Storage FUSE を使用するには、Linux や Windows Subsystem for Linux などの互換性のあるオペレーティング システムを搭載したマシンに Cloud Storage FUSE パッケージをインストールし、適切な Google Cloud 認証と権限があることを確認してから、gcsfuse コマンドを実行して特定の Cloud Storage バケットをローカル ディレクトリにマウントします。
Cloud Storage FUSE は、他の Google Cloud サービスと統合されています。たとえば、Cloud Storage FUSE CSI ドライバを使用すると、Google Kubernetes Engine(GKE)API を使用してバケットをボリュームとして使用できるため、Cloud Storage からの読み取りと Cloud Storage への書き込みを Kubernetes Pod 内から行うことができます。他の統合の詳細については、統合をご覧ください。
Cloud Storage FUSE の仕組み
Cloud Storage FUSE は、オブジェクト ストレージの名前をディレクトリ型の構造に変換し、オブジェクト名の中のスラッシュ(/)をディレクトリの区切りとして扱います。共通の接頭辞を持つオブジェクトは同じディレクトリ内のファイルとして扱われるため、アプリケーションはマウントされたバケットをファイル システムのように操作できます。階層型名前空間を使用して、オブジェクトを論理ファイル システム構造に整理することもできます。これにより、オブジェクトをフォルダに整理できます。
Cloud Storage FUSE は、Google Kubernetes Engine、Compute Engine VM、オンプレミスのシステムなど、Cloud Storage に接続されたあらゆる場所から実行できます。
ML 用の Cloud Storage FUSE
Cloud Storage FUSE は、ファイル システムのセマンティクスを必要とするアプリケーションに対して、Cloud Storage のパフォーマンス特性とスケーラビリティ特性が適しているユースケースに最適です。たとえば、Cloud Storage FUSE は、データ、モデル、チェックポイント、ログを Cloud Storage に直接保存できるので、ML プロジェクトに役立ちます。詳細については、ML ワークロード用の Cloud Storage FUSE をご覧ください。
Cloud Storage FUSE は、ML のトレーニング データとモデルデータを Cloud Storage 内のオブジェクトとして保存してアクセスすることを検討しているデベロッパーにとって一般的な選択肢です。Cloud Storage FUSE には、ML プロジェクトの開発における次のようなメリットがあります。
Cloud Storage FUSE では、Cloud Storage バケットをローカル ファイル システムとしてマウントできます。これにより、標準のファイル システム セマンティクスを使用して、アプリケーションでトレーニング データやモデルデータにアクセスできます。つまり、Cloud Storage を使用して ML データを保存するときに、アプリケーションのコードの書き換えやリファクタリングを行う必要がありません。
トレーニングから推論まで、Cloud Storage FUSE は Cloud Storage の優れたスケーラビリティ、パフォーマンス、費用対効果を活用して、ML ワークロードを大規模に実行できます。
Cloud Storage FUSE では、Cloud Storage のデータに直接アクセスできるコンピューティング リソースが提供されるため、トレーニング ジョブをすぐに開始できます。コンピューティング リソースにトレーニング データをダウンロードする必要はありません。
詳細については、Cloud Storage FUSE でサポートされているフレームワーク、オペレーティング システム、アーキテクチャをご覧ください。
フレームワーク、オペレーティング システム、アーキテクチャ
Cloud Storage FUSE は、次のフレームワークで検証されています。
TensorFlow V2.x
TensorFlow V1.x
PyTorch V2.x
PyTorch V1.x
JAX 0.4.x
Cloud Storage FUSE は、次のオペレーティング システムとアーキテクチャをサポートしています。
Rocky Linux 8.9 以降
Ubuntu 18.04 以降
Debian 10 以降
CentOS 7.9 以降
RHEL 7.9 以降
SLES 15 以降
x86_64
ARM64
他の Google Cloud プロダクトとのインテグレーション
Cloud Storage FUSE は、次の Google Cloud プロダクトと統合されています。
| プロダクト | Cloud Storage FUSE との統合方法 |
|---|---|
| AI Hypercomputer | Cloud Storage FUSE は、バケットをローカル ファイル システムとしてマウントし、ファイル システム サービスよりも費用対効果の高い方法でデータ ストレージをスケーリングできるため、AI / ML ユースケースに推奨されます。詳細については、ストレージ サービスをご覧ください。 |
| Batch | Cloud Storage FUSE を使用すると、Batch ジョブを作成して実行するときに、Cloud Storage バケットをストレージ ボリュームとしてマウントできます。ジョブの定義でバケットを指定すると、ジョブの実行時にそのバケットがジョブの VM に自動的にマウントされます。 |
| Cloud Composer | 環境を作成するときに、Cloud Composer は、Cloud Storage バケット内の特定のフォルダにワークフローとその依存関係のソースコードを保存します。Cloud Composer は Cloud Storage FUSE を使用して、バケット内のフォルダを Cloud Composer 環境の Airflow コンポーネントにマッピングします。 |
| Cloud Run | Cloud Run を使用すると、Cloud Storage バケットをボリュームとしてマウントし、バケットの内容をコンテナ ファイル システム内のファイルとして表示できます。ボリューム マウントを設定するには、Cloud Storage ボリュームをマウントするをご覧ください。 |
| Cluster Toolkit | Cluster Toolkit を使用すると、Cloud Storage バケットをファイル システムとして作成またはマウントできます。バケットは、適切なモジュールを使用して、ブループリントの YAML ファイルで指定できます。デプロイが実行されると、バケットが自動的に作成またはマウントされます。 |
| Dataflow | Cloud Storage FUSE を使用して Cloud Storage バケットをワーカー ファイル システムに直接マウントすると、Dataflow の基盤となる Apache Beam パイプライン コードは、標準のファイル システム セマンティクスを使用して Cloud Storage のファイルに直接アクセスできます。これは、大規模なデータセットとファイル アクセスを必要とするソフトウェアを使用した AI / ML タスクに Dataflow を使用する場合に特に役立ちます。 |
| Deep Learning Containers | Deep Learning Containers の Cloud Storage バケットをマウントするには、Cloud Storage FUSE CSI ドライバ(推奨)を使用するか、Cloud Storage FUSE をインストールします。 |
| Deep Learning VM Image | Cloud Storage FUSE には、Deep Learning VM Image がプリインストールされています。 |
| Google Kubernetes Engine(GKE) | Cloud Storage FUSE CSI ドライバは、Cloud Storage FUSE と Kubernetes API の統合を管理し、Cloud Storage バケットをボリュームとして使用します。Cloud Storage FUSE CSI ドライバを使用すると、バケットをファイル システムとして Google Kubernetes Engine ノードにマウントできます。 |
| Vertex AI Training | Vertex AI でカスタム トレーニングを行うときは、マウントされたファイル システムとして Cloud Storage バケットからデータにアクセスできます。詳細については、Cloud Storage FUSE を使用した Cloud Storage ファイルの読み取りと書き込みをご覧ください。 |
| Vertex AI Workbench | Vertex AI Workbench インスタンスには Cloud Storage とのインテグレーションが含まれています。JupyterLab インターフェースから Cloud Storage 内のバケットを参照し、互換性のあるファイルを操作できます。Cloud Storage とのインテグレーションにより、Vertex AI Workbench インスタンスと同じプロジェクト内でインスタンスがアクセスできるすべての Cloud Storage バケットとファイルにアクセスできます。インテグレーションを設定するには、JupyterLab で Cloud Storage バケットとファイルにアクセスする方法に関する Vertex AI Workbench の手順をご覧ください。 |
Cloud Storage と統合されている一般的な Google Cloud プロダクトの一覧については、 Google Cloud サービスとツールとの統合をご覧ください。
キャッシュ
Cloud Storage FUSE には、パフォーマンスの向上とコスト削減に役立つ 4 種類のキャッシュがあります。ファイル キャッシュ、統計情報キャッシュ、型キャッシュ、リスト キャッシュです。これらのキャッシュの詳細については、キャッシュの概要をご覧ください。
ディレクトリのセマンティクス
Cloud Storage には、フラットな名前空間のバケットと階層型名前空間が有効になっているバケットがあります。デフォルトでは、Cloud Storage FUSE は、階層型名前空間が有効になっているバケット内の明示的に定義されたディレクトリ(フォルダ)を推定できますが、フラットな名前空間のバケット内の暗黙的に定義されたディレクトリ(シミュレートされたフォルダやマネージド フォルダなど)を推定することはできません。
明示的に定義されたディレクトリとは、Cloud Storage バケット内の独自のオブジェクトで表されるフォルダのことです。暗黙的に定義されたディレクトリとは、Cloud Storage バケット内に対応する独自のオブジェクトがないディレクトリのことです。
たとえば、my-directory/my-object.txt という名前のオブジェクトを含む my-bucket という名前のバケットをマウントするとします。ここで、my-directory/ はシミュレートされたフォルダです。バケット マウント ポイントで ls を実行すると、デフォルトでは、Cloud Storage FUSE はシミュレートされたディレクトリの my-bucket/my-directory/ にも、そこに含まれるオブジェクトの my-object.txt にもアクセスできません。Cloud Storage FUSE がシミュレートされたフォルダとそこに含まれるオブジェクトを推定できるようにするには、フラットな名前空間のバケットをマウントする際、gcsfuse mount コマンドの一部として --implicit-dirs CLI オプションgcsfuseまたは構成ファイルの implicit-dirs フィールドを指定します。
ファイル システムを使用してデータを保存およびアクセスする必要がある場合は、階層型名前空間が有効になっているバケットを使用します。このようなバケットの作成方法については、階層型名前空間が有効なバケットを作成するをご覧ください。
暗黙的に定義されたディレクトリを使用してバケットをマウントする方法など、ディレクトリ セマンティクスの詳細については、Cloud Storage FUSE GitHub ドキュメントのファイルとディレクトリをご覧ください。
Cloud Storage FUSE の再試行方法
デフォルトでは、Cloud Storage FUSE から Cloud Storage へのリクエストが失敗した場合、このリクエストは指定された最大バックオフ期間まで指数バックオフで再試行されます。この期間のデフォルト値は 30s(30 秒)です。バックオフ期間が指定された最大期間を超えると、指定された最大期間で再試行が続行されます。gcsfuse mount 呼び出しの一部として --max-retry-sleep オプションまたは gcs-retries:max-retry-sleep フィールドを使用して、バックオフ期間を指定できます。
停止した GET リクエストまたは READ リクエストの再試行方法
Cloud Storage FUSE で GET リクエストまたは READ リクエストを実行すると、タイムアウト期間が適用されます。リクエストがタイムアウト期間を超えると、Cloud Storage FUSE はリクエストをキャンセルし、指数バックオフ アルゴリズムを使用して再試行します。
タイムアウトは動的で、過去に成功またはキャンセルされた GET リクエストまたは READ リクエストの 99 パーセンタイルのレイテンシに基づいており、最小値は 1.5 秒です。これにより、最も遅いリクエストの 1%(99 パーセンタイルの過去のレイテンシを超えるリクエスト)のみが再試行されます。
停止したアップロードの再試行方法
サイズの大きいファイル書き込みはチャンク化してアップロードされます。テールエンドの書き込みレイテンシを短縮するため、チャンクレベルの書き込みオペレーションが停止または失敗した場合、Cloud Storage FUSE は 10 秒後に再試行します。停止したチャンクごとに最大 4 回の再試行オペレーションが実行されます。
Cloud Storage オペレーションに関連付けられた Cloud Storage FUSE オペレーション
Cloud Storage FUSE を使用してオペレーションを行う場合、Cloud Storage FUSE オペレーションに関連付けられた Cloud Storage オペレーションも行います。次の表に、一般的な Cloud Storage FUSE コマンドと、関連する Cloud Storage の JSON API オペレーションを示します。Cloud Storage FUSE オペレーションに関する情報を表示するには、gcsfuse コマンドで --log-severity オプションまたは logging:severity フィールドを TRACE に設定します。
| コマンド | JSON API 操作 |
|---|---|
gcsfuse --log-severity=TRACE example-bucket mp |
Objects.list、認証情報の確認 |