Hugging Face Transformers と Ray による Retrieval Augmented Generation
Hugging Face は、Retrieval Augmented Generation (RAG) モデルのドキュメント検索メカニズムに Ray を統合しました。この統合により、検索呼び出しのレイテンシを最大 2 倍削減し、知識集約型の NLP タスクにおける分散ファインチューニングの拡張性を向上させます。
Retrieval Augmented Generation (RAG) の理解
Retrieval Augmented Generation (RAG) は、実行中に Wikipedia のテキストコーパスなどの外部知識ベースから文脈ドキュメントを検索することで知識を強化する、sequence-to-sequence (seq2seq) アーキテクチャです。モデルに組み込まれたパラメータのみに依存する標準的なモデルとは異なり、RAG はこれらの内部パラメータと外部のパッセージから取得した情報を組み合わせて出力を生成します。この二重ソースのアプローチにより、RAG は、質問応答のような知識集約型のタスクにおいて、他の最先端モデルを凌駕することができます。
Ray による分散ファインチューニングの拡張
検索ステップは RAG の性能にとって不可欠ですが、分散ファインチューニング中に大きな複雑さをもたらします。データ並列トレーニングルーチンでは、ドキュメントインデックスが各トレーニングワーカーが複製コピーをロードするには大きすぎる場合が多く、潜在的なボトルネックとなります。
以前は、RAG のファインチューニングにおいて、ドキュメント検索に torch.distributed 通信パッケージが使用されていました。しかし、この実装には主に 2 つの制限がありました。
- 同期のボトルネック: rank 0 ワーカーがすべてのワーカーからの入力を受け取り、インデックスクエリを実行し、結果を各ワーカーに配布する責任を負っていたため、トレーニングワーカーの数が増えるにつれてパフォーマンスが制限されました。
- フレームワーク依存性: 検索プロセスグループはトレーニングプロセスグループに紐付けられていたため、トレーニングプロセスに PyTorch を使用する必要がありました。
torch.distributed を、汎用的な分散および並列プログラミング用の Python ライブラリである Ray に置き換えることで、Hugging Face はフレームワークに依存しない実装を実現しました。Ray のステートフルなアクター抽象化を使用することで、トレーニングプロセスとは別の複数のプロセスがインデックスをロードし、検索クエリを並行して処理できるため、rank 0 のボトルネックが解消されます。
パフォーマンスベンチマーク
Ray を統合することで、マルチ GPU ファインチューニング中の検索性能が torch.distributed の実装と比較して大幅に向上します。GPU の数が増えるにつれてパフォーマンスの差は広がり、Ray の検索プロセス数を増やすことでさらに速度が最適化されます。
| Implementation | 2 GPU | 3 GPU | 4 GPU |
|---|---|---|---|
torch.distributed |
2.12 sec/retrieval | 2.62 sec/retrieve | 3.438 sec/retrieve |
| Ray (2 retrieval processes) | 1.49 sec/retrieve | 1.539 sec/retrieve | |
| Ray (4 retrieval processes) | 1.145 sec/retrieve | 1.484 sec/retrieve | 1.66 sec/retrieve |
注: ベンチマークは、GPU ごとのバッチサイズを 8 とし、500 トレーニングステップにわたって実施され、rank 0 ワーカーにおける文脈ドキュメントの検索時間を測定しました。
実装と使用方法
ユーザーは、Hugging Face が提供する PyTorch Lightning ベースのファインチューニングスクリプトを使用して、Ray ベースの検索を実装できます。プロセスには ray と transformers のインストール、およびファインチューニングスクリプトでの以下の設定が含まれます。
- Distributed Retriever:
rayに設定。 - Retrieval Workers:
--num_retrieval_workersフラグを介して指定。
さらなる最適化を求める場合は、Ray Tune との統合を利用して、スケーラブルなハイパーパラメータチューニングを行い、モデルの精度を向上させることができます。