为你,千千万万遍
本地llama.cpp搭建中文llama-alpaca-13B模型记录

参加了个比赛需要调用语言模型对输入文本进行提取与推理,就找到了目前开源的nlp中表现非常出色的llama二次训练增加中文词表后端的alpaca模型(项目开源地址)。网上的教程大部分都是对7B的模型,以及官网给的教程我本地跑环境的时候也有问题,这里就浅浅记录一下大概流程。

一、下载模型

这个地址下载llama-alpaca-13B模型文件。

项目的模型文件需要分开下载,llama要专门到meta下载,之后整合。但这个链接里是整合后的alpaca-13B模型,就可以省略整合的步骤。

二、整合模型

下载好模型之后,使用官方提供的llama.cpp工具包量化模型。

1
2
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

下载好后,windows还需要下载W64devkit去编译这个文件。

1
2
cmake . -G "MinGW Makefiles"
cmake --build . --config Release

image-20240324170653666

编译好后会生成一些可执行文件在这里。

image-20240324170653666

1
F:/test/ap/test/llama.cpp $ python3 -m pip install -r requirements.txt

这里下载一些依赖的环境。

这之后就可以加载模型了。先在llama.cpp文件夹里面创建文件夹zh-model/13B/,把所有的刚刚从llama-alpaca-13B模型文件(包括配置文件)全都拷贝进去。但是tockenizer.model放外面。

image-20240324171622925

之后回到llama.cpp目录,执行下面这个指令。这个指令用来整合刚刚由于大小问题分割的三个.bin文件,默认生成一个ggml-model-f16.gguf文件(整合后的模型文件,大概24个G)

1
F:/test/ap/test/llama.cpp $ python3 convert.py zh-model/13B/

w64devkit终端会一直跑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[  1/363] Writing tensor token_embd.weight                      | size  55296 x   5120  | type F16  | T+   9
[ 2/363] Writing tensor blk.0.attn_q.weight | size 5120 x 5120 | type F16 | T+ 27
[ 3/363] Writing tensor blk.0.attn_k.weight | size 5120 x 5120 | type F16 | T+ 28
[ 4/363] Writing tensor blk.0.attn_v.weight | size 5120 x 5120 | type F16 | T+ 29
[ 5/363] Writing tensor blk.0.attn_output.weight | size 5120 x 5120 | type F16 | T+ 30
[ 6/363] Writing tensor blk.0.ffn_gate.weight | size 13824 x 5120 | type F16 | T+ 32
[ 7/363] Writing tensor blk.0.ffn_up.weight | size 13824 x 5120 | type F16 | T+ 36
[ 8/363] Writing tensor blk.0.ffn_down.weight | size 5120 x 13824 | type F16 | T+ 41
[ 9/363] Writing tensor blk.0.attn_norm.weight | size 5120 | type F32 | T+ 46
[ 10/363] Writing tensor blk.0.ffn_norm.weight | size 5120 | type F32 | T+ 46
[ 11/363] Writing tensor blk.1.attn_q.weight | size 5120 x 5120 | type F16 | T+ 46
[ 12/363] Writing tensor blk.1.attn_k.weight | size 5120 x 5120 | type F16 | T+ 48
[ 13/363] Writing tensor blk.1.attn_v.weight | size 5120 x 5120 | type F16 | T+ 50
[ 14/363] Writing tensor blk.1.attn_output.weight | size 5120 x 5120 | type F16 | T+ 52
[ 15/363] Writing tensor blk.1.ffn_gate.weight | size 13824 x 5120 | type F16 | T+ 54
[ 16/363] Writing tensor blk.1.ffn_up.weight | size 13824 x 5120 | type F16 | T+ 57
[ 17/363] Writing tensor blk.1.ffn_down.weight | size 5120 x 13824 | type F16 | T+ 61

等他刷完,就整合好模型了。

到这一步其实就可以去使用这个整合好后的alpaca模型去做任务分析了。但是我自己电脑配置不是很好,直接跑能跑一个世纪,就对这个模型做了一下4bit量化,不需要的话可以直接跳过。

三、量化模型

量化这里遇到了个坑,github给的教程是让输入这个指令。但是整合模型生成的文件后缀名是gguf,量化模型生成的文件后缀名也是gguf,官网给的bin。直接输入下面这个指令会报错: failed to quantize: basic_ios::clear: iostream error

1
F:/test/ap/test/llama.cpp $ ./bin/quantize ./zh-model/13B/ggml-model-f16.gguf ./zh-models/13B/ggml-model-q4_0.bin q4_0

解决方法也很简答,输入这个指令,不去指定量化后文件的类型就好了。量化模型文件会默认放在/zh-model/13B/这里

1
F:/test/ap/test/llama.cpp $ ./bin/quantize ./zh-model/13B/ggml-model-f16.gguf  q4_0

四、运行

1
./bin/main -m zh-model/13B/ggml-model-Q4_0.gguf --color -f prompts/alpaca.txt -ins -c 2048 --temp 0.2 -n 256 --repeat_penalty 1.1

就可以跑了

运行结果如下:

image-20240324172802554

完结撒花!

五、本地server使用api调用alpaca

本来以为会很困难,但是看了一下llama.cpp的文档,发现提供了server.exe启动在本地服务器中。具体操作如下:

1
./server.exe -m ./zh-model/13B/ggml-model-Q4_0.gguf -c 2048

w64终端输入这个指令,项目重建了一下,所以不需要再进bin目录找可执行文件。官方也给了其他很多参数可以选择,包括CPU权重,上下文什么的,要求不高只需要使用的话简单执行这个代码就好。

image-20240324172802554

终端加载完模型后,会提示端口和IP地址(当然是本地了),然后可以到浏览器http://ip:port直接打开图形界面如下,输入聊天内容就可以正常对话啦。

6b89697e730795617a3525512ef8d05

既然可以这样调用,那么一定可以api调用,这里就浅放一下apifox的测试:

64224929093a13e6df648106c4115eb

到这里,这个模型放在比赛项目里已经可以正常使用了。时间允许的话会尝试再训练一下模型,如果….毕竟还没有看llama的论文。

六、问题总结

在这个之前的一些python conda什么的就没有再去写了,这个环境官网也有给,网上也有教程。比较坑的是,要注意编译llama.cpp生成的可执行文件的位置,网上教程生成的文件位置和我编译出来的位置不一样,要自己修改路径。以及网上教程什么的生成的模型文件都是.bin,可能因为我在做的是13B,网上的都是7B ?我这边生成的模型文件都是.gguf文件。所以后面会遇到这种文件类型不同报错的问题。

最后4bit量化后的运行速度感觉还能接受,8核cpu电脑100%左右利用率大概三十秒能够刷出来回复,使用下来的体验也和gpt-3,星火之类的差不多,但这只是13B。还有33B和70B配置问题没有选择去用。真的是感觉是开源nlp里非常顶尖的了,有时间去看一下llama的论文,以上。

NLP llama alpaca pytorch
NLP接口调用记录
中文llama-alpaca论文阅读记录
© 2020 Gina
Powered by hexo | Theme is blank
Title - Artist
0:00