コンテンツに移動
AI & 機械学習

AI Training で Cloud Storage をファイル システムとして利用

2021年11月29日
Google Cloud Japan Team

※この投稿は米国時間 2021 年 11 月 18 日に、Google Cloud blog に投稿されたものの抄訳です。

Vertex AIAI Platform を使用する場合、トレーニング データやモデル、チェックポイント、ログの保存場所として Cloud Storage を選択するのが一般的です。現在では、Cloud Storage FUSE を使用すれば、どちらのプラットフォーム上のトレーニング ジョブでも、Cloud Storage 上のデータにローカル ファイル システムのファイルとしてアクセスできます。

この投稿では、Vertex AI カスタム トレーニング用の Cloud Storage FUSE について説明します。AI Platform トレーニングの場合も、機能はほぼ同じです。

Cloud Storage FUSE には、Cloud Storage への従来のアクセス方法と比べて次の 3 つの利点があります。

  • トレーニング データをダウンロードしなくても、トレーニング ジョブをすばやく開始できます。

  • Cloud Storage API の呼び出し、レスポンスの処理、クライアント側ライブラリとの統合などの操作を行わなくても、トレーニング ジョブで大規模かつ簡単に I/O を実行できます。

  • トレーニング ジョブは、Cloud Storage FUSE の最適化されたパフォーマンスを活用できます。

問題点

従来、トレーニング ジョブで Cloud Storage のデータを使用するには、次の 2 つの方法があります。

  1. gsutil を使用して、トレーニングの前にデータセット全体をダウンロードします。この場合、データセットのサイズによってはダウンロードに数時間かかり、ジョブの開始が大幅に遅れる可能性があります。

  2. Cloud Storage API を直接または統合されたクライアント ライブラリから呼び出します。この方法では、トレーニング コードが大幅に複雑化するため、開発やメンテナンスの費用が増加します。

Cloud Storage FUSE

Cloud Storage FUSE は、Vertex AI システムにマウントされる File System in User Space(FUSE) です。

カスタム トレーニング ジョブを開始すると、ジョブは /gcs ディレクトリを確認します。ここにすべての Cloud Storage バケットがサブディレクトリとして含まれています。特定の権限が付与されると、ジョブはサブディレクトリ(つまりバケット)にアクセスできるようになります。

たとえば、トレーニング ジョブはファイル /gcs/example-bucket/data.csv を読み取って、オブジェクト gs://example-bucket/data.csv に保存されているトレーニング データを取得できます。

読み込んでいます...

トレーニング ジョブをバケットに書き込むこともできます。

読み込んでいます...

権限

ユーザーは、トレーニング ジョブにサービス アカウントを割り当てて、Cloud Storage バケットの権限を構成できます。

  • トレーニング ジョブにサービス アカウントが割り当てられていない場合、そのジョブは同じプロジェクトが所有するすべてのバケットにアクセスできます。

  • トレーニング ジョブに Cloud Storage のロールを持つサービス アカウントが割り当てられている場合、ジョブはそのロールによって付与される権限を持ちます。

たとえば、次のようにサービス アカウントを作成したとします。

  • バケット A に対する storage.objectAdmin

  • バケット B に対する storage.objectViewer

これをトレーニング ジョブに割り当てると、トレーニング ジョブは次の操作が可能になります。

  • バケット A の読み取りと書き込み

  • バケット B の読み取りのみ

トレーニング ジョブがバケット B に書き込もうとすると、エラー「アクセスが拒否されました」で失敗します。

パフォーマンス

大規模なデータセットを使用するトレーニング ジョブでは、I/O がボトルネックになることがよくあります。以下に、Cloud Storage FUSE の読み取りスループットを向上させるためのヒントをいくつかご紹介します。

  • データを大きいファイルに保存して、トレーニングで使用するファイルの数を減らします。ファイル数が少ないと、Cloud Storage 内でオブジェクトを探して開く際の検索オーバーヘッドが減ります。

  • 複数のスレッドを使用します。同時実行数が多いほど、帯域幅がより有効に活用されます。

  • ファイルをウォーム状態にします。頻繁にアクセスされる(つまりウォーム)ファイルは通常、キャッシュに保存されることが多く、読み取りのパフォーマンスが向上します。

制限事項

Cloud Storage FUSE は POSIX 準拠のファイル システムではありません。そのため、POSIX ファイル システムで使用すると望ましくない結果を招く可能性があり、これを回避する必要があります。

ディレクトリ:

  • ルート ディレクトリ「/gcs」は読み取り不可です。ls /gcs を実行すると、「入力 / 出力エラー」が発生します。ただし、ls /gcs/example-bucket などのバケット ルートは読み取り可能です。

  • ディレクトリの名前の変更はアトミックではありません。名前の変更操作が中断されると、一部のファイルは新しいディレクトリに移動し、他のファイルは古いディレクトリに残るという中途半端な結果になる場合があります。直接ファイルと間接ファイルが多すぎるディレクトリの名前は変更できません。

ファイル:

  • ハードリンクはサポートされていません。

  • 所有権、権限、mtime、拡張属性などのファイル メタデータはサポートされていません。トレーニング ロジックにファイル メタデータを利用しないでください。

  • ファイルをフラッシュすると、ファイル全体が Cloud Storage に push されるため、コストがかかります。ファイルを閉じるとフラッシュが発生します。そのため、頻繁なファイルのクローズとフラッシュを回避する必要があります。

  • ファイルへの同時書き込みは、データの破損につながります。

ログ

Cloud Storage FUSE のログを確認すると、トレーニングで発生したエラーの診断に役立ちます。

  • まず、Pantheon のトレーニング ジョブのページで、Cloud ログ エクスプローラへのリンクをたどります。エクスプローラでは、クエリを実行して、トレーニング ジョブから生成されたログを調べることができます。

  • 次に、resource.labels.taskName プロパティで「gcsfuse」を使用してログを表示します。たとえば、タスク名「workerpool0-0.gcsfuse」は、最初のワーカープール「workerpool0」内の最初のワーカー「0」をマウントした Cloud Storage FUSE から出力されたログであることを示します。

次のステップ

Cloud Storage Fuse の詳細については、以下のドキュメントをご覧ください。

Vertex AI カスタム トレーニングについては、Cloud Storage FUSE を使用したコードサンプルもご覧いただけます。


- ソフトウェア エンジニア Oliver Zhuang
投稿先