LoRAX: 数千の微調整された LLM まで拡張できるマルチ LoRA 推論サーバー
LoRAX (LoRA eXchange) は、ユーザーが単一の GPU で数千の微調整されたモデルを提供できるようにするフレームワークで、スループットやレイテンシーを犠牲にすることなく、提供コストを大幅に削減します。
目次
特徴
モデル
?はじめる
要件
LoRAX サーバーを起動する
REST API経由のプロンプト
Python クライアント経由のプロンプト
OpenAI API経由でチャットする
次のステップ
謝辞
ロードマップ
動的アダプターのロード: HuggingFace、Predibase、または任意のファイルシステムからの微調整された LoRA アダプターをリクエストに含めると、同時リクエストをブロックすることなくジャストインタイムでロードされます。リクエストごとにアダプターを結合して、強力なアンサンブルを即座に作成します。
異種連続バッチ処理:異なるアダプターのリクエストを同じバッチにまとめて、同時アダプターの数に応じてレイテンシーとスループットをほぼ一定に保ちます。
アダプター交換スケジューリング: GPU と CPU メモリーの間でアダプターを非同期的にプリフェッチおよびオフロードし、リクエストのバッチ処理をスケジュールして、システムの総スループットを最適化します。
最適化された推論:テンソル並列処理、プリコンパイルされた CUDA カーネル (フラッシュ アテンション、ページ アテンション、SGMV)、量子化、トークン ストリーミングを含む、高スループットおよび低レイテンシの最適化。
事前に構築された Docker イメージ、Kubernetes 用の Helm チャート、Prometheus メトリクス、Open Telemetry を使用した分散トレースの準備が整いました。マルチターンチャット会話をサポートする OpenAI 互換 API。リクエストごとのテナント分離によるプライベート アダプター。構造化出力 (JSON モード)。
?商用利用は無料: Apache 2.0 ライセンス。もう十分ですか?
LoRAX を使用して微調整されたモデルを提供することは、次の 2 つのコンポーネントで構成されます。
基本モデル: すべてのアダプター間で共有される事前トレーニング済みの大規模モデル。
アダプター: リクエストごとに動的にロードされるタスク固有のアダプターの重み。
LoRAX は、Llama (CodeLlama を含む)、Mistral (Zephyr を含む)、Qwen など、多数の大規模言語モデルを基本モデルとしてサポートしています。サポートされる基本モデルの完全なリストについては、「サポートされるアーキテクチャ」を参照してください。
基本モデルは fp16 でロードすることも、 bitsandbytes
、 GPT-Q 、または AWQ で量子化することもできます。
サポートされているアダプターには、PEFT および Ludwig ライブラリを使用してトレーニングされた LoRA アダプターが含まれます。モデル内の線形レイヤーはいずれも LoRA 経由で適応させ、LoRAX にロードできます。
カスタム CUDA カーネルやその他の依存関係のコンパイルを避けるために、事前に構築された Docker イメージから始めることをお勧めします。
LoRAX を実行するために必要な最小システム要件は次のとおりです。
Nvidia GPU (アンペア世代以上)
CUDA 11.8 互換デバイスドライバー以降
Linux OS
Docker (このガイド用)
nvidia-container-toolkitをインストールしてから
sudo systemctl daemon-reload
sudo systemctl restart docker
モデル=ミストラライ/ミストラル-7B-命令-v0.1 ボリューム=$PWD/データ docker run --gpus all --shm-size 1g -p 8080:80 -v $volume:/data ghcr.io/predibase/lorax:main --model-id $model
トークン ストリーミングと Python クライアントを含む完全なチュートリアルについては、「Getting Started - Docker」を参照してください。
プロンプトベース LLM:
カール 127.0.0.1:8080/生成 -Xポスト -d '{ "inputs": "[INST] ナタリアは 4 月に 48 人の友人にクリップを販売し、5 月にはその半分のクリップを販売しました。ナタリアは 4 月と 5 月に合計で何本のクリップを販売しましたか? [/INST] ", "パラメータ": { "max_new_tokens": 64 } }' -H 'コンテンツタイプ: application/json'
LoRA アダプターにプロンプトを表示します。
カール 127.0.0.1:8080/生成 -Xポスト -d '{ "inputs": "[INST] ナタリアは 4 月に 48 人の友人にクリップを販売し、5 月にはその半分のクリップを販売しました。ナタリアは 4 月と 5 月に合計で何本のクリップを販売しましたか? [/INST] ", "parameters": { "max_new_tokens": 64, "adapter_id": "vineetssharma/qlora-adapter-Mistral-7B-Instruct-v0.1-gsm8k" } }' -H 'コンテンツタイプ: application/json'
詳細については、「リファレンス - REST API」を参照してください。
インストール:
pip インストール lorax クライアント
走る:
from lorax import Clientclient = Client("http://127.0.0.1:8080")# ベース LLMprompt = "[INST] ナタリアは 4 月に 48 人の友人にクリップを販売し、5 月にはその半分のクリップを販売しましたナタリアは 4 月と 5 月に合計で何本のクリップを販売しましたか? [/INST]"print(client.generate(prompt, max_new_tokens=64).generated_text)# LoRA アダプターのプロンプトadapter_id = "vineetssharma/qlora-adapter-Mistral-7B-Instruct-v0.1-gsm8k"print(client.generate(prompt, max_new_tokens=64,adapter_id=adapter_id).generated_text )
詳細については、「リファレンス - Python クライアント」を参照してください。
LoRAX を実行するその他の方法については、「はじめに - Kubernetes」、「はじめに - SkyPilot」、および「はじめに - ローカル」を参照してください。
LoRAX は、OpenAI 互換 API を介した動的アダプターの読み込みと組み合わせたマルチターン チャット会話をサポートします。任意のアダプターをmodel
パラメーターとして指定するだけです。
from openai import OpenAIclient = OpenAI(api_key="EMPTY",base_url="http://127.0.0.1:8080/v1", )resp = client.chat.completions.create(model="alignment-handbook/zephyr-7b-dpo-lora",messages=[ {"role": "system","content": "あなたは、常に海賊のスタイルで応答するフレンドリーなチャットボットです", }、 {"role": "user", "content": "人間は一度に何機のヘリコプターを食べることができますか?"}, ]、max_tokens=100、 )print("応答:", resp.choices[0].message.content)
詳細については、「OpenAI 互換 API」を参照してください。
ここでは、試してみるべき他の興味深い Mistral-7B 微調整モデルをいくつか紹介します。
alignment-handbook/zephyr-7b-dpo-lora: ミストラル 7b は、DPO を使用して Zephyr-7B データセット上で微調整されました。
IlyaGusev/saiga_mistral_7b_lora: Open-Orca/Mistral-7B-OpenOrca
に基づくロシアのチャットボット。
Undi95/Mistral-7B-roleplay_alpaca-lora: ロールプレイ プロンプトを使用して微調整。
ここで他の LoRA アダプターを見つけることも、PEFT または Ludwig を使用して独自の LoRA アダプターを微調整してみることもできます。
LoRAX は、v0.9.4 (Apache 2.0) からフォークされた HuggingFace のテキスト生成推論の上に構築されています。
また、高負荷時のマルチアダプター推論を高速化するために使用される SGMV カーネルに関する Punica の取り組みにも感謝したいと思います。
私たちのロードマップはここで追跡されます。