使用llama.cpp推理大模型

llama.cpp

大模型有训练和推理两部分,训练会产生一个大模型文件,这些文件通常包含了模型架构以及每个神经元的权重和偏置值。llama.cpp主要用在推理部分,它是一个是一个使用c++开发的大模型推理框架。它可以在普通家用电脑上完成推理,只需要CPU和几个G的内存就能运行。

编译安装

参考 https://github.com/ggerganov/llama.cpp?tab=readme-ov-file#build

  1. 拉取代码

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

    对于非Apple Silicon系列芯片推理时如果有问题可以在编译时禁用GPU。编译时使用LLAMA_NO_METAL=1或者LLAMA_METAL=OFF参数。https://github.com/ggerganov/llama.cpp?tab=readme-ov-file#metal-build

    1
    make

编译完成会参数mianquantize文件,前者用来运行大模型推理,后者用来模型向量化处理。

模型转换

一般大模型文件都托管在Hugging Face上面。一般情况下llama.cpp不能直接使用这些大模型进行推理,我们需要先对这些模型进行转换,转为ggml格式。支持转换的大模型列表参考官方README国产大模型百川、千问等都支持转为ggml格式。

转换使用llama.cpp项目内的convert.py或者convert-hf-to-gguf.py处理,详细步骤参考 https://github.com/ggerganov/llama.cpp?tab=readme-ov-file#prepare-data--run。这里对Python版本有一定的要求,模块的依赖在requirements.txtrequirements目录下。

一般情况先使用convert.py转换,如果转换失败在使用convert-hf-to-gguf.py尝试处理。注意,使用convert-hf-to-gguf.py时需要我们安装额外的依赖,依赖列表在requirements/requirements-convert-hf-to-gguf.txt

转换后的模型我们需要进行向量化,使用./quantize对转换后的模型进行向量化。向量化后的模型就可以进行推理了。

和llama.cpp类似的工具

Hugging Face 镜像

  • modelscope

    可以直接使用git clone拉取大模型。注意,需要安装LFS

  • hf-mirror

    配置镜像后可以使用huggingface官方命令行huggingface-cli工具下载模型文件

    1
    export HF_ENDPOINT=https://hf-mirror.com

名词解释

  • B
    大模型权重参数单位,1B表示十亿。例如有7B14B表示参数有70亿和140亿,参数越大推理时耗费的资源越多

  • FP16、int8、int4

    FP16、int8、int4 等通常指的是模型权重、激活值或梯度的数值表示方式,表示数值精度。

    FP16 指的是 16 位浮点数(即半精度浮点数),每个数值占用 2 字节。

    int8 指的是 8 位整数,每个数值占用 1 字节。

    1B的FP16精度的大模型为1000,000,000 * 2Byte ≈ 2GB,1B的int8精度的大模型为1000,000,000 * 1Byte ≈ 1GB

  • Quantization (量化)

    量化 是一种通过降低数值表示精度(如将 FP32 降为 int8)的技术,以减少内存和计算资源的消耗。

    量化后的模型可以在内存占用和计算复杂度方面更高效,尤其是在推理阶段显著提高速度。

本站采用「署名 4.0 国际」进行许可。