LoRAファンの皆さん、こんにちは、めちゃくちゃたくさんLoRA使いたいですよね。
今日はS-LoRAを見ます。
英語のページはこちらでした。
S-LoRA: Serving Thousands of Concurrent LoRA Adapters
https://github.com/S-LoRA/S-LoRA
論文は、
S-LoRA: Serving Thousands of Concurrent LoRA Adapters
Ying Sheng, Shiyi Cao, Dacheng Li, Coleman Hooper, Nicholas Lee, Shuo Yang, Christopher Chou, Banghua Zhu, Lianmin Zheng, Kurt Keutzer, Joseph E. Gonzalez, Ion Stoica
https://arxiv.org/abs/2311.03285
Low Rank Adaption Adaptersは頭痛が痛いみたいになってますが、英語的にはいいのでしょうか?見てみます。
出典:https://github.com/S-LoRA/S-LoRA
最初にこの絵が出てきました。つまり、LoARのadapterの数を増やしてもスループットの性能が落ちにくいと言ってるのでしょうか。
多くのLoRAアダプターをスケーラブルに提供するために設計されたシステムがS-LoRAのようです。
S-LoRAはすべてのアダプターをメインメモリに格納し、現在実行中のクエリに使用されるアダプターをGPUメモリにフェッチします。GPUメモリを効率的に使用し、断片化を減らすために、S-LoRAはUnified Pagingを提案しているようです。Unified Pagingは、一元的なメモリプールを使用して、異なるランクとKVキャッシュテンソルの可変なシーケンス長を持つ動的アダプター重みを管理。さらに、S-LoRAは新しいテンソル並列処理戦略と、LoRA計算の異種バッチ処理のための高度に最適化されたカスタムCUDAカーネルを採用しています。
これらの特徴を総合すると、S-LoRAは単一のGPUまたは複数のGPU上で何千ものLoRAアダプターを少ないオーバーヘッドで提供することができます。HuggingFace PEFTやvLLMなどの最先端のライブラリと比較して、S-LoRAはスループットを最大4倍向上させ、提供されるアダプターの数を複数の桁で増やすことができます。その結果、S-LoRAは多くのタスク固有の微調整モデルのスケーラブルな提供を可能にし、大規模なカスタマイズされた微調整サービスの潜在的な可能性を提供するそうです。
つまり、たくさんのLoRAをつけられるようにGPUマネージメントされたシステムということですね。
出典:https://github.com/S-LoRA/S-LoRA
特徴です。
Unified Paging(統合ページング)
メモリ断片化を減らし、バッチサイズを増加させるために、S-LoRAは統合メモリプールを導入します。このプールは、統合ページングメカニズムによって動的アダプター重みとKVキャッシュテンソルを管理。
異種バッチ処理
異なるランクのさまざまなアダプターをバッチ処理する際のレイテンシーオーバーヘッドを最小限に抑えるために、S-LoRAは高度に最適化されたカスタムCUDAカーネルを採用しています。これらのカーネルは非連続メモリ上で直接動作し、メモリプールの設計に沿っており、追加されたLoRA計算のための効率的なバッチ推論を促進します。
S-LoRA TP(テンソル並列処理)
複数のGPUにわたる効果的な並列化を確保するために、S-LoRAは新しいテンソル並列処理戦略を導入します。このアプローチは、ベースモデルのそれと比較して、追加されたLoRA計算のための通信コストを最小限に抑えます。これは、小さな中間テンソル上での通信のスケジューリングと、ベースモデルの通信との融合によって実現されます。
出典:https://github.com/S-LoRA/S-LoRA
ベンチマーク
最初の図に戻るわけですが、設定に関して幾つかのベースモデルとアダプターのランクなどがあるようです。
ベンチマークは、
ということで、使うLoRAも使わないLoRAも効率的に使うようです。LoRAをたくさん使う際には考慮しましょう。以上です。