自学内容网 自学内容网

FastChat


一、关于 FastChat

用于训练、服务和评估大型语言模型的开放平台。Vicuna和Chatbot Arena的发布repo。


FastChat是一个开放平台,用于训练、服务和评估基于大型语言模型的聊天机器人。

  • FastChat支持 Chatbot Arena(https://chat.lmsys.org/),为70多个LLM提供超过1000万的聊天请求。
  • Chatbot Arena 已经从并排的LLM战斗中收集了超过500K的人类选票,以编制在线LLM Elo排行榜

FastChat的核心功能包括:

  • 最先进模型(例如Vicuna、MT-Bench)的训练和评估代码。
  • 具有Web UI和与OpenAI兼容的RESTful API的分布式多模型服务系统。

Demo 演示:

https://github.com/lm-sys/FastChat/raw/main/assets/demo_narrow.gif


二、安装


方法1:使用pip

pip3 install "fschat[model_worker,webui]"

方法2:从源码

1、克隆此存储库并导航到FastChat文件夹

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

如果您在Mac上运行:

brew install rust cmake

2、安装包

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

三、模型权重


1、Vicuna 权重

Vicuna基于 Llama 2 ,应该在 Llama 的model license 下使用。

您可以使用下面的命令开始聊天。它会自动从 Hugging Face 存储库下载权重。 下载的权重存储在用户主文件夹的.cache文件夹中(例如~/.cache/huggingface/hub/<model_name>)。

在下面的“使用命令行界面进行推理”部分中查看更多命令选项以及如何处理内存不足。

注:16K版本需要transformers>=4.31

大小聊天命令Hugging Face 回购
7Bpython3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5lmsys/vicuna-7b-v1.5
7B-16kpython3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5-16klmsys/vicuna-7b-v1.5-16k
13Bpython3 -m fastchat.serve.cli --model-path lmsys/vicuna-13b-v1.5lmsys/vicuna-13b-v1.5
13B-python3 -m fastchat.serve.cli --model-path lmsys/vicuna-13b-v1.5-16klmsys/vicuna-13b-v1.5-7b
33Bpython3 -m fastchat.serve.cli --model-path lmsys/vicuna-33b-v1.3

旧权重:请参阅 docs/vicuna_weights_version.md 了解所有版本的权重及其差异。


2、其他模型

除了Vicuna,我们还发布了两个额外的模型:LongChat 和 FastChat-T5。
您可以使用下面的命令与他们聊天。他们会自动从 Hugging Face 存储库下载权重。

模型聊天命令Hugging Face 回购
LongChat-7Bpython3 -m fastchat.serve.cli --model-path lmsys/longchat-7b-32k-v1.5lmsys/Longchat-7b-32k
FastChats-T5-3Bpython3 -m fastchat.serve.cli --model-path lmsys/fastchat-t5-3b-v1.0lmsys/Fast chat-t5-3b-v1.0

四、使用命令行界面进行推理

在这里插入图片描述

(实验性功能:您可以指定--style rich以启用富文本输出,并为某些非ASCII内容提供更好的文本流质量。这在某些终端上可能无法正常工作。)


1、支持的模型

FastChat支持广泛的模型,包括LLama 2、Vicuna、羊驼、百泽、ChatGLM、Dolly、Falcon、FastChat-T5、GPT4ALL、Guaco、MTP、OpenAssistant、OpenChat、RedPajama、StableLM、WizardLM、xDAN-AI等。

请在此处查看支持的模型和说明的完整列表以添加新模型。


2、单GPU

下面的命令需要14GB的GPU内存用于 Vicuna-7B 和 28GB 的GPU内存用于 Vicuna-13B。
如果您没有足够的内存,请参阅下面的 “Not Enough Memory” section
--model-path可以是本地文件夹或HugingFace存储库名称。

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

3、多 GPU

您可以使用模型并行性从同一台机器上的多个GPU 聚合GPU内存。

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --num-gpus 2

小贴士: 有时,huggingface/转换器中的“自动”设备映射策略并不能完美平衡多个GPU之间的内存分配。

您可以使用--max-gpu-memory来指定每个GPU用于存储模型权重的最大内存。
这允许它为激活分配更多内存,因此您可以使用更长的上下文长度或更大的批处理大小。例如,

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --num-gpus 2 --max-gpu-memory 8GiB

4、仅 CPU

这只在中央处理器上运行,不需要图形处理器。
Vicuna-7B 需要大约 30GB 的中央处理器内存, Vicuna-13B 需要大约 60GB 的中央处理器内存。

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device cpu

使用英特尔AI加速器 AVX512_BF16/AMX 加速CPU推理。

CPU_ISA=amx python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device cpu

5、Metal 后端(带有Apple Silicon 或 AMD GPU 的 Mac计算机)

使用--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个单词/秒运行。


6、英特尔 XPU(英特尔数据中心和Arc A系列GPU)

安装适用于PyTorch的Intel扩展。设置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上运行。


7、Ascend NPU

安装 Ascend PyTorch适配器。设置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上运行。


8、内存不够

如果没有足够的内存,可以通过在上面的命令中添加--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 操作系统上可用。


9、更多平台和量化


10、使用 modelscope 中的模型

对于中国用户,您可以通过指定以下环境变量来使用来自 www.modelscope.cn 的模型。

export FASTCHAT_USE_MODELSCOPE=True

五、使用Web GUI提供服务

在这里插入图片描述


要使用Web UI,您需要三个主要组件:与用户交互的Web服务器、托管一个或多个模型的模型工作者以及协调Web服务器和模型工作者的控制器。
您可以在此处了解有关架构的更多信息。

以下是终端中要遵循的命令:


1、启动控制器

python3 -m fastchat.serve.controller

该控制器管理分布式工作人员。


2、启动 model worker(s)

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

您将看到一个简短的输出。


3、启动Gradio Web服务器

python3 -m fastchat.serve.gradio_web_server

这是用户将与之交互的用户交互界面。

通过遵循这些步骤,您将能够使用Web UI为您的模型提供服务。
您现在可以打开浏览器并与模型聊天。
如果模型没有显示,请尝试重新启动gradio Web服务器。


4、(可选):高级功能、可扩展性、第三方UI

  • 您可以将多个模型工作者注册到单个控制器,该控制器可用于服务具有更高吞吐量的单个模型或同时服务多个模型。这样做时,请为不同的模型工作者分配不同的GPU和端口。
# 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

  • 您还可以启动多选项卡图形服务器,其中包括Chatbot Arena选项卡。
python3 -m fastchat.serve.gradio_web_server_multi

  • 默认的基于huggingface/转换器的模型工作者兼容性很好,但可能很慢。
    如果你想要高吞吐量的批量服务,你可以尝试vLLM集成
  • 如果要将其托管在自己的UI或第三方UI上,请参阅第三方UI

六、API


1、兼容 OpenAI 的 RESTful API和SDK

FastChat为其支持的模型提供与OpenAI兼容的API,因此您可以使用FastChat作为OpenAI API的本地插件替代品。
FastChat服务器兼容openai-python库和cURL命令。
REST API能够从Google Colab免费层执行,如我们的存储库中提供的FastChat_API_GoogleColab. ipynb笔记本中所示。
请参见docs/openai_api.md


2、Hugging Face 生成API

快速聊天/服务/huggingface_api.py


3、LangChain 集成

请参见docs/langchain_integration


七、Evaluation

我们使用 MT-bench,一组具有挑战性的多轮开放式问题来评估模型。
为了使评估过程自动化,我们促使像GPT-4这样的强大LLM充当法官并评估模型响应的质量。
请参阅在Fast chat/llm_judge上运行MT-bench的说明。

MT-bench是对您的模型进行基准测试的新推荐方法,如果您仍在寻找小羊驼博客文章中使用的旧80个问题,请访问小羊驼-博客-世纪


八、微调


1、数据

Vicuna是通过使用公共API从ShareGPT.com收集的大约125K用户共享对话微调Llama基础模型创建的。为了确保数据质量,我们将超文本标记语言转换回降价,并过滤掉一些不合适或低质量的样本。此外,我们将冗长的对话分成适合模型最大上下文长度的较小片段。有关清理ShareGPT数据的详细说明,请查看此处

我们不会发布ShareGPT数据集。如果您想尝试微调代码,可以在dummy_conversation. json中使用一些虚拟对话运行它。您可以遵循相同的格式并插入自己的数据。


2、代码和超参数

我们的代码基于Stanford Alpaca,额外支持多轮对话。 我们使用了类似于斯坦福羊驼的超参数。

超参数全局批量大小学习率Epochs最大长度重量衰减
Vicuna-13B1282e-5320480

3、使用本地GPU微调Vicuna-7B

  • 安装依赖
pip3 install -e ".[train]"

  • 您可以使用以下命令使用4 x A100(40GB)训练Vicuna-7B。

更新--model_name_or_path骆驼权重的实际路径--data_path数据的实际路径。

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

小贴士:

  • 如果你使用的是V100,它不受闪存关注的支持,你可以使用xFormers中实现的内存高效关注
    fastchat/train/train_mem.py上面的安装和替换为快速聊天/火车/train_xformers.py
  • 如果由于“FSDP警告:使用FSDP时,它是有效的,建议使用…”而导致内存不足,请参阅此处的解决方案。
  • 如果在模型保存期间遇到内存不足,请参阅此处的解决方案。
  • 要将日志记录打开到流行的实验跟踪工具,如Tensorboard、MLFlow或权重和偏差,请使用report_to参数,例如传递--report_to wandb以打开日志记录到权重和偏差。

4、其他模型、平台和LoRA支持

训练其他模型(例如FastChat-T5)和使用LoRA的更多说明在docs/training.md中。


5、使用SkyPilot在任何云上进行微调

SkyPilot是加州大学伯克利分校构建的框架,可在任何云上(AWS、GCP、Azure、Lambda等)轻松且经济高效地运行ML工作负载。
找到 SkyPilot留档在这里使用托管现场实例来训练Vicuna和节省您的云成本。


2024-07-17(三)


原文地址:https://blog.csdn.net/lovechris00/article/details/140489689

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!