Skip to main content

llama.cpp

  • 推测解码不支持 vision
# AlpineLinux py for ML
apk add \
gcc g++ python3 py3-pip musl-dev cmake make pkgconf build-base \
git openssh-client binutils coreutils util-linux findutils sed grep tar wget curl neofetch \
rust cargo python3-dev openssl-dev linux-headers

# llama.cpp
# =========
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make -j

./main -m ./models/7B/ggml-model-q4_0.bin -p "Building a website can be done in 10 simple steps:" -n 512
./main -m ./models/7B/ggml-model-q4_0.bin --file prompts/alpaca.txt --instruct --ctx_size 2048 --keep -1

./main -m ./models/ggml-alpaca-7b-q4.bin --color -f ./prompts/alpaca.txt -ins -b 256 --top_k 10000 --temp 0.2 --repeat_penalty 1 -t 7

brew install llama.cpp

mkdir models
curl -L -o models/qwen3-vl-4b-mmproj-F16.gguf "https://hf-mirror.com/unsloth/Qwen3-VL-4B-Instruct-GGUF/resolve/main/mmproj-F16.gguf"
curl -L -o models/qwen3-vl-8b-mmproj-F16.gguf "https://hf-mirror.com/unsloth/Qwen3-VL-8B-Instruct-GGUF/resolve/main/mmproj-F16.gguf"

# 进入 Shell
# /app/llama-server --no-warmup -hf unsloth/Qwen3-VL-4B-Instruct-GGUF:Q4_K_M
docker run --rm -it \
-v $PWD/models:/root/.cache/llama.cpp \
-e HF_ENDPOINT=https://modelscope.cn \
--entrypoint bash \
ghcr.m.daocloud.io/ggml-org/llama.cpp:server-cuda

# 下载 model
docker run --rm -it \
-v $PWD/models:/root/.cache/llama.cpp \
-e HF_ENDPOINT=https://modelscope.cn \
ghcr.m.daocloud.io/ggml-org/llama.cpp:server-cuda \
-hf unsloth/Qwen3-VL-4B-Instruct-GGUF:Q4_K_M

# -m /models/7B/ggml-model-q4_0.gguf --port 8000 --host 0.0.0.0 -n 512
# --run -m /models/7B/ggml-model-q4_0.gguf -p "Building a website can be done in 10 simple steps:" -n 512 --n-gpu-layers 1
docker run --rm -it \
--gpus all \
-p 8080:8080 \
-v $PWD/models:/models \
-v $PWD/models:/root/.cache/llama.cpp \
-e HF_ENDPOINT=https://modelscope.cn \
--name llama.cpp ghcr.m.daocloud.io/ggml-org/llama.cpp:server-cuda \
-hf unsloth/Qwen3-VL-4B-Instruct-GGUF:Q4_K_M -np 8 -c 32000 -cb -n 8 --mmproj /models/qwen3-vl-mmproj-F16.gguf -ngl 99

# https://modelscope.cn/models/unsloth/Qwen3-VL-4B-Instruct-GGUF
# https://hf-mirror.com

# ~/Library/Caches/llama.cpp
# /root/.cache/llama.cpp
llama-server --jinja -fa auto -hf unsloth/Qwen3-VL-4B-Instruct-GGUF:Q4_K_M
HF_ENDPOINT=https://modelscope.cn llama-server -hf unsloth/Qwen3-VL-4B-Instruct-GGUF:Q4_K_M
  • 默认 Q4_K_M
KV_size = n_ctx × n_layer × n_embd_k_gqa × sizeof(f16)
# 查看 slot 分配情况
curl http://localhost:8080/slots

# 输入 token 长度
# slot update_slots: id 3 | task 2094 | new prompt, n_ctx_slot = 65536, n_keep = 0, task.n_tokens = 950
docker logs llama | grep task.n_tokens

# 总长度
docker logs llama | grep 'stop processing: n_tokens'
Flag默认说明
Server
--host HOST127.0.0.1监听地址
--port PORT8080监听端口
--path PATH静态文件服务路径
--api-prefix PREFIXAPI URL 前缀
--api-key KEYAPI 密钥
-to, --timeout N600读写超时 (秒)
--threads-http N-1HTTP 处理线程数
--metricsfalse启用 Prometheus 指标
--slotstrue启用 slots 监控端点
--no-webuifalse禁用 Web UI
-a, --alias NAME模型别名 (API使用)
Model
-m, --model FNAME模型路径
-mu, --model-url URL模型下载 URL
-hf, --hf-repo <repo>Hugging Face 模型仓库 <user>/<model>[:quant]
-hff, --hf-file <file>Hugging Face 模型文件 (覆盖 repo 中的 quant)
-hft, --hf-token TOKENHugging Face Token
-c, --ctx-size N4096上下文大小, 0=模型定义
--mmproj FILEMultimodal projector file (Vision)
-ctk, --cache-type-k TYPEf16K Cache 类型 (f16, q8_0, q4_0 等)
-ctv, --cache-type-v TYPEf16V Cache 类型
Reasoning
--reasoning-format FORMATdeepseek推理格式: none, deepseek, deepseek-legacy
--reasoning-budget N-1推理预算 (thinking budget)
Speculative Decoding (Draft)
-md, --model-draft FNAMEDraft model for speculative decoding
-hfd, --hf-repo-draft <repo>Draft model Hugging Face repo
-ngld, --gpu-layers-draft NGPU layers for draft model
--draft-max, --draft N16Number of tokens to draft
--draft-min N0Minimum draft tokens
--draft-p-min P0.8Minimum speculative decoding probability
-cd, --ctx-size-draft N0Draft model context size
-devd, --device-draftDevice for draft model
LoRA / Adapter
--lora FNAMEPath to LoRA adapter
--lora-scaled FNAME SCALEPath to LoRA adapter with user defined scaling
--lora-init-without-applyfalseLoad LoRA adapters without applying them
--control-vector FNAMEAdd a control vector
Process / Hardware
-t, --threads N-1生成线程数
-tb, --threads-batch Nsame批处理和 prompt 处理线程数
-b, --batch-size N2048逻辑最大批处理大小 (Logical max batch size)
-ub, --ubatch-size N512物理最大批处理大小 (Physical max batch size)
-ngl, --gpu-layers NGPU 层数 (VRAM offload)
-sm, --split-modelayerGPU 分割模式: none, layer, row
-ts, --tensor-split多 GPU 分割比例 (如 3,1)
-mg, --main-gpu INDEX0主 GPU
-fa, --flash-attnfalse启用 Flash Attention
-dev, --device <devs>指定使用设备
--numa TYPENUMA 优化: distribute, isolate, numactl
--mlockfalse锁定内存 (防止交换)
--no-mmapfalse禁用 mmap (慢加载但减少缺页)
--no-kv-offloadfalse禁用 KV Offload
Sampling
--samplers...采样器顺序 (默认: penalties;dry;top_n_sigma;top_k;typ_p;top_p;min_p;xtc;temperature)
-s, --seed SEED-1随机种子 (-1=随机)
--temp N0.8温度
--dynatemp-range N0.0动态温度范围
--top-k N40Top-K 采样
--top-p N0.9Top-P 采样
--min-p N0.1Min-P 采样
--xtc-probability N0.0XTC 概率
--xtc-threshold N0.1XTC 阈值
--typical N1.0Locally typical sampling
--repeat-last-n N64重复惩罚的最后 n 个 token (0=disabled, -1=ctx_size)
--repeat-penalty N1.0重复惩罚
--presence-penalty N0.0出现惩罚
--frequency-penalty N0.0频率惩罚
--dry-multiplier N0.0DRY 采样倍率
--mirostat N0Mirostat 采样 (0=disabled, 1=v1, 2=v2)
--grammar GRAMMARBNF 语法约束
-j, --json-schemaJSON Schema 约束
-l, --logit-biasLogit 偏差 TOKEN_ID(+/-)BIAS
--ignore-eosfalse忽略 EOS Token
Context & RoPE
-cb, --cont-batchingtrue连续批处理 (Continuous batching)
-nocb, --no-cont-batching禁用连续批处理
-np, --parallel N1并行解码序列数 (Slots)
-n, --predict N-1预测 token 数量, -1=无限
--keep N0保留初始 Prompt Token 数 (-1=all)
--cache-reuse N0最小 Cache 重用 Chunk 大小
--no-context-shiftfalse禁用上下文移动 (无限生成时)
--rope-scaling TYPERoPE 缩放类型: none, linear, yarn
--rope-freq-base NRoPE 基频
--rope-freq-scale NRoPE 频率缩放因子
Other
--embeddingfalse仅嵌入模式
--rerankingfalse启用重排序端点
--jinjafalse使用 Jinja 模板
--chat-template NAME指定聊天模板
  • 图片预处理: 图片解码、resize、normalize 在 CPU 上
    • clip_image_preprocess
    • 支持批处理
sampler chain: logits -> logit-bias -> penalties -> dry -> top-n-sigma -> top-k -> typical -> top-p -> min-p -> xtc -> temp-ext -> dist
原始 Logits (模型输出)

1. logit-bias → 手动调整特定 token 的 logit 值

2. penalties → 应用重复惩罚(repeat/presence/frequency penalty)

3. dry → DRY 重复惩罚(更智能的重复检测)

4. top-n-sigma → Top-N-Sigma 采样(基于统计分布)

5. top-k → Top-K 采样(保留前 K 个 token)

6. typical → Typical P 采样(保留典型概率的 token)

7. top-p → Top-P (Nucleus) 采样(累积概率阈值)

8. min-p → Min-P 采样(相对最小概率阈值)

9. xtc → XTC 采样(移除低概率 token)

10. temp-ext → 动态温度缩放(根据熵调整温度)

11. dist → 最终概率分布采样(softmax + 随机选择)

选中的 Token

nodejs

NODE_LLAMA_CPP_SKIP_DOWNLOAD=1 pnpm add node-llama-cpp

quantization

  • Q4_K_M
    • Q - Quantization
    • 4 - 4 bits
    • K - K-Quants
    • M - Medium
      • XXS
      • S - 比 Q4_0 好
      • M
      • L - 接近 Q5
      • XL
  • gguf

server

  • https://github.com/ggml-org/llama.cpp/tree/master/tools/server
  • KV cache
    • -ctk, --cache-type-k TYPE
    • -ctv, --cache-type-v TYPE
    • 默认 f16
    • 支持 f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
  • Pooling - 多个向量 -> 单个向量
    • none
    • mean
    • cls - [CLS] Token
    • last - 最后一个 Token
    • rank
  • normalize
    • Euclidean/L2
    • Taxicab/L1 - 曼哈顿距离
    • Max absolute - [-1, 1]
    • P-Norm

lib

库文件说明
libllama主要的 llama 库
libggmlGGML 核心库: 后端 Metal, CPU, BLAS, CUDA
libmtmd多模态支持
  • libmtmd -> libllama -> libggml