Linux系统安装llama-cpp并部署ERNIE-4.5-0.3B

Linux系统安装llama-cpp【CPU】

如果git拉取过慢,又不知道怎么配置代理,可以使用此网站:Github Proxy 文件代理加速

复制代码
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
# 配置构建系统(生成 Makefile)
cmake -B build 
# 编译出可执行文件
cmake --build build --config Release

下载模型

从huggingface下载ERNIE-4.5-0.3B-PT-Q4_K_M这个:https://huggingface.co/unsloth/ERNIE-4.5-0.3B-PT-GGUF

保存至指定位置,这里假设模型保存至/data/coding/ERNIE-4.5-0.3B-PT-Q4_K_M.gguf

启动服务

注意llama-server这里用绝对路径,模型也可以用绝对路径,直接llama-server或者在bin里面llama-server会识别不出来~

复制代码
/data/coding/llama.cpp/build/bin/llama-server -m /data/coding/ERNIE-4.5-0.3B-PT-Q4_K_M.gguf --port 8081

调用服务

复制代码
# pip install openai -i https://repo.huaweicloud.com/repository/pypi/simple
​
from openai import OpenAI
​
# 指向本地运行的 llama-server
client = OpenAI(
    base_url="http://localhost:8081/v1",  # 注意:必须包含 /v1
    api_key="not-needed"  # llama-server 不需要 API key,但必须传一个值(不能为 None)
)
​
# 发起聊天补全请求
stream = False  # 改为 True 可以流式输出
​
response = client.chat.completions.create(
    model="local-model",  # 这个字段其实会被忽略,但必须传
    messages=[
        {"role": "system", "content": "你是一个乐于助人的助手。"},
        {"role": "user", "content": "请用中文写一首关于秋天的诗。"}
    ],
    temperature=0.7,
    max_tokens=512,
    stream=stream,
)
​
if stream:
    for chunk in response:
        print(chunk.choices[0].delta.content or "", end="", flush=True)
else:
    print(response.choices[0].message.content)

其他补充

查看模型运行在GPU/CPU

llama-server 启动时的输出日志(最直接)

复制代码
system_info: n_threads = 8                                      # 使用 8 个 CPU 线程
llama.cpp: loading model from /path/to/your-model.gguf
llama_model_loader: loaded meta data with 11 key-value pairs    # 模型元数据
llama_model_loader: VBMI 160 gguf file detected
llama_model_loader: loading model: q4_k - mmp 0.000000         # 量化类型
llama_model_loader:     tensor     0: output          [f32]     4096   32000 - CPU
llama_model_loader:     tensor     1: token_embd     [f32]     32000    4096 - CPU
llama_model_loader:     tensor     2: output_norm    [f32]     4096         - CPU
llama_model_loader:     tensor     3: blk.0.attn_q   [f16]     4096    4096 - GPU
llama_model_loader:     tensor     4: blk.0.attn_k   [f16]     4096    4096 - GPU
llama_model_loader:     tensor     5: blk.0.attn_v   [f16]     4096    4096 - GPU
...
llama_init_backend: using CUDA backend

要判断你当前运行的 llama.cpp 模型是运行在 CPU 还是 GPU(如 CUDA、Vulkan、Metal 等) 上,主要看llama_init_backend: using CUDA backend这行

输出内容 含义
using CUDA backend 正在使用 NVIDIA GPU(CUDA)
using Metal backend macOS 上使用 Apple GPU(M1/M2)
using Vulkan backend 使用 Vulkan GPU(Linux/Windows)
using CPU backend 或没显示 backend 仅使用 CPU
tensor ... - GPU 某些层已卸载到 GPU
tensor ... - CPU 该层在 CPU 上运行

✅ 如果你看到 部分 tensor 在 GPU 上 ,说明是 混合模式(CPU + GPU)推理 ,这是 llama.cpp 的典型做法。

检查是否启用 GPU 支持

检查是否启用了 CUDA(NVIDIA),如果编译时没有开启这些选项,即使有 GPU 也无法使用

复制代码
cmake -B build -DGGML_CUDA=ON

👉 查看你的构建目录是否启用了 GPU:

复制代码
grep -i cuda build/CMakeCache.txt
grep -i metal build/CMakeCache.txt
grep -i vulkan build/CMakeCache.txt

如果有输出类似如下,说明支持 CUDA,如果为OFF则说明不支持

复制代码
GGML_CUDA:BOOL=ON
启用GPU版本

注意这里创建配置时候需要根据卡型指定其CUDA 计算能力,否则后面可能报错,这里我用的是RTX8000,其计算能力为sm_75

各系列 NVIDIA GPU 对应的 CMAKE_CUDA_ARCHITECTURES 值如下

这是在使用 CMake 编译 llama.cpp 并启用 CUDA 时,必须设置的关键参数,它告诉编译器为目标 GPU 架构生成优化的代码。

GPU 系列 (代号) 常见型号举例 计算能力 (Compute Capability) CMAKE_CUDA_ARCHITECTURES
Pascal GTX 1080, GTX 1070, Titan Xp 6.1 61
Volta Tesla V100 7.0 70
Turing RTX 2080 Ti , RTX 2070 , Quadro RTX 8000 7.5 75
Ampere RTX 3090, RTX 3080, A100 8.0 / 8.6 8086
Ada Lovelace RTX 4090, RTX 4080 8.9 89
Hopper H100 9.0 90
复制代码
# 进入 llama.cpp 目录
cd /data/coding/llama.cpp
# 清理旧构建(可选)
rm -rf build
# 创建构建目录并配置(启用 CUDA)
cmake -B build -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=75
# 编译(在 build 目录下运行 make)
make -C build -j$(nproc)
# 或者用 cmake 命令编译
cmake --build build --config Release --target all -j$(nproc)

再启动模型,就会发现是在GPU版本部署的了