一、前言
UC伯克利学者联手CMU、斯坦福等,再次推出一个全新模型70亿/130亿参数的Vicuna,俗称「小羊驼」(骆马)。小羊驼号称能达到GPT-4的90%性能
- github 地址: GitHub - lm-sys/FastChat: An open platform for training, serving, and evaluating large language models. Release repo for Vicuna and FastChat-T5.
本篇文章为博主自行学习vicuna推理部署实战教程,并记录相关坑点,话不多说,直接开干!
二、环境搭建
2.1创建conda的python环境
有大坑!!千万不要用低版本的python!!我最开始用的python3.7,各种bug一堆,建议直接上python=3.10版本,测试无毒,放心食用!
conda create -n vicuna python=3.10 # 创建新环境
source activate vicuna # 激活环境
2.2安装FastChat
2.2.1pip安装
pip install fschat
这里如果你的python版本是3.7或更低,就只能安装fschat==0.1,这会导致后续步骤包冲突。所以这也是为什么笔者建议大家直接用python3.10版本,别恶心自己了QAQ
另外就是transformsers版本要>=4.28.1,不然又报错,手动感谢奔腾大佬帮忙解决~
2.2.2git仓库安装
git clone https://github.com/lm-sys/FastChat.git
cd FastChat
pip install --upgrade pip # enable PEP 660 support
pip install -e .
三、 Vinvua Weights生成
注:本项目使用的Vinvua Weights生成方式参考MiniGPT4
参考链接:https://github.com/Vision-CAIR/MiniGPT-4/blob/main/PrepareVicuna.md
整个流程概括一下就是:
- 下载vicuna权重
- 下载原始LLAMA 7B/13B权重
- 调用fastchat工具利用vicuna和LLAMA的权重来生成本项目真正的需要的working权重
这里要注意你的内存够不够,我下载的是LLAMA-7B的权重文件大约13G,对应的vicuna权重也是13G,同时你还要留够我们真正需要的working权重的空间, 也是13G,所以7B的模型总共需要39G~40G空间。13B的话,我听大佬说LLAMA13B好像要30+G,估算一下总共差不多要快100个G了。
3.1下载Vicuna Weight
可以选择下载13B或7B版本的,下面两个链接选一个下就行了。
git lfs install
git clone https://huggingface.co/lmsys/vicuna-13b-delta-v1.1 # more powerful, need at least 24G gpu memory
git clone https://huggingface.co/lmsys/vicuna-7b-delta-v1.1 # smaller, need 12G gpu memory
我理解这个Vicuna Weight其实是一个“偏差权重”,注意这个“偏差权重”是我自己取的名字,最终我们需要的权重=原始LLAMA权重+偏差权重。他们之所以要这么麻烦的搞是因为LLAMA对自己的权重做了限制,别人无法直接改变LLAMA的权重,所以只能通过引入额外的偏差权重与原始LLAMA权重进行某种运算来得到最终的权重了。
3.2下载LLAMA权重
同样可选13B或7B版本的,且分别与Vicuna-13B、Vicuna-7B对应。
git lfs install
git clone https://huggingface.co/decapoda-research/llama-13b-hf # more powerful, need at least 24G gpu memory
git clone https://huggingface.co/decapoda-research/llama-7b-hf # smaller, need 12G gpu memory
3.3构建我们需要的真正的working weight
当这两个 weight 备好后,我们可以使用Vicuna团队的工具来创建真正的 working weight 。
执行如下命令创建最终 working weight
python -m fastchat.model.apply_delta --base ./llama-7b-hf/ --target ./vicuna/weight/ --delta ./vicuna-7b-delta-v1.1/
以上命令只需要改动--base 、--target和--delta对应的路径,其中base代表原始LLAMA权重所在路径,delta代表vicuna偏差权重、target代表我们最终得到的权重所存放的路径。
注:低CPU内存需加入--low-cpu-mem,可以把大的权重文件分割成多个小份,并使用磁盘作为临时存储。可以使峰值内存保持在16GB以下。不然无法载入vicuna增量文件,CPU内存占满,程序直接被kill,代码参考看下面
python -m fastchat.model.apply_delta --base ./llama-7b-hf/ --target ./vicuna/weight/ --delta ./vicuna-7b-delta-v1.1/ --low-cpu-mem
这里也要注意只有fastchat版本>=0.2.0才支持--low-cpu-mem,总之跟着教程最开始就用python==3.10到这步应该没问题。
四、命令行推理
4.1单GPU推理
下面的命令要求Vicuna-13B大约有28GB的GPU内存,Vicuna-7B大约有14GB的GPU存储器。如果内存不足,请参阅下面的“内存不足”部分。
python -m fastchat.serve.cli --model-path vicuna/weight
参数介绍
usage: cli.py [-h] [--model-path MODEL_PATH] Vicuna Weights 路径[--device {cpu,cuda,mps}] 选择 使用 cpu or cuda 运行[--gpus GPUS] 选择 使用 gpu 型号[--num-gpus NUM_GPUS] 选择 gpu 数量[--max-gpu-memory MAX_GPU_MEMORY] [--load-8bit] 8bit 量化,用于降低显存[--conv-template CONV_TEMPLATE][--temperature TEMPERATURE] [--max-new-tokens MAX_NEW_TOKENS] [--style {simple,rich}] [--debug]
4.2单卡多GPUs推理
python -m fastchat.serve.cli --model-path /path/to/vicuna/weights --num-gpus 2
4.3CPU推理
这只在CPU上运行,不需要GPU。Vicuna-13B需要大约60GB的CPU内存,Vicuna-7B需要大约30GB的CPU存储器。
python -m fastchat.serve.cli --model-path /path/to/vicuna/weights --device cpu
实测效果
在中英文分别进行了测试,看起来还可以,具体实战能力咋样可能还是要拿业务数据测一下。另外7B的模型推理时显存占用稳定在14G左右。
但是测了几轮发现他也有一些问题,比如让他计算数学公式,他就一直卡住重复输出同一句话。
算了给不出来就算了,那你直接给个答案吧,结果给了个6???咋算出来的?一问他还急眼了,直接报错:TypeError: not a string
看来vicuna的数学推理能力还有待增长啊,中英文能力看起来还行。
再测测角色扮演能力,让他扮演《鬼灭之刃》中的炎柱大哥。
说实话,他完全没理解我说了什么,给我扯到火影了,多少有点呆。。。
可能是受限于模型规模,感觉测试效果不尽人意。。。
五、使用Web GUI服务
由于公司网络受限,我这里没有测试,感兴趣的朋友可以参照以下教程自行尝试。
要使用web UI提供服务,您需要三个主要组件:与用户接口的web服务器、托管一个或多个模型的模型工作者,以及协调web服务器和模型工作者的控制器。以下是您的终端中要遵循的命令:1.Launch the controller
python -m fastchat.serve.controller
此控制器管理分布式工作程序。
2.Launch the model worke
python -m fastchat.serve.model_worker --model-path /path/to/vicuna/weights
等待流程完成加载模型,然后看到“Uvicorn running on ...”。
您可以启动多个模型工作程序来同时为多个模型提供服务。模型工人将自动连接到控制器。
要确保模型工作者正确连接到控制器,请使用以下命令发送测试消息:
python3 -m fastchat.serve.test_message --model-name vicuna-13b
3.Launch the Gradio web server
python -m fastchat.serve.gradio_web_server
这是用户将与之交互的用户界面。
通过以下步骤,您将能够使用web UI为您的模型提供服务。您现在可以打开浏览器并与模型聊天了!
参考:LLMsNineStoryDemonTower/Vicuna at f2a3301e146867ae57158a5f623c771b09a570a1 · km1994/LLMsNineStoryDemonTower · GitHub