FastChat 是一个用于训练、服务和评估基于大语言模型的聊天机器人的开放平台。
- FastChat 驱动着 Chatbot Arena (lmarena.ai),为 70 多个大语言模型处理了超过 1000 万次聊天请求。
- Chatbot Arena 已从并排的大语言模型对战收集了超过 150 万张人类投票,并据此编制了在线的 大语言模型 Elo 排行榜。
FastChat 的核心功能包括:
- 最先进模型(如 Vicuna、MT-Bench)的训练和评估代码。
- 一个具有 Web UI 和 OpenAI 兼容 RESTful API 的分布式多模型服务系统。
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 # 启用 PEP 660 支持
pip3 install -e ".[model_worker,webui]"
Vicuna 基于 Llama 2,应在 Llama 的模型许可证下使用。
您可以使用以下命令开始聊天。它会自动从 Hugging Face 仓库下载权重。
下载的权重存储在用户主文件夹的 .cache 文件夹中(例如 ~/.cache/huggingface/hub/<model_name>)。
更多命令选项以及如何处理内存不足问题,请参阅下面的“使用命令行界面进行推理”部分。
注意:16K 版本需要 transformers>=4.31。
| 大小 | 聊天命令 | Hugging Face 仓库 |
|---|---|---|
| 7B | python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 |
lmsys/vicuna-7b-v1.5 |
| 7B-16k | python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5-16k |
lmsys/vicuna-7b-v1.5-16k |
| 13B | python3 -m fastchat.serve.cli --model-path lmsys/vicuna-13b-v1.5 |
lmsys/vicuna-13b-v1.5 |
| 13B-16k | python3 -m fastchat.serve.cli --model-path lmsys/vicuna-13b-v1.5-16k |
lmsys/vicuna-13b-v1.5-16k |
| 33B | python3 -m fastchat.serve.cli --model-path lmsys/vicuna-33b-v1.3 |
lmsys/vicuna-33b-v1.3 |
旧权重:所有权重版本及其差异请参见 docs/vicuna_weights_version.md。
除了 Vicuna,我们还发布了另外两个模型:LongChat 和 FastChat-T5。
您可以使用以下命令与它们聊天。它们会自动从 Hugging Face 仓库下载权重。
| 模型 | 聊天命令 | Hugging Face 仓库 |
|---|---|---|
| LongChat-7B | python3 -m fastchat.serve.cli --model-path lmsys/longchat-7b-32k-v1.5 |
lmsys/longchat-7b-32k |
| FastChat-T5-3B | python3 -m fastchat.serve.cli --model-path lmsys/fastchat-t5-3b-v1.0 |
lmsys/fastchat-t5-3b-v1.0 |
(实验性功能:您可以指定 --style rich 来启用富文本输出,并为某些非 ASCII 内容提供更好的文本流质量。这可能在某些终端上无法正常工作。)
FastChat 支持广泛的模型,包括
LLama 2, Vicuna, Alpaca, Baize, ChatGLM, Dolly, Falcon, FastChat-T5, GPT4ALL, Guanaco, MTP, OpenAssistant, OpenChat, RedPajama, StableLM, WizardLM, xDAN-AI 等。
查看支持的完整模型列表以及添加新模型的说明在此。
以下命令 Vicuna-7B 大约需要 14GB GPU 内存,Vicuna-13B 大约需要 28GB GPU 内存。
如果内存不足,请参阅下面的"内存不足"部分。
--model-path 可以是本地文件夹或 Hugging Face 仓库名称。
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5
您可以使用模型并行来聚合同一台机器上多个 GPU 的内存。
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --num-gpus 2
提示:
有时 huggingface/transformers 中的 "auto" 设备映射策略无法完美平衡多个 GPU 之间的内存分配。
您可以使用 --max-gpu-memory 来指定每个 GPU 用于存储模型权重的最大内存。
这允许它为激活分配更多内存,因此您可以使用更长的上下文长度或更大的批次大小。例如,
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --num-gpus 2 --max-gpu-memory 8GiB
这仅在 CPU 上运行,不需要 GPU。Vicuna-7B 大约需要 30GB CPU 内存,Vicuna-13B 大约需要 60GB CPU 内存。
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device cpu
使用 Intel AI Accelerator AVX512_BF16/AMX 加速 CPU 推理。
CPU_ISA=amx python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device cpu
使用 --device mps 在 Mac 电脑上启用 GPU 加速(需要 torch >= 2.0)。
使用 --load-8bit 开启 8 位压缩。
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device mps --load-8bit
Vicuna-7B 可以在 32GB M1 Macbook 上以每秒 1-2 个单词的速度运行。
安装 Intel Extension for PyTorch。设置 OneAPI 环境变量:
source /opt/intel/oneapi/setvars.sh
使用 --device xpu 启用 XPU/GPU 加速。
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device xpu
Vicuna-7B 可以在 Intel Arc A770 16GB 上运行。
安装 Ascend PyTorch Adapter。设置 CANN 环境变量:
source /usr/local/Ascend/ascend-toolkit/set_env.sh
使用 --device npu 启用 NPU 加速。
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device npu
Vicuna-7B/13B 可以在 Ascend NPU 上运行。
如果内存不足,您可以通过在上述命令中添加 --load-8bit 来启用 8 位压缩。
这可以将内存使用量减少大约一半,同时模型质量略有下降。
它与 CPU、GPU 和 Metal 后端兼容。
启用 8 位压缩的 Vicuna-13B 可以在具有 16 GB VRAM 的单 GPU 上运行,例如 Nvidia RTX 3090、RTX 4080、T4、V100 (16GB) 或 AMD RX 6800 XT。
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --load-8bit
除此之外,您还可以在上述命令中添加 --cpu-offloading,将 GPU 上放不下的权重卸载到 CPU 内存中。
这需要启用 8 位压缩并安装 bitsandbytes 包,该包仅在 Linux 操作系统上可用。
对于中国用户,您可以通过指定以下环境变量来使用来自 www.modelscope.cn 的模型。
export FASTCHAT_USE_MODELSCOPE=True
要使用 Web UI 进行服务,您需要三个主要组件:与用户交互的 Web 服务器、托管一个或多个模型的模型工作器,以及一个协调 Web 服务器和模型工作器的控制器。您可以在此处了解更多关于架构的信息。
以下是您需要在终端中执行的命令:
python3 -m fastchat.serve.controller
此控制器管理分布式工作器。
python3 -m fastchat.serve.model_worker --model-path lmsys/vicuna-7b-v1.5
等待进程完成模型加载,直到您看到 "Uvicorn running on ..."。模型工作器将向控制器注册自己。
为确保您的模型工作器正确连接到控制器,请使用以下命令发送测试消息:
python3 -m fastchat.serve.test_message --model-name vicuna-7b-v1.5
您将看到一个简短的输出。
python3 -m fastchat.serve.gradio_web_server
这是用户将与之交互的用户界面。
按照这些步骤,您将能够使用 Web UI 为您的模型提供服务。现在您可以打开浏览器并与模型聊天了。
如果模型没有显示,请尝试重启 gradio web 服务器。
目前,Chatbot Arena 由 FastChat 驱动。以下是您如何在本地启动 Chatbot Arena 实例的方法。
FastChat 支持流行的基于 API 的模型,如 OpenAI、Anthropic、Gemini、Mistral 等。要添加自定义 API,请参阅模型支持文档。下面我们以 OpenAI 模型为例。
创建一个 JSON 配置文件 api_endpoint.json,其中包含您要服务的模型的 API 端点,例如:
{
"gpt-4o-2024-05-13": {
"model_name": "gpt-4o-2024-05-13",
"api_base": "https://api.openai.com/v1",
"api_type": "openai",
"api_key": [插入 API 密钥],
"anony_only": false
}
}
对于 Anthropic 模型,使用您的 Anthropic 密钥指定 "api_type": "anthropic_message"。类似地,对于 gemini 模型,指定 "api_type": "gemini"。更多详细信息可以在 api_provider.py 中找到。
要使用本地 GPU 服务您自己的模型,请按照使用 Web GUI 进行服务中的说明操作。
现在您可以启动服务器了:
python3 -m fastchat.serve.gradio_web_server_multi --register-api-endpoint-file api_endpoint.json
CUDA_VISIBLE_DEVICES=0 python3 -m fastchat.serve.model_worker --model-path lmsys/vicuna-7b-v1.5 --controller http://localhost:21001 --port 31000 --worker http://localhost:31000
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