Home / PostsPost
基于 LLaMA 模型的 vicuna-7b 安装教程
嘟噜聪2023/05/22 22:53:01 [vicuna] [chatglm] [chatgpt] [llama] 2401人已阅
简介 基于FastChat实现web或命令行交互## 开始实施实施之前请先保证你机器有足够的内存和CPU,最好能有16核CPU,64G内存。这里就不介绍 python环境及显卡区动和cuda
基于 LLaMA 模型的 vicuna-7b 安装教程
自从OpenAI发布ChatGPT3.5以后,各类开源版的 LLM 大语言模型都发布了出来。大模型推理成本是昂贵的,且很多敏感的数据出于安全问题也不好提供给ChatGPT,因此开发能够私有化部署的LLM的需求就成了各大企业或个人的必须要做的事情。
本文简单介绍Vicuna-7B的部署方式、Vicuna-13B与Vicuna-7B的部署方式一样,这里就不再多作介绍了。
前提
实施之前请先保证你机器有足够的内存和CPU,最好能有16核CPU,64G内存。
这里就不介绍 python环境及显卡区动和cuda驱动的安装了,后面有机会再补上。
本文主要介绍基于FastChat实现web或命令行交互
FastChat
FastChat 是一个开放平台,用于训练、服务和评估基于大型语言模型的聊天机器人。 核心功能包括: 最先进模型(例如,Vicuna、FastChat-T5)的权重、训练代码和评估代码。 具有 Web UI 和与 OpenAI 兼容的 RESTful API 的分布式多模型服务系统。
FastChat 所兼容以下模型:
- Vicuna, Alpaca, LLaMA, Koala
- lmsys/fastchat-t5-3b-v1.0
- BlinkDL/RWKV-4-Raven
- databricks/dolly-v2-12b
- FreedomIntelligence/phoenix-inst-chat-7b
- h2oai/h2ogpt-gm-oasst1-en-2048-open-llama-7b-preview-300bt-v2
- mosaicml/mpt-7b-chat
- OpenAssistant/oasst-sft-1-pythia-12b
- project-baize/baize-lora-7B
- StabilityAI/stablelm-tuned-alpha-7b
- THUDM/chatglm-6b
- Neutralzz/BiLLa-7B-SFT
先把项目环境都搭建好
安装fastchat
$ pip3 install fschat
下载LLaMA模型
转换脚本
将转换脚本下载到当前目录:
$ wget https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/convert_llama_weights_to_hf.py
方案一
获取llama权重:
$ pip3 install pyllama -U
$ python -m llama.download --model_size 7B
该方案会在当前目录下下载以下几个文件:
.
|-- convert_llama_weights_to_hf.py
|-- output
| `-- tmp
|-- pyllama_data
| |-- 7B
| | |-- checklist.chk
| | |-- consolidated.00.pth
| | `-- params.json
| |-- tokenizer_checklist.chk
| `-- tokenizer.model
|-- tokenizer_checklist.chk
`-- tokenizer.model
在当前目录下的pyllama_data/7B/
下的文件就是我LLaMA的模型权重
方案二
直接使用wget
命令下载
$ mkdir -p pyllama_data/7B/
$ wget --continue --progress=bar:force https://agi.gpt4.org/llama/LLaMA/7B/consolidated.00.pth -O pyllama_data/7B/consolidated.00.pth
$ wget --continue --progress=bar:force https://agi.gpt4.org/llama/LLaMA/7B/params.json -O pyllama_data/7B/params.json
$ wget --continue --progress=bar:force https://agi.gpt4.org/llama/LLaMA/7B/checklist.chk -O pyllama_data/7B/checklist.chk
$ wget --progress=bar:force https://agi.gpt4.org/llama/LLaMA/tokenizer.model -O ./pyllama_data/tokenizer.model
$ wget --progress=bar:force https://agi.gpt4.org/llama/LLaMA/tokenizer_checklist.chk -O ./pyllama_data/tokenizer_checklist.chk
下载Vicuna模型
建议设置环境变量GIT_LFS_SKIP_SMUDGE
让跳转下载模型过程,这种大文件我们通过Git LFS进行下载,GitLFS的安装参考:
GitLFS安装
- MacOS:
brew install git-lfs
- CentOS:
sudo yum install git-lfs
Ubuntu:
sudo apt-get install git-lfs
$ GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/lmsys/vicuna-7b-delta-v1.1.git
进入到vicuna-13b-delta-v1.1/
目录
$ cd vicuna-13b-delta-v1.1/
$ git lfs install
$ git lfs pull
等下载完成...
生成羊驼模型
查看当前目录下的所有文件:
.
|-- convert_llama_weights_to_hf.py
|-- output
| `-- tmp
|-- pyllama_data
| |-- 7B
| | |-- checklist.chk
| | |-- consolidated.00.pth
| | `-- params.json
| |-- tokenizer_checklist.chk
| `-- tokenizer.model
|-- tokenizer_checklist.chk
`-- tokenizer.model
|--- vicuna-7b-delta-v1.1/
| |-- config.json
| |-- generation_config.json
| |-- pytorch_model-00001-of-00002.bin
| |-- pytorch_model-00002-of-00002.bin
| |-- pytorch_model.bin.index.json
| |-- special_tokens_map.json
| |-- tokenizer_config.json
| `-- tokenizer.model
执行LLaMA模型转换
$ python3 convert_llama_weights_to_hf.py --input_dir ./pyllama_data/ --model_size 7B --output_dir ./output/7B
生成小羊驼
$ python3 -m fastchat.model.apply_delta --base ./output/7B --target vicuna_data/vicuna-7b-v1.1 --delta ./vicuna-7b-delta-v1.1/
$ ls -alh ./vicuna_data/vicuna-7b-v1.1
如果有报错,尝试安装pip3 install transformers
可能会报这一个错
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
1. Downgrade the protobuf package to 3.20.x or lower.
2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).
两种方案,要么升级一下protoc,要么设置环境变量export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
启动服务
fastchat.serve.controller
该控制器管理分布式人作程序
fastchat.serve.model_worker
等到该过程完成加载模型,您会看到“Uvicorn running on ...”。 模型将自己注册到控制器。
fastchat.serve.gradio_web_server
这是用户将与之交互的用户界面。
fastchat.serve.openai_api_server
这是启动API Server端服务。
启动脚本参考:
#!/bin/bash
source /opt/train-cong/fastchat/mpt-7b/tutorial-env/bin/activate
# server
nohup python3 -m fastchat.serve.controller >> ./server.log 2>&1 &
while [ `grep -c "Uvicorn running on" ./server.log` -eq '0' ];do
sleep 1s;
echo "wait server running"
done
echo "server running"
# worker
nohup python3 -m fastchat.serve.model_worker --model-name vicuna-7b-v1.1 --model-path ./vicuna_data/vicuna-7b-v1.1 --num-gpus 4 >> ./worker.log 2>&1 &
while [ `grep -c "Uvicorn running on" ./worker.log` -eq '0' ];do
sleep 1s;
echo "wait worker running"
done
echo "worker running"
# webui
#python3 -m fastchat.serve.openai_api_server --host 0.0.0.0 --port 8888
python3 -m fastchat.serve.gradio_web_server
如果你有足够够的GPU和内存则可以启动多个 fastchat.serve.model_worker 注册不同的模型到controller
多个GPU
--num-gpus
: 指定gpu数量--device
: 运心模型的驱动cpu
: 通过cpu进行运算mps
: 如果您是macos,在 Mac 计算机上启用 GPU 加速(需要 torch >= 2.0)
--load-8bit
: 打开 8 位压缩。$ python3 -m fastchat.serve.model_worker --model-name vicuna-7b-v1.1 ./vicuna_data/vicuna-7b-v1.1 --num-gpus 4 $ python3 -m fastchat.serve.model_worker --model-name vicuna-7b-v1.1 ./vicuna_data/vicuna-7b-v1.1 --device cpu $ python3 -m fastchat.serve.model_worker --model-name vicuna-7b-v1.1 ./vicuna_data/vicuna-7b-v1.1 --device mps --load-8bit
也可以使用环境变量CUDA_VISIBLE_DEVICES
选写哪块GPU卡运行应的模型
$ CUDA_VISIBLE_DEVICES=3 python3 -m fastchat.serve.model_worker --model-name vicuna-7b-v1.1 ./vicuna_data/vicuna-7b-v1.1
上面表示启用第4块GPU卡运行vicuna-7b-v1.1
模型。
启动
$ ./start.sh
很赞哦! (2)