このドキュメントでは、Cloud Storage FUSE のファイル キャッシュの概要と、ファイル キャッシュの構成および使用方法について説明します。
Cloud Storage FUSE のファイル キャッシュは、クライアントサイドの読み取りキャッシュです。これを使用すると、選択したより高速なキャッシュ ストレージから繰り返しファイルを読み取れるため、読み取りオペレーションのパフォーマンスが向上します。ファイル キャッシュが有効になっている場合、Cloud Storage FUSE は頻繁にアクセスされるファイルのコピーをローカルに保存します。これにより、後続の読み取りをキャッシュから直接提供できるため、レイテンシが短縮され、スループットが向上します。
ファイル キャッシュのメリット
ファイル キャッシュには次の利点があります。
小規模なランダム I/O のパフォーマンスを改善する: ファイル キャッシュは、キャッシュ メディアから直接読み取りを行うことで、レイテンシとスループットを改善します。小規模でランダムな I/O オペレーションは、キャッシュから処理することで大幅に高速化できます。
並列ダウンロードが自動的に有効になる: ファイル キャッシュが有効になっている場合、Cloud Storage FUSE バージョン 2.12 以降では並列ダウンロードが自動的に有効になります。並列ダウンロードでは、ファイル キャッシュ ディレクトリをプリフェッチ バッファとして使用して、複数のワーカーでファイルを並列にダウンロードします。これにより、モデルの読み込み時間を最大 9 倍短縮できます。モデル提供やチェックポイントの復元など、大規模なファイルを読み込む単一スレッドの読み取りシナリオには、並列ダウンロードを使用することをおすすめします。
既存の容量を使用する: ファイルのキャッシュ保存では、追加のストレージに対して課金されることなく、キャッシュ ディレクトリにすでにプロビジョニングされているマシン容量を使用できます。これには、
a2-ultragpu
、a3-highgpu
、Persistent Disk(各 VM で使用されるブートディスク)、メモリ内/tmpfs
などの Cloud GPU マシンタイプにバンドルされているローカル SSD が含まれます。料金の削減: キャッシュ ヒットがローカルで処理されるため、Cloud Storage オペレーションやネットワークの料金が発生しません。
AI と ML のトレーニングの総所有コストの改善: ファイル キャッシュによりデータの読み込みが速くなるため、Cloud GPU と Cloud TPU の使用率が向上します。トレーニング時間が短縮され、人工知能と機械学習(AI / ML)のトレーニング ワークロードの費用対効果が高まります。
並列ダウンロード
並列ダウンロードでは、ファイル キャッシュ ディレクトリをプリフェッチ バッファとして使用して、複数のワーカーでファイルの複数の部分を並列でダウンロードすることで、読み取りパフォーマンスを向上させることができます。モデル提供、チェックポイントの復元、大規模オブジェクトのトレーニングなど、大規模なファイルを読み込むシナリオには、並列ダウンロードを使用することをおすすめします。
並列ダウンロードでファイル キャッシュを有効にするユースケースには、次のようなものがあります。
ユースケースのタイプ | 説明 |
---|---|
トレーニング | アクセスするデータが複数回読み取られる場合は、ファイル キャッシュを有効にします。同じファイルが複数回読み取られる場合も、同じファイルの異なるオフセットが読み取られる場合も同様です。データセットがファイル キャッシュよりも大きい場合は、ファイル キャッシュを無効のままにして、代わりに次のいずれかの方法を使用します。 |
モデルの重み付けとチェックポイントの読み取り | 並列ダウンロードでファイル キャッシュを有効にすると、並列ダウンロードを利用できるようになります。これにより、ファイル キャッシュと並列ダウンロードを使用しない場合よりも、大容量のファイルをはるかに高速に読み込むことができます。 |
考慮事項
ファイル キャッシュの有効期間(TTL): TTL に基づいてファイル キャッシュ エントリがまだ期限切れになっておらず、ファイルがキャッシュにある場合、そのファイルに対する読み取りオペレーションは、Cloud Storage にリクエストが発行されることなく、ローカル クライアント キャッシュから処理されます。
ファイル キャッシュ エントリの有効期限: ファイル キャッシュ エントリの有効期限が切れている場合、最初に Cloud Storage に対して
GET
ファイル属性呼び出しが行われます。ファイルが存在しない場合や、その属性またはコンテンツが変更されている場合は、新しいコンテンツが取得されます。属性が無効になっただけで、コンテンツが有効なままの場合(オブジェクト生成が変更されていない場合)、属性呼び出しでコンテンツの有効性が確認されてからでなければ、コンテンツはキャッシュから提供されません。どちらのオペレーションもネットワーク レイテンシが発生します。ファイル キャッシュの無効化: Cloud Storage FUSE クライアントがキャッシュに保存されたファイルまたはその属性を変更すると、整合性を保つために、そのクライアントのキャッシュ エントリはすぐに無効になります。ただし、同じファイルにアクセスしている他のクライアントは、個々の TTL 設定によって無効になるまで、キャッシュ保存バージョンを読み取り続けます。
ファイルサイズと使用可能な容量: 読み取り対象のファイルは、ファイル キャッシュ ディレクトリの使用可能な容量に収まるサイズでなければなりません。この容量は、
--file-cache-max-size-mb
オプションまたはfile-cache:max-size-mb
フィールドを使用して制御できます。キャッシュ エビクション: キャッシュに保存されているメタデータとデータのエビクションは、
--file-cache-max-size-mb
制限ごとに構成された空きスペースのしきい値に達すると開始される LRU(最も長い間使われていないものを特定する)アルゴリズムに基づいて行われます。エントリが TTL に基づいて期限切れになると、最初に Cloud Storage に対してGET
metadata 呼び出しが行われますが、これはネットワークのレイテンシの影響を受けます。データとメタデータが個別に管理されるため、一方のエンティティがエビクションまたは無効化され、他方のエンティティではこれらが行われない場合があります。キャッシュの永続性: Cloud Storage FUSE キャッシュは、マウント解除時に保持されず、再起動します。ファイル キャッシュの場合、キャッシュからファイルを提供するために必要なメタデータ エントリはマウント解除と再起動時に削除されますが、ファイル キャッシュ内のデータはファイル ディレクトリに残っている可能性があります。マウントを解除するか再起動した後に、ファイル キャッシュ ディレクトリ内のデータを削除することをおすすめします。
ランダム読み取りと部分読み取りの管理: 最初のファイル読み取りオペレーションがファイルの先頭(オフセット
0
)から開始される場合、Cloud Storage FUSE ファイル キャッシュは、小さな範囲のサブセットからしか読み取らない場合でも、ファイル全体をキャッシュに取り込んで読み込みます。これにより、同じオブジェクトからのその後のランダムまたは部分的な読み取りは、キャッシュから直接処理されます。デフォルトでは、他のオフセットからの読み取りでは非同期の完全ファイル取得はトリガーされません。この動作を変更して、Cloud Storage FUSE が最初のランダム読み取り時にキャッシュにファイルを取り込むようにするには、
--file-cache-cache-file-for-range-read
オプションまたはfile-cache:cache-file-for-range-read
フィールドをtrue
に設定します。同じオブジェクトに対して多くの異なるランダム読み取りまたは部分読み取りのオペレーションが実行される場合は、このプロパティを有効にすることをおすすめします。
データ セキュリティ: キャッシュ保存を有効にすると、Cloud Storage FUSE は、
--cache-dir
オプションまたはcache-dir
フィールドを使用して指定したキャッシュ ディレクトリをキャッシュの基盤となるディレクトリとして使用し、Cloud Storage バケットのファイルを暗号化された形式で保持します。このキャッシュ ディレクトリにアクセスできるユーザーまたはプロセスは、これらのファイルにアクセスできます。このディレクトリへのアクセスを制限することをおすすめします。ファイル キャッシュへの直接アクセスまたは複数アクセス: Cloud Storage FUSE 以外のプロセスを使用してキャッシュ ディレクトリ内のファイルにアクセスしたり、ファイルを変更したりすると、データが破損するおそれがあります。Cloud Storage FUSE キャッシュは、実行中の各 Cloud Storage FUSE プロセスに固有であり、同じマシンまたは別のマシンで実行されている別の Cloud Storage FUSE プロセスを認識しません。そのため、異なる Cloud Storage FUSE プロセスで同じキャッシュ ディレクトリを使用することはおすすめしません。
同じマシンで複数の Cloud Storage FUSE プロセスを実行する: 同じマシンで複数の Cloud Storage FUSE プロセスを実行する必要がある場合は、各 Cloud Storage FUSE プロセスが独自のキャッシュ ディレクトリを取得するか、次のいずれかの方法でデータが破損しないようにする必要があります。
共有キャッシュを使用してすべてのバケットをマウントする: 動的マウントを使用して、アクセス可能なすべてのバケットを共有キャッシュにより 1 つのプロセスでマウントします。詳細については、Cloud Storage FUSE の動的マウントをご覧ください。
特定のバケットでキャッシュを有効にする: 静的マウントを使用して、指定したバケットでのみキャッシュ保存を有効にします。詳細については、Cloud Storage FUSE の静的マウントをご覧ください。
特定のフォルダまたはディレクトリのみをキャッシュに保存する: バケット全体をマウントするのではなく、特定のバケットレベルのフォルダのみをマウントしてキャッシュに保存します。詳細については、バケット内のディレクトリをマウントするをご覧ください。
始める前に
ファイル キャッシュでは、ファイルをキャッシュに保存するディレクトリ パスが必要です。既存のファイル システムに新しいディレクトリを作成するか、プロビジョニングされたストレージに新しいファイル システムを作成できます。使用する新しいストレージをプロビジョニングする場合は、次の手順で新しいファイル システムを作成します。
Google Cloud Hyperdisk の場合は、新しい Google Cloud Hyperdisk ボリュームを作成するをご覧ください。
Persistent Disk の場合は、新しい Persistent Disk ボリュームを作成するをご覧ください。
ローカル SSD の場合は、VM にローカル SSD を追加するをご覧ください。
メモリ内 RAM ディスクの場合は、メモリ内 RAM ディスクの作成をご覧ください。
ファイル キャッシュの動作を有効にして構成する
次のいずれかの方法で、ファイル キャッシュを有効にして構成する方法を選択します。
gcsfuse
オプションの値として指定します。
次のいずれかの方法で、使用するキャッシュ ディレクトリを指定します。これにより、Google Kubernetes Engine 以外のデプロイメントでファイル キャッシュを有効にできます。
gcsfuse
オプション:--cache-dir
- 構成ファイルのフィールド:
cache-dir
Google Kubernetes Engine 用の Cloud Storage FUSE CSI ドライバを使用する Google Kubernetes Engine デプロイメントを使用している場合は、次のいずれかを指定します。
gcsfuse
オプション:--file-cache-max-size-mb
- 構成ファイルのフィールド:
file-cache:max-size-mb
省略可: 並列ダウンロードが自動的に有効になっていない場合は、次のいずれかを
true
に設定して、並列ダウンロードを有効にします。gcsfuse
オプション:--file-cache-enable-parallel-downloads
- 構成ファイルのフィールド:
file-cache:enable-parallel-downloads
マウントされたディレクトリ内で Cloud Storage FUSE キャッシュが使用できる合計容量を制限するには、次のいずれかのオプションを調整します。キャッシュ ディレクトリを指定すると、このオプションは自動的に値
-1
に設定されます。gcsfuse
オプション:--file-cache-max-size-mb
- 構成ファイルのフィールド:
file-cache:max-size-mb
MiB または GiB 単位で値を指定して、キャッシュ サイズを制限することもできます。
省略可: キャッシュに保存されたエントリの TTL の有効期限をバイパスし、利用可能な場合はキャッシュからファイル メタデータを提供するには、次のいずれかの方法で値
-1
を設定します。gcsfuse
オプション:--metadata-cache-ttl-secs
- 構成ファイルのフィールド:
metadata-cache:ttl-secs
デフォルトは 60 秒です。値
-1
を指定すると、無制限に設定されます。要件に基づいて高い値を指定することもできます。ttl-secs
値は、ワークロードで許容される限り高く設定することをおすすめします。キャッシュに保存されたエントリの TTL の詳細については、考慮事項をご覧ください。省略可: ファイルの最初の読み取りオペレーションが
offset 0
以外の場所から開始された場合に、ファイル全体を非同期的にキャッシュに読み込むファイル キャッシュの機能を有効にします。これにより、後続の読み取りでも同じファイルの異なるオフセットをキャッシュから取得できます。次のいずれかの方法で、オプションをtrue
に設定します。gcsfuse
オプション:--file-cache-cache-file-for-range-read
- 構成ファイルのフィールド:
file-cache:cache-file-for-range-read
省略可: 統計情報キャッシュとタイプ キャッシュを構成します。統計情報キャッシュとタイプ キャッシュの詳細については、タイプ キャッシュ保存の概要または統計情報キャッシュ保存の概要をご覧ください。
ワークロードを実行する前に、マウントされたバケットで
ls -R
コマンドを手動で実行してメタデータを事前入力し、高速なバッチ方式で初回の読み取りが行われる前にタイプ キャッシュが入力されるようにします。初回読み取りのパフォーマンスを改善する方法について詳しくは、初回読み取りを改善するをご覧ください。
ファイル キャッシュを有効にすると、Cloud Storage FUSE バージョン 2.12 以降で並列ダウンロードが自動的に有効になります。古いバージョンの Cloud Storage FUSE を使用している場合は、enable-parallel-downloads
オプションを true
に設定して、並列ダウンロードを有効にします。
並列ダウンロードのサポート プロパティを構成する
必要に応じて、Cloud Storage FUSE CLI または Cloud Storage FUSE 構成ファイルを使用して、並列ダウンロードの次のサポート プロパティを構成できます。
プロパティの説明 | gcsfuse オプション |
構成ファイルのフィールド |
---|---|---|
Cloud Storage からファイル キャッシュにオブジェクトをダウンロードするためにファイルごとに生成できるワーカーの最大数。 | --file-cache-parallel-downloads-per-file |
file-cache:parallel-downloads-per-file |
ファイル ダウンロード ジョブ全体で、任意の時点で生成できるワーカーの最大数。デフォルトでは、マシン上の CPU コア数の 2 倍の値に設定されます。上限を指定しない場合は、値 -1 を入力します。 | --file-cache-max-parallel-downloads |
file-cache:max-parallel-downloads |
オブジェクトをファイル キャッシュにダウンロードするときに、各ワーカーが Cloud Storage に対して行う 1 回の読み取りリクエストのサイズ(MiB 単位)。並列ダウンロードは、読み取る対象のファイルのサイズが指定されたサイズである場合にのみトリガーされます。 | --file-cache-download-chunk-size-mb |
file-cache:download-chunk-size-mb |
並列ダウンロードを無効にする
並列ダウンロードを無効にするには、次のいずれかを false
に設定します。
gcsfuse
オプション:--file-cache-enable-parallel-downloads
- 構成ファイルのフィールド:
file-cache:enable-parallel-downloads
次のステップ
Cloud Storage FUSE のパフォーマンスを改善する方法を確認する。