llama.cpp ubuntu部署

预编译包(没有cuda)

  • 可用包

    curl -s https://api.github.com/repos/ggml-org/llama.cpp/releases/latest \
    | jq -r '.tag_name, .assets[].name'
  • 下载预编译包

    mkdir -p ~/llama/release
    cd ~/llama
    wget -c -P release "https://github.com/ggml-org/llama.cpp/releases/download/b8864/llama-b8864-bin-ubuntu-vulkan-x64.tar.gz"
    tar -xzf release/llama-b8864-bin-ubuntu-vulkan-x64.tar.gz -C ~/llama/versions/b8864-vulkan
  • 软链接

    ln -sfn ~/llama/versions/b8864-vulkan ~/llama/current
    ~/llama/current/llama-server 执行

编译cuda

  • 显卡

    # 卸载旧驱动
    sudo apt purge -y "*nvidia*" "*cuda*"
    sudo apt autoremove -y
    sudo reboot
    
    # 安装依赖
    sudo apt update
    sudo apt install -y build-essential dkms
    
    # 添加 NVIDIA 官方密钥与源
    # Ubuntu 22.04
    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
    sudo dpkg -i cuda-keyring_1.1-1_all.deb
    # Ubuntu 24.04
    # wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
    # sudo dpkg -i cuda-keyring_1.1-1_all.deb
    sudo apt update
    
    # 安装驱动 V100 推荐 550/555
    sudo apt install -y nvidia-driver-550
    # 安装 CUDA Toolkit 12.8(V100 最新支持版)
    sudo apt install -y cuda-toolkit-12-8
    sudo reboot
    
    # 配置环境
    echo 'export PATH=/usr/local/cuda-12.8/bin:$PATH' >> ~/.bashrc
    echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
    source ~/.bashrc
    
    # 验证
    nvidia-smi
    nvcc -V
    deviceQuery
  • 安装

    # 1. 安装依赖
    sudo apt update && sudo apt install -y build-essential cmake git nvidia-cuda-toolkit
    
    # 2. 拉代码
    git clone https://github.com/ggerganov/llama.cpp
    cd llama.cpp
    
    # 3. 编译(自动建 build)
    cmake -B build -DGGML_CUDA=ON -DLLAMA_CURL=ON
    cmake --build build --config Release -j$(nproc)
  • 升级

    # 进入目录
    cd ~/llama.cpp
    
    # 更新代码
    git -c http.proxy="socks5://192.168.1.120:7890" pull
    
    # 旧版本号
    llama-server --version
    
    # 备份旧编译
    mv build build_8870
    
    # 启用 CUDA + 启用 CURL (CURL默认已开启,此为显式开启)
    cmake -B build -DGGML_CUDA=ON -DLLAMA_CURL=ON
    
    # 编译
    cmake --build build --config Release -j$(nproc)
    
    # 验证
    ./build/bin/llama-cli --version
    llama-server --version
    version: 8742 (7b6912533) 
    version: 8865 (cfe9838d2) 
    version: 8870 (82209efb7)
    

使用操作

  • 启动服务:./llama-server -m ./models/q4_k_m.gguf --port 8080 --host 0.0.0.0
  • 企业方案 - 全显卡+多用户+密钥
    • ./llama-server -m ./model.gguf -ngl 99 -c 4096 --port 8080 --api-key "my-secret-key" --parallel 4
    • -m ./model.gguf: 指定模型文件。对于 Qwen3.5-27B 这种大模型,.gguf 是运行的前提。
    • -ngl 99 (No Graphics Layers): 这里的 99 是一个常用的小技巧,表示“把所有层都塞进显卡”。如果显存够大,模型推理将完全在 GPU 上完成,速度最快。
    • -c 4096 (Context Size): 设定上下文窗口大小为 4096 个 Token。这决定了模型能“记得”多长的对话。注意:这个数值越大,占用的显存就越多,尤其是开启多并发时。
    • 显存预警: 注意,上下文 (c)并发 (parallel) 是相乘的关系。4 * 4096 的 KV Cache 占用显存会显著高于单人模式。
  • 极致性能 - 全显存加速 + Flash Attention
    • ./llama-server -m ./Qwen3.5-27B-claude.Q4_K_M.gguf -ngl 99 -c 32768 --fa --cache-type-k q8_0 --parallel 1
    • -ngl 99:尝试将所有层(Qwen3.5-27B 通常约 28-32 层)卸载到 GPU。
    • --fa (Flash Attention)必开。大幅减少长文本时的显存占用并提升速度。
    • --cache-type-k q8_0:将 KV 缓存的 Key 量化为 8-bit,在几乎不损失精度的情况下节省约 1/4 的显存,让你能开更大的上下文。
  • 保命方案 - 混合推理 + 内存缓存
    • ./llama-server -m ./Qwen3.5-27B-claude.Q4_K_M.gguf -ngl 20 -c 16384 --cram 256 --no-mmap
    • -ngl 20:只把前 20 层放入显存,剩下的交给 CPU。你可以根据报错信息微调这个数字。
    • --cram 256:这是 2026 年版本的新特性(Host-memory prompt caching),将提示词缓存放在系统内存里,减少 GPU 负担。
    • --no-mmap:强制模型完整加载到内存/显存中,防止因为磁盘读取导致的推理卡顿。
  • Agent方案 - 结构化输出 + 高并发
    • ./llama-server -m ./Qwen3.5-27B-claude.Q4_K_M.gguf --port 8080 --parallel 4 --ctx-size 8192 --cont-batching --api-key "your_secret_key"
    • --parallel 4:同时开启 4 个逻辑插槽,支持 4 人同时对话。
    • --cont-batching:开启连续批处理,极大提升 API 的吞吐量。
    • 注意:Qwen3.5 对 Function Calling(函数调用)有原生优化,配合 llama-server 的标准 OpenAI 接口效果极佳。
    • Claude方案 - 角色扮演+长文写作
      • ./llama-server -m ./Qwen3.5-27B-claude.Q4_K_M.gguf --temp 0.7 --min-p 0.05 --repeat-penalty 1.05 --top-k 40
      • --min-p 0.05:目前公认比 top-p 更好的采样方式,能有效过滤掉低概率的废话,让输出更聪明。
  • 单次对话

    ./llama-cli -m ./models/q4_k_m.gguf -p "你好,请自我介绍一下" -n 512
    -m: 指定模型路径。
    -p: 提示词 (Prompt)。
    -n: 生成文本的最大长度。
    -t: 使用的 CPU 线程数(通常设置为物理核心数)。
  • 交互对话

    ./llama-cli -m ./models/q4_k_m.gguf -i -cnv --color
  • 查看模型配置

    http://192.168.1.142:8080 web对话,
    
    Model Information
    Current model details and capabilities
    Model	Qwen3.5-27B-claude.gitQ4_K_M.gguf
    File Path /media/x99/storage/GGUF/Qwen3.5-27B-claude.Q4_K_M.gguf
    Context Size	34,048 tokens
    Training Context	262,144 tokens
    Model Size	15.4 GB
    Parameters	26.90B
    Embedding Size	5,120
    Vocabulary Size	248,320 tokens
    Vocabulary Type	2
    Parallel Slots	5
    Build Info	b8664-9c699074c
    Chat Template: ....