Files
ProjectAGiPrompt/32-WDD-AI服务器/1-GPU服务器/6-llama-cpp编译安装.md
2026-06-15 14:14:24 +08:00

4.9 KiB
Raw Blame History

基于你的硬件配置5800X + 16GB RAM + RTX 3070 扩容到 16GB 显存 + CUDA 13.0),下面是完整的针对性编译和运行方案。


第一步:环境准备

在编译前,确认 CUDA 环境变量已正确配置:

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

# 验证
nvcc --version
nvidia-smi

安装编译依赖:

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

第二步:针对性编译命令

RTX 3070 的 Compute Capability 为 8.6sm_86要锁定这个架构以避免编译浪费并获得最优内核 。 raw.githubusercontent

cd ~/llama.cpp

# 清理旧构建
rm -rf build

# 针对 RTX 3070 的极致优化编译
cmake -B build \
  -DGGML_CUDA=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_CUDA_ARCHITECTURES="86" \
  -DGGML_CUDA_F16=ON \
  -DGGML_CUDA_FA_ALL_QUANTS=ON \
  -DGGML_NATIVE=ON \
  -DCMAKE_C_COMPILER=gcc \
  -DCMAKE_CXX_COMPILER=g++ \
  -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc

# 并行编译5800X 16核全开
cmake --build build --config Release -j$(nproc)

各编译参数说明:

参数 作用
-DCMAKE_CUDA_ARCHITECTURES="86" 精准锁定 RTX 3070 架构,减少编译体积,避免 nvcc 警告 raw.githubusercontent
-DGGML_CUDA_F16=ON 启用半精度 FP16 加速 dequantization + mul mat 核,在 30 系显卡上明显提速 raw.githubusercontent
-DGGML_CUDA_FA_ALL_QUANTS=ON 编译所有 KV cache 量化类型的 FlashAttention CUDA 内核,配合 --ctk/--ctv 大幅节省显存扩展上下文 raw.githubusercontent
-DGGML_NATIVE=ON 针对本机 CPU5800X Zen3生成最优指令集AVX2/FMA

第三步:验证 GPU 编译成功

~/llama.cpp/build/bin/llama-server --list-devices
# 应看到 CUDA0: NVIDIA GeForce RTX 3070

第四步:极致优化运行命令

你的 RTX 3070 已扩容到 16GB 显存Qwen3-30B-A3B Q4_K_M 约 18GB可以做到几乎全量 GPU 卸载配合少量 CPU offload 。 reddit


GGML_CUDA_DISABLE_GRAPHS=1 \
~/llama.cpp/build/bin/llama-server \
  -m /root/models/Qwen3-30B-A3B-GGUF/Qwen3-30B-A3B-Q4_K_M.gguf \
  --host 0.0.0.0 \
  --port 8000 \
  -ngl 40 \
  -c 32768 \
  -t 8 \
  --flash-attn on \
  -b 768 \
  -ub 256 \
  --mlock \
  -ctk q8_0 \
  -ctv q8_0 \
  --parallel 1 \
  --temp 0.6 \
  --top-k 20 \
  --top-p 0.95 \
  --jinja \
  -a "Qwen3-30B-A3B"

关键参数变更说明:

参数 原值 → 新值 原因
-c 8192 → 32768 16GB 显存 + --ctk/ctv q8_0 KV cache 量化后可支持大上下文Flash Attention 让长上下文 prompt 处理速度翻倍以上 reddit
--mlock 无 → 加入 将模型锁定在内存,防止系统换页,降低推理延迟 reddit
--ctk q8_0 --ctv q8_0 无 → 加入 KV cache 量化到 int8节省约 50% KV 显存,换取更长上下文,对输出质量影响极小 reddit
-ub 256 无 → 加入 Micro-batch 大小,针对单 GPU 单并发优化 token 生成速度
-b 512 512 → 保留 Batch size 对 prompt 处理速度有显著影响512 适合 16GB 显存

第五步:内存/显存不足时的回退策略

如果模型 18GB > 16GB 显存导致 OOM启用 Unified Memory 让系统 RAM 兜底Linux 下):

export GGML_CUDA_ENABLE_UNIFIED_MEMORY=1

这允许显存溢出时自动 swap 到 16GB 系统内存,而不是直接崩溃 。同时可以适当降低 -ngl 值(如 -ngl 60)手动将部分层卸载到 CPU由 5800X 的 8 核 16 线程承接。 raw.githubusercontent


性能预期

  • Token 生成速度:编译优化 + F16 + Flash AttentionRTX 3070 上 Qwen3-30B Q4_K_M 预计可达 15~25 tok/s reddit
  • 上下文KV cache q8_0 量化后16GB 显存可稳定支持 16K~32K context
  • Prompt 处理Flash Attention 对长 prompt 处理速度提升 2x+ reddit