llama.cpp
详见 https://anakin.ai/blog/how-to-install-llama-cpp/#running-llamacpp
简介
llama.cpp是一个大模型部署工具
大模型的研究分为训练和推理两个部分。
-
训练的过程,实际上就是寻找模型参数,是的模型的损失函数最小化,推理结果最优化的过程
训练完成后,模型的参数就固定了,这时候就可以使用模型进行推理,对外提供服务
llama.cpp主要解决的是推理过程的性能问题,一个能用python写的东西,用cpp来写多半是为了性能。主要有两点优化:
- llama.cpp使用的是C语言实现的机器学习张量库ggml
- llama.cpp提供了模型量化的工具
计算类Python库的优化手段之一就是使用C语言重新实现,这部分性能提升非常明显。另外一个是量化,量化是通过牺牲模型参数的精度来换取模型的推理速度。
llama.cpp提供了大模型量化的工具,可以将模型参数从32位浮点数转换为16位浮点数,甚至是8、4位整数。
同时llama.cpp提供了服务化组件,可以直接对外提供模型的API。
安装
克隆仓库
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
下载模型,参见后面
编译构建项目
仅使用CPU:
make
使用nvidia gpu
:请确保自己安装了CUDA
驱动
make clean && LLAMA_CUBLAS=1 make -j
设置python环境
conda create -n llama-cpp python=3.10
conda activate llama-cpp
运行模型
--n-gpu-layers
==》 GPU’s VRAM capacity for optimal performance.
./main --model your_model_path.ggml --n-gpu-layers 100
查看一下目录:
- main:使用模型进行推理
- quantize:量化模型
- server:提供模型 API 服务
- …
模型下载
这里以llama3为例
llama.cpp 支持转换的模型格式有 PyTorch
的 .pth
、huggingface
的 .safetensors
、还有之前 llamma.cpp 采用的 ggmlv3。
这里我下载的是llama3 的中文模型,也可以自己找自己想下载的
要么直接去huggingface
下载,要么clone
仓库(这个得在终端挂梯子)
直接下载:
https://huggingface.co/shenzhi-wang/Llama3-8B-Chinese-Chat-GGUF-4bit/tree/main
clone:
git clone git@hf.co:shenzhi-wang/Llama3-8B-Chinese-Chat-GGUF-4bita
如果下载的不是gguf
格式的需要先进行转换
-
安装依赖
在
llama.cpp
项目根目录下有requirements.txt
文件,直接安装依赖即可pip install -r requirements.txt
-
转换模型
python convert.py ./models/*
*
表示模型的位置vocabtype
指定分词算法,默认是spm
,如果是bpe
,需要显示指定
量化模型
-
使用
quantize
量化模型quantize
提供了各种精度的量化直接运行可以查看选项和用法
./quantize
大模型推理
在项目根目录下执行
./main -m ./models/llama3-8B/Llama3-8B-Chinese-Chat-q4_0-v2_1.gguf -p "What color is the sun?" -n 1024
或者使用上面量化的模型进行推理,我这里本来就是下载的量化后的模型,直接就是使用的量化后的模型。
main 命令有一系列参数可选,其中比较重要的参数有:
-ins
交互模式,可以连续对话,上下文会保留 -c
控制上下文的长度,值越大越能参考更长的对话历史(默认:512) -n
控制回复生成的最大长度(默认:128) –temp
温度系数,值越低回复的随机性越小
在交互模型下使用
./main -m ./models/llama3-8B/Llama3-8B-Chinese-Chat-q4_0-v2_1.gguf -ins
交互模式下,以对话的形式,有上下文的连续使用大模型。
感觉还是有点慢的(
提供模型API服务
这里有两种方法,使用项目中的server或者第三方工具包。不得不感叹,ai方面的社区是真的丰富!!
- 使用llama.cpp server提供的API服务
前面编译之后,会在 llama.cpp 项目的根目录下生成一个 server 可执行文件,执行下面的命令,启动 API 服务。
./server -m ./models/llama3-8B/Llama3-8B-Chinese-Chat-q4_0-v2_1.gguf --host 0.0.0.0 --port 8080
这样就启动了一个 API 服务,可以使用 curl 命令进行测试。
curl --request POST \
--url http://localhost:8080/completion \
--header "Content-Type: application/json" \
--data '{"prompt": "What color is the sun?","n_predict": 512}'
- 使用第三方工具包提供API服务
在 llamm.cpp 项目的首页 https://github.com/ggerganov/llama.cpp 中有提到各种语言编写的第三方工具包,可以使用这些工具包提供 API 服务,包括 Python、Go、Node.js、Ruby、Rust、C#/.NET、Scala 3、Clojure、React Native、Java 等语言的实现。
以python为例
在os服务器上使用
首先将clone的项目传上去-> 慢
然后将下载的模型传上去-> 更慢
然后就可以运行了
./main -m ./models/llama3-8B/Llama3-8B-Chinese-Chat-q4_0-v2_1.gguf -ins