一、安装系统编译依赖

sudo apt update && sudo apt install -y build-essential git cmake gcc g++ libopenblas-dev libcurl4-openssl-dev

二、拉取源码

git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp

三、编译开启 CUDA 硬件加速

两种编译方式任选一种,推荐 CMake 方式更稳定:

方式 1:CMake 编译(推荐)

# 清理旧构建文件(如果之前编译过)
rm -rf build
# 开启CUDA编译
cmake -B build -DGGML_CUDA=ON -DCMAKE_BUILD_TYPE=Release
# 多核编译
cmake --build build -j$(nproc)

方式 2:Make 简易编译

make CUDA=1 -j$(nproc)

编译完成后:

  • CMake 产物目录:build/bin/(main、llama-server、quantize)
  • Make 产物:项目根目录直接有可执行文件

四、conda 环境(处理模型转换脚本)

1. 创建环境

conda create -n llama python=3.11 -y
conda activate llama

2. 安装转换依赖

pip install -r requirements.txt
pip install torch transformers sentencepiece accelerate protobuf

五、模型格式转换

#进入工作目录
cd llama.cpp/build/bin
#将huggingface格式的模型转化从gguf
python3 convert_hf_to_gguf.py /path/to/model_file \
--outtype f16 --outfile /path/to/model.gguf

六、启动 llama-server

# CMake编译用这条
./build/bin/llama-server \
-m models/你的模型.Q4_K_M.gguf \
-ngl 99 \
-c 16384 \
--max-concurrent-requests 8 \
--host 0.0.0.0 \
--port 8080

参数说明:

  • -ngl 99:全部层加载到 GPU 加速
  • -c 16384:单用户上下文窗口,可改成 32768
  • --max-concurrent-requests 8:限制同时并发人数,防止显存溢出
  • --host 0.0.0.0 内网其他机器可访问

在浏览器上打开下列链接,即可开始对话

http://localhost:8080

七、其他相关命令

7.1、核心可执行文件清单

  1. main:本地命令行交互式对话、单次提问测试
  2. llama-server:OpenAI 兼容 API 服务(公司内网多人必用)
  3. quantize:GGUF 模型量化压缩(4bit/8bit)
  4. llama-bench:显卡性能跑分、显存占用测试
  5. perplexity:计算模型困惑度,评估模型效果
  6. embedding:文本向量化(RAG 知识库向量生成)
  7. convert-hf-to-gguf.py:Python 脚本,HF 模型转 GGUF(不在 bin 里,项目根目录)

7.2、main 命令(本地调试、单次推理)

基础通用参数

参数作用
-m 模型路径必填,加载 GGUF 模型
-ngl NGPU 加速层数,RTX3090 填 99,全部放显存
-c N上下文窗口大小,推荐 8192/16384/32768
-p "提示词"单次输入问题,直接输出结果后退出
-i交互式聊天,持续多轮对话
-t NCPU 线程数,-t $(nproc) 拉满
--color终端彩色区分用户 / AI 输出
-s N最大生成 token 数,默认 512

采样控制(调回答创造力)

参数说明
--temp 0.7温度,0 = 完全固定回答,1 = 天马行空;企业文档建议 0.2~0.5
--top_p 0.9核采样,限制概率总和
--top_k 40只取概率前 K 个 token
--repeat_penalty 1.1重复惩罚,防止 AI 反复说相同内容

常用示例

1. 单次提问(一次性输出)
./build/bin/main -m models/model.Q4_K_M.gguf -ngl 99 -c 16384 -t 16 -p "写一份公司报销流程"
2. 交互式聊天(持续对话)
./build/bin/main -m models/model.Q4_K_M.gguf -ngl 99 -c 16384 -t 16 -i --color
3. 低创造力,适合办公 / 文档问答
./build/bin/main -m models/model.Q4_K_M.gguf -ngl 99 -c 16384 -temp 0.2 -repeat_penalty 1.2 -p "解释合同条款"
4. 读取文件作为 Prompt
./build/bin/main -m model.gguf -f question.txt

7.3、llama-server(重点,公司内网多人网页调用)

核心网络参数

参数作用
--host 0.0.0.0允许内网所有机器访问,不能写 127.0.0.1
--port 8080服务端口,可自定义
--max-concurrent-requests 8最大同时并发用户,3090 24G 建议 4~10
--timeout 300请求超时 5 分钟

模型 & 显存参数

参数说明
-ngl 99全部层 GPU 加速
-c 16384单会话上下文窗口
--mmap使用内存映射,减少模型加载占用内存
--no-mmap完整加载进显存,速度更快

API 功能参数

参数作用
--api-key abc123接口密钥,请求必须携带,简单鉴权
--enable-cors允许前端网页跨域访问,内网前端必备
--system-prompt "你是公司内部AI助手"全局固定系统提示词

完整生产启动命令

./build/bin/llama-server \
-m models/model.Q4_K_M.gguf \
-ngl 99 \
-c 16384 \
-t 16 \
--host 0.0.0.0 \
--port 8080 \
--max-concurrent-requests 6 \
--api-key companyai2026 \
--enable-cors \
--system-prompt "你是企业内部智能助手,回答严谨简洁,只基于公司资料作答"

服务自带接口(OpenAI 标准,网关转发用)

  1. 对话接口:POST http://IP:8080/v1/chat/completions
  2. 模型列表:GET /v1/models
  3. 文本嵌入:POST /v1/embeddings
  4. 健康检查:GET /health

后台常驻运行(服务器 7*24)

搭配 nohup 挂后台,输出日志:

nohup ./build/bin/llama-server 上面所有参数 > llm_server.log 2>&1 &
# 查看日志
tail -f llm_server.log

7.4、quantize 模型量化命令

作用:把 FP16 大模型压成 4bit/5bit/8bit,大幅降低显存占用

语法

./build/bin/quantize 原模型.gguf 输出量化模型.gguf 量化等级

常用量化等级(企业推荐)

  1. Q4_K_M:平衡速度、显存、效果,90% 场景首选
  2. Q5_K_M:精度更高,显存占用更大
  3. Q8_0:几乎无损,显存占用翻倍
  4. Q2_K:极致省显存,文字逻辑大幅下降

示例

# 标准4K_M量化
./build/bin/quantize models/original.gguf models/model.Q4_K_M.gguf Q4_K_M

7.5、embedding 向量生成(RAG 知识库)

把文档 / 问题转为向量,用于相似度检索

# 单文本向量化
./build/bin/embedding -m model.Q4_K_M.gguf -ngl 99 -p "报销制度"
# 读取整个文件批量向量化
./build/bin/embedding -m model.Q4_K_M.gguf -f doc.txt

7.6、llama-bench 性能测试(测速度)

测试每秒生成 token、显存占用、推理速度

./build/bin/llama-bench -m model.Q4_K_M.gguf -ngl 99 -c 16384

输出指标:t/s 每秒 token 数,数值越大越快

7.7、perplexity 困惑度(评测模型精度)

数值越低,模型理解、生成越准确

./build/bin/perplexity -m model.gguf -ngl 99 -f test.txt

7.8、Python 转换脚本(HF 权重 → GGUF)

路径:项目根目录 convert-hf-to-gguf.py 需要激活 conda环境运行

1. HF 模型转 FP16 GGUF

python convert-hf-to-gguf.py /data/hf-model --outfile models/fp16.gguf

2. 仅转换部分层、限制内存

python convert-hf-to-gguf.py /data/hf-model --outtype f16 --outfile models/fp16.gguf

转换完成后再用 quantize 压缩成 4bit 使用

7.9、CUDA 专属关键参数

  1. -ngl 99:所有 transform 层加载 GPU
  2. --cuda-stream:启用 CUDA 多流并行,优化并发
  3. --cuda-malloc-threshold 1024:小块内存走 CPU,减少显存碎片

CUDA 优化启动示例(main)

./build/bin/main -m model.Q4_K_M.gguf -ngl 99 --cuda-stream -c 16384 -t 16

7.10、排错常用命令

查看帮助(所有程序通用)

./build/bin/llama-server -h
./build/bin/main -h

查看显卡状态

nvidia-smi
# 实时刷新
watch -n1 nvidia-smi

杀死占用 GPU 的 llama 进程

pkill llama-server
pkill main

更多推荐