Fastchat:基于fastapi构建大模型加载服务

Fastapi LLM支持

FastChat 服务架构

请添加图片描述

安装

方法一:pip

pip3 install "fschat[model_worker,webui]"

方法二:源文件

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

请添加图片描述

关键参数汇总:

参数说明
–model-path模型路径,可以是本地文件夹或HuggingFace的repo ID
–revisionHuggingFace Hub模型修订版本标识
–device设备类型,可选择cpu/cuda/mps/xpu
–gpus指定单个或多个GPU,如1或0,2
–num-gpusGPU数量
–max-gpu-memory每个GPU用于存储模型权重的最大内存,使用字符串表示如’13Gib’
–load-8bit使用8位量化
–cpu-offloading仅用于8位量化:将超出GPU容量的权重卸载到CPU
–gptq-ckptGPTQ检查点路径,用于GPTQ量化
–gptq-wbitsGPTQ量化比特数,可选择2/3/4/8/16
–gptq-groupsizeGPTQ量化分组大小,默认为整行
–gptq-act-order是否应用GPTQ激活顺序启发式方法
–awq-ckptAWQ检查点路径,用于AWQ量化
–awq-wbitsAWQ量化比特数,可选择4/16
–awq-groupsizeAWQ量化分组大小,默认为整行
–conv-template对话提示模板
–conv-system-msg对话系统消息
–temperature温度参数
–repetition_penalty重复惩罚参数
–max-new-tokens最大新生成词元数量
–no-history不保留历史记录
–style显示样式,可选择simple/rich/programmatic
–multiline启用多行输入
–mouse启用鼠标支持光标定位(仅限rich样式)
–judge-sent-end是否启用识别句子结束的逻辑纠正
–debug打印调试信息(如prompt)

2.Web

要使用 Web UI 提供服务,您需要三个主要组件:

  1. 与用户交互的 Web 服务器

  2. 托管一个或多个模型的模型工作人员

  3. 协调网络服务器和模型工作人员的控制器。

启动控制器
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 ,可以看到交互界面

请添加图片描述

注册多个模型
  • 您可以将多个模型工作人员注册到单个控制器,该控制器可用于为具有更高吞吐量的单个模型提供服务或同时为多个模型提供服务。执行此操作时,请为不同的模型工作人员分配不同的 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
  • 您还可以启动多选项卡 gradio 服务器,其中包括 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 
#多卡运行
python3 -m fastchat.serve.model_worker --model-path my_model_path --num-gpus 4 --max-gpu-memory "20GiB"
# CUDA_VISIBLE_DEVICES=0,1,2,3 --gpus "0,1,2,3"这几个参数多卡没有效果,必须加--max-gpu-memory
  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_path使用 LLaMA 权重的实际路径和--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
FastChat是一个文本嵌入模型,它可以用于文本相似度计算和文本匹配任务。FastChat通过学习将文本映射到低维向量空间中的嵌入表示,从而捕捉文本之间的语义信息。 FastChat模型主要由两个组成部分构成:句子嵌入的编码器和相似度计算的度量方法。 首先,FastChat使用编码器将句子嵌入到低维向量空间中。编码器通常是基于深度学习的模型,如卷积神经网络(CNN)或循环神经网络(RNN)。编码器网络将输入文本进行特征提取,并将其转换为固定长度的向量表示。这个向量表示能够保留文本的语义信息,并能够被用来计算文本之间的相似度。 其次,FastChat采用一种度量方法来计算文本之间的相似度。一种常见的度量方法是余弦相似度。余弦相似度度量了两个向量之间的夹角,夹角越小,表示两个向量越相似。因此,通过计算两个文本向量的余弦相似度,就可以得到它们之间的相似度分数。 FastChat的优势在于它能够快速且准确地计算文本之间的相似度。由于FastChat使用了低维的向量表示,计算相似度的复杂度相对较低。这使得FastChat在实际应用中具有高效性和实用性。 总而言之,FastChat是一个重要的文本嵌入模型,它通过将文本转换为低维向量表示,并通过度量方法计算文本相似度。这个模型在很多自然语言处理任务中都有广泛的应用,如文本匹配、问答系统、推荐系统等。它为我们提供了一种有效的方式来捕捉和比较文本之间的语义信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江小皮不皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值