写在前面

官方的教程链接:https://github.com/ymcui/Chinese-LLaMA-Alpaca/blob/main/README.md

本文记述一下我自己折腾的过程以及过程中踩的一些坑

注意:本文使用的是7B模型,过程中要求电脑有13~15GB的可用内存,请注意内存要求;本文部分内容需要进行魔法上网

模型下载

首先我们需要下载Facebook官方的LLaMA模型权重,在此基础上与中文的LoRA模型进行合并

Facebook官方并没有开源模型权重,同时也不支持商业使用。(但这并不影响我们从第三方下载)

网络上最常见的下载方式是这样,但我测试下来在Windows10 Python3.8.5的情况下并不能顺利运行。

pip install pyllama -U
python -m llama.download --model_size 7B

报错:

ModuleNotFoundError: No module named '_itree'

解决方案:

通过对llama.download进行简单的分析,可以得知其工作原理单纯只是调用目录下的download_community.sh进行下载。通过分析该文件,可以获取到我们需要的下载链接如下:(需要进行魔法上网)

tokenizer.model

https://agi.gpt4.org/llama/LLaMA/tokenizer.model

consolidated.00.pth

https://agi.gpt4.org/llama/LLaMA/consolidated.00.pth

params.json

https://agi.gpt4.org/llama/LLaMA/params.json

文件有点大,耐心等待下载好之后就能去下载中文模型了

鉴于我们想要类ChatGPT的交互方式,所以选择Chinese-Alpaca-Plus-7B模型。同时也需要下载Chinese-LLaMA-Plus-7B模型。下载链接见官方文档

下载好了之后,就可以进行下一步了。

模型的转换和合并

我们现在下载到了初始的英文模型和中文模型,现在需要对其进行转化和合并

注意:这一步需要13~15GB的可用内存,请注意

首先将原版LLaMA模型转换为HF格式

安装依赖:

pip install torch==1.12.0
pip install transformers
pip install sentencepiece
pip install git+https://github.com/huggingface/peft

安装完成后,新建两个文件夹,分别存放输入的模型和输出的模型

其中,存放输入模型的文件夹结构如下:

llama_input
│  tokenizer.model
└─7B
    consolidated.00.pth
    params.json

接着,执行:

python -m transformers.models.llama.convert_llama_weights_to_hf \
       --input_dir llama_input \
       --model_size 7B \
       --output_dir llama_hf_output

该命令执行时间较长,等待完成后进行模型权重合并

从官方Github仓库下载merge_llama_with_chinese_lora.py

下载完成后,执行(注意:--lora_model中的两个目录顺序不可颠倒):

python merge_llama_with_chinese_lora.py \
       --base_model path_to_original_llama_hf_dir \   #上面生成的hf格式模型目录
       --lora_model path_to_chinese_llama_plus_lorapath_to_chinese_alpaca_plus_lora \ #中文LLaMA/Alpaca LoRA解压后文件所在目录
       --output_dir path_to_output_dir #输出目录

等待,然后进入下一步量化部署

llama.cpp量化

首先安装Visual Studio,安装界面勾选“使用C++的桌面开发”

然后把仓库clone下来,并且用cmake进行编译:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
/path/to/visualstudio/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cmake.exe --build . --config Release #将/path/to/visualstudio换为Visual Studio安装路径

编译完成后,bin/Release中应该出现了编译好的exe文件

接下来进行模型的量化,缩小模型的体积

首先在llama.cpp目录中创建zh-models文件夹,将转化后的模型放进去,文件夹结构如下:

zh-models
│  tokenizer.model
└─7B
    consolidated.00.pth
    ggml-model-f16.bin
    params.json

接着进行量化(详细参数见官方文档)

cd bin/Release
./quantize.exe ../zh-models/7B/ggml-model-f16.bin ../zh-models/7B/ggml-model-q4_0.bin 2

等待量化完成,接下来就是最后一步了

llama.cpp部署

接下来,让我们加载并启动模型

仍然在bin/Release目录中,执行(详细参数见官方文档):

./main.exe -m ../zh-models/7B/ggml-model-q4_0.bin --color -f ../prompts/alpaca.txt -ins -c 2048 --temp 0.2 

大功告成!