llama.cpp


llama.cpp

详见 https://anakin.ai/blog/how-to-install-llama-cpp/#running-llamacpp

简介

llama.cpp是一个大模型部署工具

大模型的研究分为训练和推理两个部分。

  • 训练的过程,实际上就是寻找模型参数,是的模型的损失函数最小化,推理结果最优化的过程

    训练完成后,模型的参数就固定了,这时候就可以使用模型进行推理,对外提供服务

llama.cpp主要解决的是推理过程的性能问题,一个能用python写的东西,用cpp来写多半是为了性能。主要有两点优化:

  1. llama.cpp使用的是C语言实现的机器学习张量库ggml
  2. 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.pthhuggingface.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

文章作者: hugo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hugo !
  目录