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安装

  1. MacOS: brew install git-lfs
  2. CentOS: sudo yum install git-lfs
  3. 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)

文章评论

点击排行

本栏推荐

站点信息

  • 微信公众号