Cloud Storage FUSE ファイル キャッシュを使用する

Cloud Storage FUSE のファイル キャッシュは、クライアントサイドの読み取りキャッシュです。これを使用すると、選択したより高速なキャッシュ ストレージから繰り返しファイルを読み取れるため、読み取りオペレーションのパフォーマンスが向上します。ファイル キャッシュが有効になっている場合、Cloud Storage FUSE は頻繁にアクセスされるファイルのコピーをローカルに保存します。これにより、後続の読み取りをキャッシュから直接提供できるため、レイテンシが短縮され、スループットが向上します。

ファイル キャッシュのメリット

ファイル キャッシュには次の利点があります。

  • 小規模なランダム I/O のパフォーマンスを改善する: ファイル キャッシュは、キャッシュ メディアから直接読み取りを行うことで、レイテンシとスループットを改善します。小規模でランダムな I/O オペレーションは、キャッシュから処理することで大幅に高速化できます。

  • 並列ダウンロードを活用する: ファイル キャッシュが有効になっている場合、Cloud Storage FUSE バージョン 2.12 以降では並列ダウンロードが自動的に有効になります。並列ダウンロードでは、ファイル キャッシュ ディレクトリをプリフェッチ バッファとして使用して、複数のワーカーでファイルを並列にダウンロードします。これにより、モデルの読み込み時間を最大 9 倍短縮できます。モデル提供やチェックポイントの復元など、大規模なファイルを読み込む単一スレッドの読み取りシナリオには、並列ダウンロードを使用することをおすすめします。

  • 既存の容量を使用する: ファイルのキャッシュ保存では、追加のストレージに対して課金されることなく、キャッシュ ディレクトリにすでにプロビジョニングされているマシン容量を使用できます。

  • 料金の削減: キャッシュ ヒットがローカルで処理されるため、Cloud Storage オペレーションやネットワークの料金が発生しません。

  • AI と ML のトレーニングの総所有コストの改善: ファイルのキャッシュ保存によりデータの読み込みが速くなるため、Cloud GPU の使用率が向上します。トレーニング時間が短縮され、AI と ML のトレーニング ワークロードの費用対効果が高まります。

並列ダウンロード

並列ダウンロードでは、ファイル キャッシュ ディレクトリをプリフェッチ バッファとして使用して、複数のワーカーでファイルの複数の部分を並列でダウンロードすることで、読み取りパフォーマンスを向上させることができます。モデル提供、チェックポイントの復元、大規模オブジェクトのトレーニングなど、大規模なファイルを読み込むシナリオには、並列ダウンロードを使用することをおすすめします。

並列ダウンロードでファイル キャッシュを有効にするユースケースには、次のようなものがあります。

ユースケースのタイプ 説明
トレーニング アクセスするデータが複数回読み取られる場合は、ファイル キャッシュを有効にします。同じファイルが複数回読み取られる場合も、同じファイルの異なるオフセットが読み取られる場合も同様です。データセットがファイル キャッシュよりも大きい場合は、ファイル キャッシュを無効のままにして、代わりに次のいずれかの方法を使用します。
モデル提供の重み付けとチェックポイントの読み取り 並列ダウンロードでファイル キャッシュを有効にすると、並列ダウンロードを利用できるようになります。これにより、ファイル キャッシュと並列ダウンロードを使用しない場合よりも、大容量のファイルをはるかに高速に読み込むことができます。

考慮事項

以降のセクションでは、ファイル キャッシュを使用する際の重要な考慮事項について説明します。

ファイルサイズと使用可能な容量

読み取り対象のファイルは、ファイル キャッシュ ディレクトリの使用可能な容量内に収まるサイズでなければなりません。この容量は、--file-cache-max-size-mb CLI オプションまたは file-cache:max-size-mb フィールドを使用して制御できます。

ランダム読み取りと部分読み取りの管理

最初のファイル読み取りオペレーションがファイルの先頭、つまりオフセット 0 から開始される場合、Cloud Storage FUSE ファイル キャッシュは、小さな範囲のサブセットからしか読み取らない場合でも、ファイル全体をキャッシュに取り込んで読み込みます。これにより、同じオブジェクトからのその後のランダムまたは部分的な読み取りは、キャッシュから直接処理されます。

ファイルの最初の読み取りオペレーションがオフセット 0 以外の場所から開始された場合、Cloud Storage FUSE は、デフォルトで非同期の完全ファイル取得をトリガーしません。この動作を変更して、Cloud Storage FUSE が最初のランダム読み取り時にファイルをキャッシュに取り込むようにするには、次のいずれかの方法で動作を true に設定します。

同じオブジェクトに対して多くの異なるランダム読み取りまたは部分読み取りのオペレーションが実行される場合は、このプロパティを有効にすることをおすすめします。

キャッシュの強制排除

キャッシュに保存されているメタデータとデータのエビクションは、--file-cache-max-size-mb 制限ごとに構成された空きスペースのしきい値に達すると開始される LRU(最も長い間使われていないものを特定する)アルゴリズムに基づいて行われます。エントリが TTL に基づいて期限切れになると、最初に Cloud Storage に対して GET metadata 呼び出しが行われますが、これはネットワークのレイテンシの影響を受けます。データとメタデータが個別に管理されるため、一方のエンティティがエビクションまたは無効化され、他方のエンティティではこれらが行われない場合があります。

キャッシュの永続性

Cloud Storage FUSE キャッシュは、マウント解除時に保持されず、再起動します。ファイル キャッシュの場合、キャッシュからファイルを提供するために必要なメタデータ エントリはマウント解除と再起動時に削除されますが、ファイル キャッシュ内のデータはファイル ディレクトリに残っている可能性があります。マウントを解除するか再起動した後に、ファイル キャッシュ ディレクトリ内のデータを削除することをおすすめします。

データ セキュリティ

キャッシュ保存を有効にすると、Cloud Storage FUSE は、次のいずれかの方法で指定したキャッシュ ディレクトリをキャッシュの基盤となるディレクトリとして使用し、Cloud Storage バケットのファイルを暗号化された形式で保持します。

このキャッシュ ディレクトリにアクセスできるユーザーまたはプロセスは、これらのファイルにアクセスできます。このディレクトリへのアクセスを制限することをおすすめします。

ファイル キャッシュへの直接アクセスまたは複数アクセス

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 の静的マウントをご覧ください。

  • 特定のフォルダまたはディレクトリのみをキャッシュに保存する: バケット全体をマウントするのではなく、特定のバケットレベルのフォルダのみをマウントしてキャッシュに保存します。詳細については、バケット内のディレクトリをマウントするをご覧ください。

始める前に

ファイル キャッシュでは、ファイルをキャッシュに保存するディレクトリ パスが必要です。既存のファイル システムに新しいディレクトリを作成するか、プロビジョニングされたストレージに新しいファイル システムを作成できます。使用する新しいストレージをプロビジョニングする場合は、次の手順で新しいファイル システムを作成します。

  1. Google Cloud Hyperdisk の場合は、新しい Google Cloud Hyperdisk ボリュームを作成するをご覧ください。

  2. メモリ内 RAM ディスクの場合は、メモリ内 RAM ディスクの作成をご覧ください。

ファイル キャッシュの動作を有効にして構成する

次のいずれかの方法でファイル キャッシュを有効にして構成します。

  1. 次のいずれかの方法で、使用するキャッシュ ディレクトリを指定します。これにより、Google Kubernetes Engine 以外のデプロイでファイル キャッシュを有効にできます。

    Google Kubernetes Engine 用の Cloud Storage FUSE CSI ドライバを使用して Google Kubernetes Engine デプロイを使用している場合は、次のいずれかのオプションを指定します。

  2. 省略可: 並列ダウンロードが自動的に有効になっていない場合は、次のいずれかのオプションを true に設定して、並列ダウンロードを有効にします。

  3. マウントされたディレクトリ内で Cloud Storage FUSE キャッシュが使用できる合計容量を制限するには、次のいずれかのオプションを調整します。キャッシュ ディレクトリを指定すると、これらのオプションは自動的に -1 の値に設定されます。

    MiB または GiB 単位で値を指定して、キャッシュ サイズを制限することもできます。

  4. 省略可: 次のいずれかの方法で値 -1 を設定して、キャッシュに保存されたエントリの TTL の有効期限をバイパスし、利用可能な場合はキャッシュからファイル メタデータを配信します。

    デフォルトは 60 秒です。値 -1 を指定すると、無制限に設定されます。要件に基づいて高い値を指定することもできます。ttl-secs 値は、ワークロードで許容される限り高く設定することをおすすめします。キャッシュに保存されたエントリの TTL の設定の詳細については、有効期間(TTL)をご覧ください。

  5. 省略可: ファイルの最初の読み取りオペレーションが offset 0 以外の場所から開始された場合に、ファイル全体を非同期的にキャッシュに読み込むファイル キャッシュの機能を有効にします。これにより、後続の読み取りでも同じファイルの異なるオフセットをキャッシュから取得できます。次のいずれかの方法で、オプションを true に設定します。

  6. 省略可: 統計情報キャッシュとタイプ キャッシュを構成します。統計情報キャッシュとタイプ キャッシュの詳細については、タイプ キャッシュ保存の概要または統計情報キャッシュ保存の概要をご覧ください。

  7. ワークロードを実行する前に、マウントされたバケットで ls -R コマンドを手動で実行してメタデータを事前入力し、高速なバッチ方式で初回の読み取りが行われる前にタイプ キャッシュが入力されるようにします。初回読み取りのパフォーマンスを改善する方法について詳しくは、初回読み取りを改善するをご覧ください。

ファイル キャッシュを有効にすると、Cloud Storage FUSE バージョン 2.12 以降で並列ダウンロードが自動的に有効になります。古いバージョンの Cloud Storage FUSE を使用している場合は、enable-parallel-downloads オプションを true に設定して、並列ダウンロードを有効にします。

並列ダウンロードのサポート プロパティを構成する

必要に応じて、Cloud Storage FUSE CLI または Cloud Storage FUSE 構成ファイルを使用して、並列ダウンロードの次のサポート プロパティを構成できます。

プロパティの説明 CLI オプション 構成ファイルのフィールド
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 に設定します。

  • --file-cache-enable-parallel-downloads CLI オプション
  • file-cache:enable-parallel-downloads フィールド

次のステップ