使用llama.cpp在纯CPU环境中进行大模型量化和部署

使用llama.cpp在纯CPU环境中进行大模型量化和部署

1. llama.cpp环境的安装

  • 克隆远程llama.cpp项目

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

    llamacpp项目克隆

    若网络环境不同或想用本文一致的llamacpp版本,可以在此处直接下载llamacpp工程: llamacpp

  • 安装Python环境依赖

    • 使用conda创建Python虚拟环境(Python >= 3.10)
    conda create --name llamacpp python=3.11 -y

    创建Python虚拟环境

    • 安装依赖包
    conda activate llamacpp
    pip install -r ./requirements.txt

    安装Python依赖

  • 构建项目

    • 创建构建目录
    mkdir build
    cd build
    • 配置(纯 CPU,无 CUDA)
    cmake .. -DLLAMA_CUDA=OFF -DLLAMA_METAL=OFF -DLLAMA_HIPBLAS=OFF -DCMAKE_BUILD_TYPE=Release

    • 编译(使用 8 线程加速)
    cmake --build . --config Release -j8

    llamacpp项目编译

    编译成功后./build/bin目录下有llama-quantizellama-server的可执行文件:

    llama-quantize和llama-server可执行文件

2. 基于llama.cpp的大模型量化(以Qwen3-30B-A3B模型为例)

  • 下载模型

    若没有该模型,可以使用modelscope命令行工具从modelscope官网进行下载:

    conda activate modelscope # modelscope为conda中安装了modelscope包的Python虚拟环境
    modelscope download Qwen/Qwen3-30B-A3B --local_dir ./Qwen3-30B-A3B/
  • 若原始模型不是gguf格式,则需要先转换成gguf格式:

    # 基础转换命令
    python convert_hf_to_gguf.py ./your-model-path --outfile ./output-model.gguf
    # 示例
    python convert_hf_to_gguf.py /home/qll/models/Qwen3-30B-A3B/ --outfile ./Qwen3-30B-A3B_f16.gguf

    gguf格式转换1

    gguf格式转换2

  • 模型量化

    # 4bit量化命令
    ./build/bin/llama-quantize ./output-model.gguf ./output-model-q4_k_m.gguf Q4_K_M
    # 示例
    ./build/bin/llama-quantize ./Qwen3-30B-A3B_f16.gguf ./Qwen-30B-A3B-q4_k_m.gguf Q4_K_M

    模型量化1

    模型量化2

    量化类型:

    • Q4_0:基础4bit量化
    • Q4_K_S:4bit小模型优化
    • Q4_K_M:4bit中等模型优化(推荐),平衡性能和精度

3. 基于llama.cpp的模型部署

# 支持openai api兼容的方式进行
./build/bin/llama-server -m qwen3-32b-a3b-q4_k_m.gguf --host 0.0.0.0 --port 8080 -c 4096 --threads 8 --cont-batching

模型部署1

模型部署2

4. 测试

  • 使用/v1/models接口获取可用的模型

    curl -X GET http://10.0.14.60:8080/v1/models

    获取可用模型

  • 使用/v1/chat/completions接口进行会话

    curl -X POST http://10.0.14.60:8080/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "Qwen-30B-A3B-q4_k_m.gguf", "messages": [{"role": "user", "content": "/no_think\n你好,你是谁"}], "stream": false}'

    调用会话接口

发表回复