apple sillicon在llama.cpp下运行llama2过程
苹果芯片下部署大模型算是比较小众,所以写一篇过程,记录一下。llama2的模型比较大,可以通过申请下载。llama2在mac的部署分为两种,其中一种是text generation webui,text generation是比较全面的工具,支持多种模型读取形式,包括transformer,llama.cpp,exllama, 另外一种是直接使用llama.cpp。
首先,讲一下为什么不建议直接用text generation webui的方式搭建,因为text generation的llama.cpp调用是通过llama-cpp-python(一种python wrapper),llama-cpp-python不一定会指向本地的llama.cpp(llama.cpp的更新速度很快,llama-cpp-python不一定跟得上),有可能会导致llama.cpp下转换的llama2模型在text generation webui无法正确读出,或者即使能够使用,但是没有mps加速。hugging-face下TheBloke提供了一批转换过的llama2模型,但是这些在text generation webui下不支持mps加速。fp16下,带mps加速的会比不带mps加速的快3倍。
过程分为几步,环境的搭建,模型性能调优,写提示。
环境搭建
安装的大致顺序如下:
xcode - > vscode -> brew -> python -> github desktop
github desktop把llama.cpp clone到本地,可以随时更新最新版本。
在llama.cpp目录下pip install -r requirement.txt 下载依赖库,并把mps选项打开编译安装。
模型性能调优
默认70b,使用python convert.py 模型路径,把模型转换为ggml。
使用如下./main -m ./models/70B/ggml模型文件.bin -gqa 8 -ngl 1 -t 线程数量 进行试运行。
运行的log如果有metal performance,mps则成功被调用,否则重新打开mps选项并编译llama.cpp。在mps打开的情况下,线程数量不一定是mac的线程最大值为最快,一般来说,t为2/3*tmax为最优。gqa在70b下强制为8,否则会报错。ngl设为一个大于等于1的数值,就可以打开mps加速。
建议多做尝试,并记录速度,把参数调整至合适。
写提示文本
在prompts下复制chat_with_bob.txt的文本,编写提示词,这一部是用来设置启动时的提示词,类似于text generation的角色卡。
最终运行
./main -m ggml模型文件 -gqa 8 -ngl 1 -t 16 -f 提示词 -r "User:" --repeat_penalty 1.0 --color -i
其中,-r "User:"是提示文本的用户轮。这里t为16,我试下来会更快一些。