# FastChat
**Repository Path**: adminsroot/FastChat
## Basic Information
- **Project Name**: FastChat
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-04-19
- **Last Updated**: 2024-04-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
以下是FastChat项目的README文档的中文翻译:
# FastChat
| [**Demo**](https://chat.lmsys.org/) | [**Discord**](https://discord.gg/HSWAKCrnFx) | [**X**](https://x.com/lmsysorg) |
FastChat是一个用于训练、服务和评估大型语言模型基础聊天机器人的开放平台。
- FastChat为Chatbot Arena提供动力(https://chat.lmsys.org/),为70多个大型语言模型(LLM)提供了超过1000万次的聊天请求服务。
- Chatbot Arena收集了超过50万人类对LLM对战的投票,以编制在线[LLM Elo排行榜](https://leaderboard.lmsys.org)。
FastChat的核心功能包括:
- 用于最先进的模型(例如,Vicuna, MT-Bench)的训练和评估代码。
- 具有Web用户界面和OpenAI兼容的RESTful API的分布式多模型服务系统。
## 新闻
- [2024/03] 🔥 我们发布了Chatbot Arena技术[报告](https://arxiv.org/abs/2403.04132)。
- [2023/09] 我们发布了**LMSYS-Chat-1M**,这是一个大规模的真实世界LLM对话数据集。阅读[报告](https://arxiv.org/abs/2309.11998)。
- [2023/08] 我们发布了基于Llama 2的**Vicuna v1.5**,具有4K和16K上下文长度。下载[权重](#vicuna-weights)。
- [2023/07] 我们发布了**Chatbot Arena Conversations**,一个包含33k次对话和人类偏好的数据集。在[这里](https://huggingface.co/datasets/lmsys/chatbot_arena_conversations)下载它。
更多
- [2023/08] 我们发布了基于Llama 2的**LongChat v1.5**,具有32K上下文长度。下载[权重](#longchat)。
- [2023/06] 我们引入了**MT-bench**,这是一个用于评估聊天机器人的具有挑战性的多轮问题集。查看博客[文章](https://lmsys.org/blog/2023-06-22-leaderboard/)。
- [2023/06] 我们引入了**LongChat**,我们的长上下文聊天机器人和评估工具。查看博客[文章](https://lmsys.org/blog/2023-06-29-longchat/)。
- [2023/05] 我们引入了**Chatbot Arena**,用于LLM之间的战斗。查看博客[文章](https://lmsys.org/blog/2023-05-03-arena)。
- [2023/03] 我们发布了**Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90% ChatGPT Quality**。查看博客[文章](https://vicuna.lmsys.org)。
## 目录
- [安装](#安装)
- [模型权重](#模型权重)
- [命令行界面推理](#命令行界面推理)
- [Web GUI服务](#Web-GUI服务)
- [API](#API)
- [评估](#评估)
- [微调](#微调)
- [引用](#引用)
## 安装
### 方法1:使用pip
```bash
pip3 install "fschat[model_worker,webui]"
```
### 方法2:从源代码
1. 克隆此存储库并导航到FastChat文件夹
```bash
git clone https://github.com/lm-sys/FastChat.git
cd FastChat
```
如果您在Mac上运行:
```bash
brew install rust cmake
```
2. 安装包
```bash
pip3 install --upgrade pip # 启用PEP 660支持
pip3 install -e ".[model_worker,webui]"
```
## 模型权重
### Vicuna权重
[Vicuna](https://lmsys.org/blog/2023-03-30-vicuna/)基于Llama 2,应在Llama的[model license](https://github.com/facebookresearch/llama/blob/main/LICENSE)下使用。
您可以使用以下命令开始聊天。它将自动从Hugging Face仓库下载权重。
下载的权重存储在用户主文件夹中的`.cache`文件夹中(例如,`~/.cache/huggingface/hub/`)。
查看“命令行界面推理”部分下面的更多命令选项以及如何处理内存不足。
**注意:对于16K版本,需要`transformers>=4.31`。**
| 大小 | 聊天命令 | Hugging Face仓库 |
| --- | --- | --- |
| 7B | `python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5` | [lmsys/vicuna-7b-v1.5](https://huggingface.co/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](https://huggingface.co/lmsys/vicuna-7b-v1.5-16k) |
| 13B | `python3 -m fastchat.serve.cli --model-path lmsys/vicuna-13b-v1.5` | [lmsys/vicuna-13b-v1.5](https://huggingface.co/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](https://huggingface.co/lmsys/vicuna-13b-v1.5-16k) |
| 33B | `python3 -m fastchat.serve.cli --model-path lmsys/vicuna-33b-v1.3` | [lmsys/vicuna-33b-v1.3](https://huggingface.co/lmsys/vicuna-33b-v1.3) |
**旧权重**:查看[docs/vicuna_weights_version.md](docs/vicuna_weights_version.md)了解所有权重版本及其差异。
### 其他模型
除了Vicuna,我们还发布了两个额外的模型:[LongChat](https://lmsys.org/blog/2023-06-29-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](https://huggingface.co/lmsys/longchat-7b-32k-v1.5) |
| FastChat-T5-3B | `python3 -m fastchat.serve.cli --model-path lmsys/fastchat-t5-3b-v1.0` | [lmsys/fastchat-t5-3b-v1.0](https://huggingface.co/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等。
查看支持模型的完整列表以及添加新模型的说明[here](docs/model_support_ZH.md)。
#### 单GPU
以下命令需要Vicuna-7B大约14GB的GPU内存,Vicuna-13B大约28GB的GPU内存。
如果您没有足够的内存,请查看下面的[“内存不足”部分](#not-enough-memory)。
`--model-path`可以是本地文件夹或Hugging Face仓库名称。
```bash
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5
```
#### 多GPU
您可以使用模型并行性从同一台机器上的多个GPU聚合GPU内存。
```bash
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --num-gpus 2
```
提示:
有时huggingface/transformers中的“auto”设备映射策略不能完美地平衡多个GPU的内存分配。
您可以使用`--max-gpu-memory`来指定每个GPU存储模型权重的最大内存。
这允许它为激活分配更多内存,因此您可以使用更长的上下文长度或更大的批量大小。例如,
```bash
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --num-gpus 2 --max-gpu-memory 8GiB
```
#### 仅CPU
这仅在CPU上运行,不需要GPU。它需要大约30GB的CPU内存用于Vicuna-7B,大约60GB的CPU内存用于Vicuna-13B。
```bash
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device cpu
```
使用Intel AI加速器AVX512_BF16/AMX加速CPU推理。
```bash
CPU_ISA=amx python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device cpu
```
#### Metal后端(具有Apple Silicon或AMD GPU的Mac计算机)
使用`--device mps`在Mac计算机上启用GPU加速(需要torch >= 2.0)。
使用`--load-8bit`启用8位压缩。
```bash
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device mps --load-8bit
```
Vicuna-7B可以在32GB M1 MacBook上运行,速度为每秒1-2个单词。
#### Intel XPU(Intel数据中心和Arc A系列GPU)
安装[Intel扩展PyTorch](https://intel.github.io/intel-extension-for-pytorch/xpu/latest/tutorials/installation.html)。设置OneAPI环境变量:
```bash
source /opt/intel/oneapi/setvars.sh
```
使用`--device xpu`启用XPU/GPU加速。
```bash
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device xpu
```
Vicuna-7B可以在Intel Arc A770 16GB上运行。
#### Ascend NPU
安装[Ascend PyTorch适配器](https://github.com/Ascend/pytorch)。设置CANN环境变量:
```bash
source /usr/local/Ascend/ascend-toolkit/set_env.sh
```
使用`--device npu`启用NPU加速。
```bash
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可以在具有16GB VRAM的单个GPU上运行,如Nvidia RTX 3090、RTX 4080、T4、V100(16GB)或AMD RX 6800 XT。
```bash
python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --load-8bit
```
除此之外,您可以在上述命令中添加`--cpu-offloading`将不适合您的GPU的权重卸载到CPU内存中。
这需要启用8位压缩,并且需要安装bitsandbytes包,该包仅在Linux操作系统上可用。
#### 更多平台和量化
- 对于AMD GPU用户,在安装FastChat之前,请安装ROCm和[ROCm版本的PyTorch](https://pytorch.org/get-started/locally/)。另见此[帖子](https://github.com/lm-sys/FastChat/issues/104#issuecomment-1613791563)。
- FastChat支持ExLlama V2。见[docs/exllama_v2.md](/docs/exllama_v2.md)。
- FastChat支持使用[GPTQ-for-LLaMa](https://github.com/qwopqwop200/GPTQ-for-LLaMa)的GPTQ 4位推理。见[docs/gptq.md](/docs/gptq.md)。
- FastChat支持使用[mit-han-lab/llm-awq](https://github.com/mit-han-lab/llm-awq)的AWQ 4位推理。见[docs/awq.md](/docs/awq.md)。
- [MLC LLM](https://mlc.ai/mlc-llm/),由[TVM Unity](https://github.com/apache/tvm/tree/unity)编译器支持,在手机、消费级GPU和通过Vulkan、Metal、CUDA和WebGPU的Web浏览器上本地部署Vicuna。
#### 使用modelscope的模型
对于中国用户,您可以通过设置以下环境变量来使用www.modelscope.cn的模型。
```bash
export FASTCHAT_USE_MODELSCOPE=True
```
## 使用Web GUI服务
要使用Web UI进行服务,您需要三个主要组件:与用户交互的Web服务器、托管一个或多个模型的模型工作器,以及协调Web服务器和模型工作器的控制器。您可以在[这里](docs/server_arch.md)了解更多关于架构的信息。
以下是您需要在终端中遵循的命令:
#### 启动控制器
```bash
python3 -m fastchat.serve.controller
```
这个控制器管理分布式工作器。
#### 启动模型工作器
```bash
python3 -m fastchat.serve.model_worker --model-path lmsys/vicuna-7b-v1.5
```
等待进程完成模型加载,您会看到“Uvicorn running on ...”。模型工作器将自动向控制器注册自己。
为了确保您的模型工作器正确连接到您的控制器,请使用以下命令发送测试消息:
```bash
python3 -m fastchat.serve.test_message --model-name vicuna-7b-v1.5
```
您将看到简短的输出。
#### 启动Gradio Web服务器
```bash
python3 -m fastchat.serve.gradio_web_server
```
这是用户将与之交互的用户界面。
按照这些步骤,您将能够使用Web UI为您的模型提供服务。现在您可以打开浏览器并开始与模型聊天了。
如果模型没有显示出来,请尝试重启Gradio Web服务器。
#### (可选):高级功能、可扩展性、第三方UI
- 您可以向单个控制器注册多个模型工作器,这可以用于以更高的吞吐量提供单个模型的服务,或者同时提供多个模型的服务。这样做时,请为不同的模型工作器分配不同的GPU和端口。
```bash
# worker 0
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
# 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标签页。
```bash
python3 -m fastchat.serve.gradio_web_server_multi
```
- 默认的基于huggingface/transformers的模型工作器具有很好的兼容性,但可能速度较慢。如果您想要高吞吐量的批量服务,可以尝试[vLLM集成](docs/vllm_integration.md)。
- 如果您想在自己的UI或第三方UI上托管它,请参见[第三方UI](docs/third_party_ui.md)。
## API
### OpenAI兼容的RESTful API & SDK
FastChat为其支持的模型提供OpenAI兼容的API,因此您可以将FastChat作为OpenAI API的本地替代品使用。
FastChat服务器与[openai-python](https://github.com/openai/openai-python)库和cURL命令兼容。
REST API能够从Google Colab免费层执行,如我们的存储库中提供的[FastChat_API_GoogleColab.ipynb](https://github.com/lm-sys/FastChat/blob/main/playground/FastChat_API_GoogleColab.ipynb)笔记本所示。
见[docs/openai_api.md](docs/openai_api.md)。
### Hugging Face生成API
见[fastchat/serve/huggingface_api.py](fastchat/serve/huggingface_api.py)。
### LangChain集成
见[docs/langchain_integration](docs/langchain_integration.md)。
## 评估
我们使用MT-bench,一组具有挑战性的多轮开放式问题来评估模型。
为了自动化评估过程,我们提示像GPT-4这样的强大LLMs充当评委,评估模型响应的质量。
在[fastchat/llm_judge](fastchat/llm_judge)查看运行MT-bench的说明。
MT-bench是评估您模型的新推荐方式。如果您仍在寻找vicuna博客文章中使用的旧80个问题,请访问[vicuna-blog-eval](https://github.com/lm-sys/vicuna-blog-eval)。
## 微调
### 数据
Vicuna是通过使用从ShareGPT.com公开API收集的大约125K用户共享对话来微调Llama基础模型而创建的。为确保数据质量,我们将HTML转换回markdown,并过滤掉一些不适当或质量低下的样本。此外,我们将长篇对话划分为适合模型最大上下文长度的较小段落。有关清理ShareGPT数据的详细说明,请查看[这里](docs/commands/data_cleaning.md)。
我们不会发布ShareGPT数据集。如果您想尝试微调代码,可以使用[dummy_conversation.json](data/dummy_conversation.json)中的一些虚拟对话运行它。您可以按照相同的格式插入自己的数据。
### 代码和超参数
我们的代码基于[Stanford Alpaca](https://github.com/tatsu-lab/stanford_alpaca),增加了对多轮对话的支持。
我们使用与Stanford Alpaca相似的超参数。
| 超参数 | 全局批量大小 | 学习率 | 时期 | 最大长度 | 权重衰减 |
| --- | ---: | ---: | ---: | ---: | ---: |
| Vicuna-13B | 128 | 2e-5 | 3 | 2048 | 0 |
### 使用本地GPU微调Vicuna-7B
- 安装依赖
```bash
pip3 install -e ".[train]"
```
- 您可以使用以下命令使用4 x A100(40GB)训练Vicuna-7B。将`--model_name_or_path`更新为Llama权重的实际路径,将`--data_path`更新为数据的实际路径。
```bash
torchrun --nproc_per_node=4 --master_port=20001 fastchat/train/train_mem.py \
--model_name_or_path meta-llama/Llama-2-7b-hf \
--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
```
提示:
- 如果您使用的是不受FlashAttention支持的V100,可以使用[xFormers](https://github.com/facebookresearch/xformers)中实现的[memory-efficient attention](https://arxiv.org/abs/2112.05682)。安装xformers并用[fastchat/train/train_xformers.py](fastchat/train/train_xformers.py)替换上面的`fastchat/train/train_mem.py`。
- 如果您遇到由于“FSDP Warning: When using FSDP, it is efficient and recommended... ”导致的内存不足,请查看[这里](https://github.com/huggingface/transformers/issues/24724#issuecomment-1645189539)的解决方案。
- 如果您在模型保存期间遇到内存不足,请查看[这里](https://github.com/pytorch/pytorch/issues/98823)的解决方案。
- 要打开到流行的实验跟踪工具(如Tensorboard、MLFlow或Weights & Biases)的日志记录,请使用`report_to`参数,例如传递`--report_to wandb`打开到Weights & Biases的日志记录。
### 其他模型、平台和LoRA支持
有关训练其他模型(例如FastChat-T5)和使用LoRA的更多说明,请参见[docs/training.md](docs/training.md)。
### 使用SkyPilot在任何云上微调
[SkyPilot](https://github.com/skypilot-org/skypilot)是加州大学伯克利分校构建的框架,用于在任何云(AWS、GCP、Azure、Lambda等)上轻松且成本有效地运行ML工作负载。
在[这里](https://github.com/skypilot-org/skypilot/tree/master/llm/vicuna)找到SkyPilot文档,了解如何使用托管的现货实例来训练Vicuna并节省您的云成本。
## 引用
此存储库中的代码(训练、服务和评估)主要是为或源自以下论文开发的。
如果您发现此存储库有帮助,请引用它。
```
@misc{zheng2023judging,
title={Judging LLM-as-a-judge with MT-Bench and Chatbot Arena},
author={Lianmin Zheng and Wei-Lin Chiang and Ying Sheng and Siyuan Zhuang and Zhanghao Wu and Yonghao Zhuang and Zi Lin and Zhuohan Li and Dacheng Li and Eric. P Xing and Hao Zhang and Joseph E. Gonzalez and Ion Stoica},
year={2023},
eprint={2306.05685},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
```
我们还计划将更多的研究添加到此存储库中。