Cloud Storage の Connector for PyTorch は、Google がサポートするオープンソース プロダクトで、Cloud Storage と PyTorch を直接統合します。
概要
Connector for PyTorch は、トレーニング中のデータの読み込みと、チェックポイントとモデルの読み込みの両方のメリットを提供します。
トレーニングでのデータ読み込みの場合、Connector for PyTorch には次の利点があります。
- Connector for PyTorch には、主に 1 MB 未満のファイルで構成されるデータセットで、デフォルトの PyTorch よりも最大 3 倍高速なトレーニングを実現する最適化が含まれています。
- Connector for PyTorch は、Cloud Storage バケットからトレーニング データを効率的に読み込むために使用できる PyTorch のデータセット プリミティブを実装しています。
- ランダム データアクセス パターン用のマップスタイル データセットと、ストリーミング データアクセス パターン用のイテレーター スタイル データセットのサポート。
- ダウンロードした未加工バイトデータを任意の形式に変換できるため、PyTorch DataLoader で NumPy 配列や PyTorch テンソルを柔軟に処理できます。
チェックポイントとモデルの読み込みの場合、Connector for PyTorch には次の利点があります。
- モデルのチェックポイントを Cloud Storage バケットに直接保存し、バケットからモデルのチェックポイントを読み込むための便利なチェックポイント インターフェース。
- Connector for PyTorch は、PyTorch Lightning の
CheckpointIO
のDatafluxLightningCheckpoint
実装を使用して、PyTorch Lightning のチェックポイントをサポートしています。 - Connector for PyTorch は、PyTorch 分散チェックポイント処理で使用するための
StorageWriter
とStorageReader
の実装を提供します。Connector for PyTorch デモ ライブラリには、PyTorch Lightning FSDP ワークロードでこれを使用するサンプルコードが含まれています。 - コネクタのチェックポイントには、Lightning とベースの PyTorch の両方で非同期チェックポイントの保存がサポートされています。
詳細については、Connector for PyTorch の GitHub ランディング ページをご覧ください。
フレームワーク
Connector for PyTorch は、次のフレームワーク バージョンでサポートされています。
- Python 3.8 以降
- PyTorch Lightning 2.0 以降
- PyTorch 2.3.1 以降
ご利用にあたって
Connector for PyTorch を使用するには、次のものが必要です。
- 操作するデータを含む Cloud Storage バケット。
- バケットの推奨設定については、複合オブジェクトの使用をご覧ください。
- バケットに保存されているデータを操作するための次の権限。
storage.objects.create
storage.objects.list
storage.objects.get
storage.objects.delete
(コンポーズド ダウンロードを使用する場合)
これらの権限は、ストレージ オブジェクト ユーザーなどの IAM ロールを使用して、Connector for PyTorch が認証に使用するアカウントに付与する必要があります。
インストール
Connector for PyTorch をインストールするには、次のコマンドを使用します。
pip install gcs-torch-dataflux
構成
Connector for PyTorch のアプリケーションのデフォルト認証情報を使用するには、次のいずれかの方法で認証情報を指定する必要があります。
- Compute Engine VM で Connector for PyTorch を実行している場合、アプリケーションのデフォルト認証情報はデフォルトで VM に接続されているサービス アカウントを自動的に使用します。詳細については、ワークロードの認証方法を選択するをご覧ください。
- アプリケーションのデフォルト認証情報を手動で構成することもできます。Google Cloud CLI を使用して直接ログインできます。
gcloud auth application-default login
例
Connector for PyTorch の使用例の完全なセットは、Connector for PyTorch GitHub リポジトリの demo ディレクトリにあります。次に例を示します。
- 基本的なスターター Jupyter ノートブック(Google Colab でホスト)。
- エンドツーエンドの画像セグメンテーション トレーニング ワークロードのチュートリアル。
- PyTorch Lightning 統合のエンドツーエンドの例とノートブック。
パフォーマンス
Connector for PyTorch には、ML ワークロード用に設計された特定の最適化が含まれています。これにより、Cloud Storage への直接 API 呼び出しよりも大幅に優れたパフォーマンスを提供できます。
- リスティングのパフォーマンスを最適化するために、Connector for PyTorch は、並列化されたオブジェクト リスティング プロセス間でリスティング ワークロードを分散するように開発された高速リスティング アルゴリズムを使用します。
- 小さなファイルのダウンロード パフォーマンスを最適化するために、Connector for PyTorch はコンポーズ オペレーションを使用して、小さなオブジェクトのセットを連結して 1 つの大きなオブジェクトにします。これらの新しい複合オブジェクトは、ソース オブジェクトと同じバケットに保存され、名前に接頭辞
dataflux-composed-objects/
が付いています。 - チェックポイント書き込みのマルチパート アップロードを使用すると、標準のチェックポイント アップロードと比較してパフォーマンスを最大 10 倍向上させることができます。
次のパフォーマンス データは GitHub で確認できます。
- Lightning テキストベースのトレーニング
- Lightning Image Training
- 単一ノードのチェックポイント処理
- マルチノード チェックポイント
考慮事項
ワークロードごとに次の点を考慮する必要があります。
高速なリスト操作
Connector for PyTorch の高速リスト アルゴリズムにより、Connector for PyTorch は通常の順序リストよりも多くのリスト演算を使用します。リスト オペレーションは、クラス A オペレーションとして課金されます。
複合オブジェクトの使用
一時複合オブジェクトを操作するときにストレージの過剰な料金や早期削除料金が発生しないようにするには、バケットで次の設定を使用する必要があります。
- 無効な削除(復元可能)
- 無効なバケットロック
- 無効なオブジェクトのバージョニング
- バケットとオブジェクトの両方のストレージ クラスとして Standard Storage を使用します。
Connector for PyTorch によって作成された複合オブジェクトは通常、トレーニング ループの終了時に自動的に削除されますが、まれに削除されないことがあります。オブジェクトがバケットから確実に削除されるようにするには、次のコマンドを実行します。
gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive
コンポジット オブジェクトの使用を無効にするには、作成するデータセットの config 部分に disable_compose=True
または max_composite_object_size=0
を含めます。ただし、この動作をオフにすると、特に小さなファイルで作業する場合、トレーニング ループに大幅な時間がかかります。
複合オブジェクトを使用すると、Cloud Storage はファイルを直接ダウンロードする場合よりも低いスケールで QPS とスループットの上限に達します。コンポジット オブジェクトを使用せずにプロジェクトの QPS またはスループット上限に達するような、マルチノード スケールで実行する場合は、コンポジット オブジェクトの使用を無効にする必要があります。
429 エラーとパフォーマンスの低下
Connector for PyTorch の使用中に、429 エラーが発生したり、実行時間が想定よりも長くなったりすることがあります。これには次のような一般的な理由があります。
- 多くの ML プロジェクトでは、PyTorch Lightning や Ray などのツールを活用した高度な分散トレーニング モデルが選択されています。これらのモデルは Connector for PyTorch と互換性がありますが、多くの場合、Cloud Storage のレート制限がトリガーされます。
- 「このワークロードが Cloud Storage から送信帯域幅を過剰に使用している」や「このワークロードが Cloud Storage の下り(外向き)帯域幅の上限をトリガーした」などのメッセージが付随する 429 エラーは、ワークロードのデータスループット レートが Google Cloud プロジェクトの最大容量を超えていることを示します。これらの問題に対処する手順は次のとおりです。
- プロジェクト内の他のワークロードが過剰な帯域幅を使用していないことを確認します。
- 割り当ての増加を申請する。
- 作成するデータセットの config 部分で
list_retry_config
オプションとdownload_retry_config
オプションを調整して、再試行のバックオフを調整し、パフォーマンスを最大化します。
- QPS の上限により、
TooManyRequests
を示す本文メッセージとともに 429 エラーがトリガーされることがあります。ただし、通常は、想定よりも実行時間が遅くなることで現れます。QPS ボトルネックが発生するのは、大量の小さなファイルを処理する場合によくあります。バケット QPS の上限は時間の経過とともに自然にスケーリングされるため、ウォームアップ期間を許可すると、パフォーマンスが向上することがあります。ターゲット バケットのパフォーマンスの詳細を確認するには、Google Cloud コンソールからバケットを表示して [オブザーバビリティ] タブを確認します。 - エラー メッセージにキーワード
dataflux-composed-objects
を含むTooManyRequests
エラーでワークロードが失敗する場合は、コンポーズされたオブジェクトの使用を無効にすることをおすすめします。これにより、大規模に使用された場合に、コンポーズ オペレーションによって発生する QPS の負荷を軽減できます。
メモリ消費
アップロードとダウンロードのパフォーマンスを最適化するために、推論用の最終モデルを含むチェックポイントの書き込みと読み込みはメモリに完全にステージングされます。各マシンには、これらのパフォーマンス向上を活用できるように、チェックポイントをメモリにステージングするのに十分な空き RAM が必要です。
サポートを受ける
Google Cloud の公式サポート チャネルのいずれかで、サポートの利用、一般的な質問の提出、新機能のリクエストを行うことができます。GitHub で問題を報告してサポートを受けることもできます。