写在前面
官方的教程链接: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
大功告成!