Fastchat: fastapi に基づいて大規模なモデル読み込みサービスを構築する

Fastapi LLM のサポート

FastChat サービスのアーキテクチャ

画像の説明を追加してください

インストール

方法 1: pip

pip3 install "fschat[model_worker,webui]"

方法 2: ソース ファイル

git clone https://github.com/lm-sys/FastChat.git
cd FastChat

Mac 上で実行する場合:

brew install rust cmake

ソースからインストールする

pip3 install --upgrade pip  # enable PEP 660 support
pip3 install -e ".[model_worker,webui]"

大規模モデル推論のロード

1. コマンドライン

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.3

画像の説明を追加してください

主要なパラメータの概要:

パラメータ 説明する
–モデルパス モデル パス。ローカル フォルダーまたは HuggingFace のリポジトリ ID を指定できます。
-リビジョン HuggingFace Hub モデル リビジョンの識別
-デバイス デバイスタイプは、cpu/cuda/mps/xpu を選択できます
–gpus 単一または複数の GPU (1 または 0、2 など) を指定します。
-num-gpus GPUの数
–max-GPU-メモリ モデルの重みを保存するために各 GPU が使用する最大メモリ。「13Gib」などの文字列で表されます。
–load-8bit 8ビット量子化を使用する
–cpu-オフロード 8 ビット量子化の場合のみ: GPU の容量を超える重みを CPU にオフロードします。
–gptq-ckpt GPTQ 定量化のための GPTQ チェックポイント パス
–gptq-wbits GPTQ量子化ビット数、2/3/4/8/16を選択できます
–gptq-グループサイズ GPTQ はグループ サイズを定量化します。デフォルトは行全体です。
–gptq-act-order GPTQ アクティベーション順序ヒューリスティックを適用するかどうか
–awq-ckpt AWQ 量子化の AWQ チェックポイント パス
–awq-wbits AWQ 量子化ビット数、オプション 4/16
–awq-グループサイズ AWQ の定量化されたグループ サイズ。デフォルトは行全体です。
–conv-template 会話プロンプトのテンプレート
–conv-system-msg ダイアログシステムのメッセージ
-温度 温度パラメータ
–repetition_penalty リピートペナルティパラメータ
–max-new-tokens 新しく生成されるトークンの最大数
-履歴はありません 履歴は残らない
-スタイル 表示スタイルはシンプル/リッチ/​​プログラマティックから選択可能
–複数行 複数行入力を有効にする
-ねずみ カーソル位置のマウスサポートを有効にする (リッチスタイルのみ)
–裁判官送致終了 文末を認識した論理修正を有効にするかどうか
-デバッグ デバッグ情報 (プロンプトなど) を出力します。

2.ウェブ

Web UI を使用してサービスを提供するには、次の 3 つの主要コンポーネントが必要です。

  1. ユーザーと対話するWebサーバー

  2. 1 つ以上のモデルをホストするモデル ワーカー

  3. Web サーバーとモデル ワーカーを調整するコントローラー。

スタートコントローラー

python3 -m fastchat.serve.controller

画像の説明を追加してください

モデルの仕事を始める

python3 -m fastchat.serve.model_worker --model-path lmsys/vicuna-7b-v1.3

プロセスがモデルのロードを完了するまで待ちます。「Uvicorn running on...」が表示されます。モデル ワーカーは自身をコントローラーに登録します。

画像の説明を追加してください

モデルがコントローラーに登録されているかどうかをテストします。成功すると、短い出力が表示されます。
画像の説明を追加してください

Gradio Webサーバーを起動します

python3 -m fastchat.serve.gradio_web_server

これは、ユーザーが操作するユーザー インターフェイスです。

画像の説明を追加してください

http://0.0.0.0:7860 を開くと、対話型インターフェイスが表示されます。

画像の説明を追加してください

複数のモデルを登録する

  • 複数のモデル ワーカーを 1 つのコントローラーに登録でき、これを使用して、より高いスループットで 1 つのモデルを提供したり、複数のモデルを同時に提供したりできます。これを行うときは、異なるモデル ワーカーに異なる GPU とポートを割り当てます。
# worker 0
CUDA_VISIBLE_DEVICES=0 python3 -m fastchat.serve.model_worker --model-path lmsys/vicuna-7b-v1.3 --controller http://localhost:21001 --port 31000 --worker http://localhost:31000
# worker 1
CUDA_VISIBLE_DEVICES=1 python3 -m fastchat.serve.model_worker --model-path lmsys/fastchat-t5-3b-v1.0 --controller http://localhost:21001 --port 31001 --worker http://localhost:31001
  • [Chatbot Arena] タブを含むマルチタブ グラデーション サーバーを起動することもできます。
python3 -m fastchat.serve.gradio_web_server_multi

3. OpenAIのRESTful APIに対応

RESTful APIサーバー

  1. スタートコントローラー
python3 -m fastchat.serve.controller
  1. モデルの読み込みを開始する
python3 -m fastchat.serve.model_worker --model-path /mnt/code/LLM_Service/model/Baichuan-13b-Chat --num-gpus 2

  1. RESTful APIサーバーを起動する
python3 -m fastchat.serve.openai_api_server --host localhost --port 8000

  • openai-python をインストールします。
pip install --upgrade openai

ChatOpenAI インターフェイスを介してモデルを呼び出します。

from langchain.chat_models import ChatOpenAI
from langchain import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    HumanMessagePromptTemplate,
)

api_base_url = "http://192.168.175.6:8000/v1" 
api_key= "EMPTY"
LLM_MODEL = "Baichuan-13b-Chat"
model = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key=api_key,
    openai_api_base=api_base_url,
    model_name=LLM_MODEL
)


human_prompt = "{input}"
human_message_template = HumanMessagePromptTemplate.from_template(human_prompt)

chat_prompt = ChatPromptTemplate.from_messages(
    [("human", "我们来玩成语接龙,我先来,生龙活虎"),
     ("ai", "虎头虎脑"),
     ("human", "{input}")])


chain = LLMChain(prompt=chat_prompt, llm=model, verbose=True)
print(chain({
    
    "input": "恼羞成怒"}))

画像の説明を追加してください

同じマシン上の同じプロセスで複数のモデルを実行する場合は、model_worker上記の手順をマルチモデルのバリアントに置き換えることができます。

python3 -m fastchat.serve.multi_model_worker \
    --model-path lmsys/vicuna-7b-v1.3 \
    --model-names vicuna-7b-v1.3 \
    --model-path lmsys/longchat-7b-16k \
    --model-names longchat-7b-16k

ローカルGPUの微調整

依存関係をインストールする

pip3 install -e ".[train]"

微調整

次のコマンドを使用して、4 x A100 (40GB) を使用して Vicuna-7B をトレーニングできます。--model_name_or_pathLLaMA 重みの実際のパスとデータの実際のパスを使用して--data_path更新されます。

torchrun --nproc_per_node=4 --master_port=20001 fastchat/train/train_mem.py \
    --model_name_or_path ~/model_weights/llama-7b  \
    --data_path data/dummy_conversation.json \
    --bf16 True \
    --output_dir output_vicuna \
    --num_train_epochs 3 \
    --per_device_train_batch_size 2 \
    --per_device_eval_batch_size 2 \
    --gradient_accumulation_steps 16 \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps 1200 \
    --save_total_limit 10 \
    --learning_rate 2e-5 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps 1 \
    --fsdp "full_shard auto_wrap" \
    --fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \
    --tf32 True \
    --model_max_length 2048 \
    --gradient_checkpointing True \
    --lazy_preprocess True

おすすめ

転載: blog.csdn.net/qq128252/article/details/132759107