每天 Shaarli

一天内的所有链接,汇聚在一个页面上。

July 7, 2026

Hugging Face

Hugging Face is way more fun with friends and colleagues!

Note: llama-cli 参数详解与部署推荐指南

下载:https://github.com/ggml-org/llama.cpp/releases

llama-cli 参数详解与部署推荐指南

基于 llama.cpp llama-cli -h 整理。

每个参数包含: - - 适用场景 - 推荐配置(CPU / RTX 4090 / 多
GPU)


1. 通用参数(common params)

-m, --model FNAME

指定加载的模型文件路径。

作用

告诉 llama-cli 使用哪个 GGUF 模型。

适用场景

  • 本地运行 Llama、Qwen、DeepSeek 等 GGUF 模型。
  • 多模型切换。

推荐值

CPU:

-m model.gguf

RTX 4090:

-m Qwen3-32B-Q4_K_M.gguf

多 GPU:

-m DeepSeek-R1-70B-Q4_K_M.gguf

-ngl, --gpu-layers N

设置放入 GPU 显存中的模型层数量。

作用

控制 GPU 加速比例。

适用场景

显存不足时降低; 显存充足时提高速度。

推荐值

CPU:

-ngl 0

RTX 4090 24GB:

-ngl auto

70B 多 GPU:

-ngl all

-c, --ctx-size N

设置上下文长度。

作用

决定模型一次能记忆多少 token。

适用场景

长文本分析、代码、大文档。

推荐值

普通聊天:

-c 4096

RTX 4090:

-c 32768

长文本:

-c 131072

注意: 上下文越大,KV Cache 占用越高。


-t, --threads N

CPU 推理线程数量。

适用场景

纯 CPU 推理。

推荐值

8核CPU:

-t 8

16核CPU:

-t 16

服务器: 设置为物理核心数。


-b, --batch-size N

批处理大小。

作用

影响 prompt 处理速度。

推荐值

CPU:

-b 256

RTX 4090:

-b 2048

大显存:

-b 4096

--flash-attn

启用 Flash Attention。

作用

降低显存占用,提高注意力计算速度。

推荐值

RTX 4090:

--flash-attn on

CPU:

--flash-attn off

多 GPU:

--flash-attn auto

2. 采样参数(sampling params)

--temperature

温度参数,控制随机性。

推荐值

严谨回答:

--temp 0.2

代码:

--temp 0.3

聊天创作:

--temp 0.8

--top-k

限制候选 token 数量。

推荐值

通用:

--top-k 40

代码:

--top-k 20

--top-p

核采样概率范围。

推荐值

通用:

--top-p 0.95

稳定输出:

--top-p 0.8

--repeat-penalty

重复惩罚。

推荐值

默认:

--repeat-penalty 1.1

长文本:

1.15

3. KV Cache 参数

--cache-type-k / --cache-type-v

设置 KV Cache 精度。

推荐值

RTX 4090:

节省显存:

--cache-type-k q8_0
--cache-type-v q8_0

高质量:

f16

4. 多 GPU 参数

--split-mode

多 GPU 模型切分方式。

类型

none: 单 GPU

layer: 按层切分(推荐)

row: 按权重切分

tensor: 张量并行(实验)

推荐

双 RTX 4090:

--split-mode layer

--tensor-split

指定 GPU 显存比例。

示例

两张 4090:

--tensor-split 1,1

48GB+24GB:

--tensor-split 2,1

5. 推测解码(Speculative Decoding)

--model-draft

指定草稿模型。

作用

使用小模型预测,大模型验证。

适用

例如:

主模型: 70B

Draft: 7B

可以明显提升速度。


6. 多模态参数

--mmproj

加载视觉投影模型。

用途

图片理解模型。

例如:

--mmproj mmproj-model.gguf

--image

输入图片。

示例

--image test.jpg

推荐配置模板

RTX 4090 24GB 单卡

llama-cli \
-m model.gguf \
-ngl auto \
--flash-attn on \
-c 32768 \
-b 2048 \
--temp 0.7

CPU服务器

llama-cli \
-m model.gguf \
-ngl 0 \
-t 32 \
-c 8192 \
-b 512

双 RTX 4090

llama-cli \
-m model.gguf \
-ngl all \
--split-mode layer \
--tensor-split 1,1 \
--flash-attn on \
-c 65536

调优原则

目标 主要调整参数


提高速度 增加 -ngl、batch、开启 flash-attn
降低显存 降低 ctx、KV cache 量化
提高输出质量 降低 temperature
长文本 增加 ctx-size
多GPU split-mode + tensor-split
减少重复 repeat-penalty

llama-cli 命令行手册

本文档翻译自 llama-cli -h 的输出,涵盖了所有可用参数。
版本信息与编译细节请使用 --version 查看。


一、通用参数(common params)

参数 说明
-h, --help, --usage 打印用法信息并退出
--version 显示版本和编译信息
-cl, --cache-list 显示缓存中的模型列表
--completion-bash 打印可 source 的 bash 补全脚本(用于 llama.cpp)
-t, --threads N 生成期间使用的 CPU 线程数(默认:-1)<br>环境变量:LLAMA_ARG_THREADS
-tb, --threads-batch N 批处理和提示处理期间使用的线程数(默认:同 --threads
-C, --cpu-mask M CPU 亲和性掩码:任意长度的十六进制数,与 --cpu-range 互补(默认:"")
-Cr, --cpu-range lo-hi CPU 亲和性范围,与 --cpu-mask 互补(默认:"")
--cpu-strict <0\|1> 是否使用严格的 CPU 绑定(默认:0)
--prio N 设置进程/线程优先级:low(-1), normal(0), medium(1), high(2), realtime(3)(默认:0)
--poll <0...100> 轮询级别以等待工作(0 = 不轮询,默认:50)
-Cb, --cpu-mask-batch M 批处理时的 CPU 亲和性掩码,与 --cpu-range-batch 互补(默认:同 --cpu-mask
-Crb, --cpu-range-batch lo-hi 批处理时的 CPU 亲和性范围,与 --cpu-mask-batch 互补(默认:同 --cpu-mask
--cpu-strict-batch <0\|1> 批处理时是否使用严格的 CPU 绑定(默认:同 --cpu-strict
--prio-batch N 批处理时设置进程/线程优先级:0-normal, 1-medium, 2-high, 3-realtime(默认:0)
--poll-batch <0\|1> 批处理时是否使用轮询等待工作(默认:同 --poll
-c, --ctx-size N 提示上下文大小(默认:0,0 表示从模型加载)<br>环境变量:LLAMA_ARG_CTX_SIZE
-n, --predict, --n-predict N 预测的 token 数量(默认:-1,-1 表示无限)<br>环境变量:LLAMA_ARG_N_PREDICT
-b, --batch-size N 逻辑最大批大小(默认:2048)<br>环境变量:LLAMA_ARG_BATCH
-ub, --ubatch-size N 物理最大批大小(默认:512)<br>环境变量:LLAMA_ARG_UBATCH
--keep N 从初始提示中保留的 token 数量(默认:0,-1 表示全部保留)
--swa-full 是否使用全尺寸 SWA 缓存(默认:false)<br>更多信息参见文档,环境变量:LLAMA_ARG_SWA_FULL
-fa, --flash-attn [on\|off\|auto] 设置 Flash Attention 使用模式('on', 'off' 或 'auto',默认:'auto')<br>环境变量:LLAMA_ARG_FLASH_ATTN
-p, --prompt PROMPT 启动生成的提示文本;系统消息请使用 -sys
--perf, --no-perf 是否启用内部 libllama 性能计时(默认:false)<br>环境变量:LLAMA_ARG_PERF
-f, --file FNAME 包含提示的文件(默认:无)
-bf, --binary-file FNAME 包含提示的二进制文件(默认:无)
-e, --escape, --no-escape 是否处理转义序列(\n, \r, \t, ', ", \)(默认:true)
--rope-scaling {none,linear,yarn} RoPE 频率缩放方法,默认为 linear,除非模型指定<br>环境变量:LLAMA_ARG_ROPE_SCALING_TYPE
--rope-scale N RoPE 上下文缩放因子,将上下文扩大 N 倍<br>环境变量:LLAMA_ARG_ROPE_SCALE
--rope-freq-base N RoPE 基础频率,用于 NTK 感知缩放(默认:从模型加载)<br>环境变量:LLAMA_ARG_ROPE_FREQ_BASE
--rope-freq-scale N RoPE 频率缩放因子,将上下文扩大 1/N 倍<br>环境变量:LLAMA_ARG_ROPE_FREQ_SCALE
--yarn-orig-ctx N YaRN:模型的原始上下文大小(默认:0 = 模型训练上下文大小)<br>环境变量:LLAMA_ARG_YARN_ORIG_CTX
--yarn-ext-factor N YaRN:外推混合因子(默认:-1.00,0.0 = 完全内插)<br>环境变量:LLAMA_ARG_YARN_EXT_FACTOR
--yarn-attn-factor N YaRN:缩放 sqrt(t) 或注意力幅度(默认:-1.00)<br>环境变量:LLAMA_ARG_YARN_ATTN_FACTOR
--yarn-beta-slow N YaRN:高校正维度或 alpha(默认:-1.00)<br>环境变量:LLAMA_ARG_YARN_BETA_SLOW
--yarn-beta-fast N YaRN:低校正维度或 beta(默认:-1.00)<br>环境变量:LLAMA_ARG_YARN_BETA_FAST
-kvo, --kv-offload, -nkvo, --no-kv-offload 是否启用 KV 缓存卸载(默认:启用)<br>环境变量:LLAMA_ARG_KV_OFFLOAD
--repack, -nr, --no-repack 是否启用权重重打包(默认:启用)<br>环境变量:LLAMA_ARG_REPACK
--no-host 绕过主机缓冲区,允许使用额外缓冲区<br>环境变量:LLAMA_ARG_NO_HOST
-ctk, --cache-type-k TYPE KV 缓存中 K 的数据类型<br>允许值:f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1(默认:f16)<br>环境变量:LLAMA_ARG_CACHE_TYPE_K
-ctv, --cache-type-v TYPE KV 缓存中 V 的数据类型<br>允许值同上(默认:f16)<br>环境变量:LLAMA_ARG_CACHE_TYPE_V
-dt, --defrag-thold N KV 缓存碎片整理阈值(已弃用)<br>环境变量:LLAMA_ARG_DEFRAG_THOLD
-np, --parallel N 并行解码的序列数量(默认:1)<br>环境变量:LLAMA_ARG_N_PARALLEL
--rpc SERVERS 逗号分隔的 RPC 服务器列表(主机)<br>环境变量:LLAMA_ARG_RPC
--mlock 强制系统将模型保留在 RAM 中,避免交换或压缩<br>环境变量:LLAMA_ARG_MLOCK
--mmap, --no-mmap 是否内存映射模型(如果禁用,加载更慢但可能减少页面交换,若未使用 mlock)<br>默认:启用<br>环境变量:LLAMA_ARG_MMAP
-dio, --direct-io, -ndio, --no-direct-io 如果可用,使用 Direct I/O(默认:禁用)<br>环境变量:LLAMA_ARG_DIO
--numa TYPE 尝试优化 NUMA 系统的帮助<br>- distribute: 均匀分布执行到所有节点<br>- isolate: 只在执行开始的节点上的 CPU 上生成线程<br>- numactl: 使用 numactl 提供的 CPU 映射<br>如果之前没有使用此选项,建议在使用前清除系统页缓存<br>参见 https://github.com/ggml-org/llama.cpp/issues/1437<br>环境变量:LLAMA_ARG_NUMA
-dev, --device <dev1,dev2,..> 逗号分隔的设备列表,用于卸载(none = 不卸载)<br>使用 --list-devices 查看可用设备<br>环境变量:LLAMA_ARG_DEVICE
--list-devices 打印可用设备列表并退出
-ot, --override-tensor <KEY=TYPE,...> 覆盖张量缓冲区类型<br>环境变量:LLAMA_ARG_OVERRIDE_TENSOR
-cmoe, --cpu-moe 将所有专家混合(MoE)权重保留在 CPU 中<br>环境变量:LLAMA_ARG_CPU_MOE
-ncmoe, --n-cpu-moe N 将前 N 层的 MoE 权重保留在 CPU 中<br>环境变量:LLAMA_ARG_N_CPU_MOE
-ngl, --gpu-layers, --n-gpu-layers N 存储在 VRAM 中的最大层数,可以是精确数字、'auto' 或 'all'(默认:auto)<br>环境变量:LLAMA_ARG_N_GPU_LAYERS
-sm, --split-mode {none,layer,row,tensor} 如何在多个 GPU 之间分割模型:<br>- none: 只使用一个 GPU<br>- layer(默认):按层分割并跨 GPU 流水线<br>- row: 按行跨 GPU 分割权重(并行)<br>- tensor: 分割权重和 KV(并行,实验性)<br>环境变量:LLAMA_ARG_SPLIT_MODE
-ts, --tensor-split N0,N1,N2,... 每 GPU 卸载模型的比例,逗号分隔的比例列表,例如 3,1<br>环境变量:LLAMA_ARG_TENSOR_SPLIT
-mg, --main-gpu INDEX 用于模型的 GPU(split-mode = none 时),或用于中间结果和 KV(split-mode = row 时),默认:0<br>环境变量:LLAMA_ARG_MAIN_GPU
-fit, --fit [on\|off] 是否调整未设置参数以适应设备内存('on' 或 'off',默认:'on')<br>环境变量:LLAMA_ARG_FIT
-fitt, --fit-target MiB0,MiB1,MiB2,... 每设备的 --fit 目标余量(MiB),逗号分隔列表,单个值广播到所有设备,默认:1024<br>环境变量:LLAMA_ARG_FIT_TARGET
-fitc, --fit-ctx N --fit 可设置的最小上下文大小,默认:4096<br>环境变量:LLAMA_ARG_FIT_CTX
--check-tensors 检查模型张量数据是否有无效值(默认:false)
--override-kv KEY=TYPE,... 高级选项:按键覆盖模型元数据。<br>可指定多个覆盖,用逗号分隔。<br>类型:int, float, bool, str。<br>示例:--override-kv tokenizer.ggml.add_bos_token=bool,tokenizer.ggml.add_eos_token=bool
--op-offload, --no-op-offload 是否将主机张量操作卸载到设备(默认:true)
--lora FNAME LoRA 适配器路径(逗号分隔加载多个)
--lora-scaled FNAME,... 带有用户定义缩放的 LoRA 适配器(格式:FNAME,SCALE,...)<br>注意:使用逗号分隔
--control-vector FNAME 添加控制向量(多个用逗号分隔)
--control-vector-scaled FNAME,SCALE,... 添加带有用户定义缩放的控制向量(格式:FNAME,SCALE,...
--control-vector-layer-range START END 应用控制向量的层范围,包含起始和结束
-m, --model FNAME 要加载的模型路径<br>环境变量:LLAMA_ARG_MODEL
-mu, --model-url MODEL_URL 模型下载 URL(默认:未使用)<br>环境变量:LLAMA_ARG_MODEL_URL
-dr, --docker-repo [<repo>/]<model>[:<quant>] Docker Hub 模型仓库,repo 可选,默认为 ai/,quant 可选,默认为空。<br>示例:gemma3(默认:未使用)<br>环境变量:LLAMA_ARG_DOCKER_REPO
-hf, -hfr, --hf-repo <repo>[/<quant>] Hugging Face 模型仓库;quant 可选(不区分大小写),默认为 Q4_K_M,若不存在则回退到仓库中的第一个文件。<br>如果有 mmproj 也会自动下载,可通过 --no-mmproj 禁用。<br>示例:ggml-org/GLM-4.7-Flash-GGUF(默认:未使用)<br>环境变量:LLAMA_ARG_HF_REPO
-hff, --hf-file FILE Hugging Face 模型文件名。如果指定,将覆盖 --hf-repo 中的 quant(默认:未使用)<br>环境变量:LLAMA_ARG_HF_FILE
-hfv, -hfrv, --hf-repo-v <repo>[/<quant>] 声码器模型的 Hugging Face 仓库(默认:未使用)<br>环境变量:LLAMA_ARG_HF_REPO_V
-hffv, --hf-file-v FILE 声码器模型的 Hugging Face 文件名(默认:未使用)<br>环境变量:LLAMA_ARG_HF_FILE_V
-hft, --hf-token TOKEN Hugging Face 访问令牌(默认:从环境变量 HF_TOKEN 读取)<br>环境变量:HF_TOKEN
--log-disable 禁用日志
--log-file FNAME 日志写入文件<br>环境变量:LLAMA_ARG_LOG_FILE
--log-colors [on\|off\|auto] 设置彩色日志('on', 'off' 或 'auto',默认:'auto')<br>'auto' 在输出到终端时启用颜色<br>环境变量:LLAMA_ARG_LOG_COLORS
-v, --verbose, --log-verbose 将详细级别设置为无穷大(即记录所有消息,用于调试)
--offline 离线模式:强制使用缓存,阻止网络访问<br>环境变量:LLAMA_ARG_OFFLINE
-lv, --verbosity, --log-verbosity N 设置详细阈值,更高详细度的消息将被忽略。<br>值:<br>0: 常规输出<br>1: 错误<br>2: 警告<br>3: 信息<br>4: 跟踪(更多信息)<br>5: 调试<br>默认:1<br>环境变量:LLAMA_ARG_LOG_VERBOSITY
--log-prefix, --no-log-prefix 在日志消息中启用前缀<br>环境变量:LLAMA_ARG_LOG_PREFIX
--log-timestamps, --no-log-timestamps 在日志消息中启用时间戳<br>环境变量:LLAMA_ARG_LOG_TIMESTAMPS
--spec-draft-type-k, -ctkd, --cache-type-k-draft TYPE 草稿模型 KV 缓存中 K 的数据类型<br>允许值同上(默认:f16)<br>环境变量:LLAMA_ARG_SPEC_DRAFT_CACHE_TYPE_K
--spec-draft-type-v, -ctvd, --cache-type-v-draft TYPE 草稿模型 KV 缓存中 V 的数据类型<br>允许值同上(默认:f16)<br>环境变量:LLAMA_ARG_SPEC_DRAFT_CACHE_TYPE_V

二、采样参数(sampling params)

参数 说明
--samplers SAMPLERS 按顺序使用的采样器,用 ';' 分隔(默认:penalties;dry;top_n_sigma;top_k;typ_p;top_p;min_p;xtc;temperature
-s, --seed SEED 随机数生成器种子(默认:-1,-1 表示使用随机种子)
--sampler-seq, --sampling-seq SEQUENCE 简化的采样器序列(默认:edskypmxt
--ignore-eos 忽略结束流 token 并继续生成(隐含 --logit-bias EOS-inf
--temp, --temperature N 温度(默认:0.80)
--top-k N Top-k 采样(默认:40,0 = 禁用)<br>环境变量:LLAMA_ARG_TOP_K
--top-p N Top-p 采样(默认:0.95,1.0 = 禁用)
--min-p N Min-p 采样(默认:0.05,0.0 = 禁用)
--top-nsigma, --top-n-sigma N Top-n-sigma 采样(默认:-1.00,-1.0 = 禁用)
--xtc-probability N XTC 概率(默认:0.00,0.0 = 禁用)
--xtc-threshold N XTC 阈值(默认:0.10,1.0 = 禁用)
--typical, --typical-p N 局部典型采样,参数 p(默认:1.00,1.0 = 禁用)
--repeat-last-n N 惩罚时考虑的最近 n 个 token(默认:64,0 = 禁用,-1 = ctx_size)
--repeat-penalty N 重复序列惩罚(默认:1.00,1.0 = 禁用)
--presence-penalty N 存在惩罚(重复 alpha)(默认:0.00,0.0 = 禁用)
--frequency-penalty N 频率惩罚(重复 alpha)(默认:0.00,0.0 = 禁用)
--dry-multiplier N DRY 采样乘数(默认:0.00,0.0 = 禁用)
--dry-base N DRY 采样基础值(默认:1.75)
--dry-allowed-length N DRY 采样允许长度(默认:2)
--dry-penalty-last-n N 最后 n 个 token 的 DRY 惩罚(默认:-1,0 = 禁用,-1 = 上下文大小)
--dry-sequence-breaker STRING 添加 DRY 采样的序列中断符,会清除默认中断符(\n, :, ", *);使用 "none" 表示不使用任何中断符
--adaptive-target N 自适应-p:选择接近此概率的 token(有效范围 0.0 到 1.0;负数 = 禁用)(默认:-1.00)<br>更多信息参见文档
--adaptive-decay N 自适应-p:目标适应随时间的衰减率。较低的值反应更灵敏,较高的值更稳定(有效范围 0.0 到 0.99)(默认:0.90)
--dynatemp-range N 动态温度范围(默认:0.00,0.0 = 禁用)
--dynatemp-exp N 动态温度指数(默认:1.00)
--mirostat N 使用 Mirostat 采样。启用后,Top K、Nucleus 和局部典型采样器将被忽略。<br>(默认:0,0 = 禁用,1 = Mirostat,2 = Mirostat 2.0)
--mirostat-lr N Mirostat 学习率,参数 eta(默认:0.10)
--mirostat-ent N Mirostat 目标熵,参数 tau(默认:5.00)
-l, --logit-bias TOKEN_ID(+/-)BIAS 修改 token 出现在完成中的似然,例如 --logit-bias 15043+1 增加 token ' Hello' 的似然,或 --logit-bias 15043-1 降低
--grammar GRAMMAR 类似 BNF 的语法约束生成(参见 grammars/ 目录示例)
--grammar-file FNAME 从文件读取语法
-j, --json-schema SCHEMA JSON Schema 约束生成(https://json-schema.org/),例如 {} 表示任意 JSON 对象。<br>对于外部 $refs 的 schema,请改用 --grammar + example/json_schema_to_grammar.py
-jf, --json-schema-file FILE 包含 JSON Schema 的文件,约束生成(https://json-schema.org/),例如 {} 表示任意 JSON 对象。<br>对于外部 $refs,请改用 --grammar + example/json_schema_to_grammar.py
-bs, --backend-sampling 启用后端采样(实验性)(默认:禁用)<br>环境变量:LLAMA_ARG_BACKEND_SAMPLING

三、推测解码参数(speculative params)

参数 说明
--spec-draft-hf, -hfd, -hfrd, --hf-repo-draft <repo>[/<quant>] --hf-repo,但用于草稿模型(默认:未使用)<br>环境变量:LLAMA_ARG_SPEC_DRAFT_HF_REPO
--spec-draft-threads, -td, --threads-draft N 生成时使用的线程数(默认:同 --threads
--spec-draft-threads-batch, -tbd, --threads-batch-draft N 批处理和提示处理时使用的线程数(默认:同 --threads-draft
--spec-draft-cpu-mask, -Cd, --cpu-mask-draft M 草稿模型的 CPU 亲和性掩码,与 --cpu-range-draft 互补(默认:同 --cpu-mask
--spec-draft-cpu-range, -Crd, --cpu-range-draft lo-hi 草稿模型的 CPU 亲和性范围,与 --cpu-mask-draft 互补(默认:同 --cpu-mask
--spec-draft-cpu-strict, --cpu-strict-draft <0\|1> 是否为草稿模型使用严格的 CPU 绑定(默认:同 --cpu-strict
--spec-draft-prio, --prio-draft N 草稿进程/线程优先级:0-normal, 1-medium, 2-high, 3-realtime(默认:0)
--spec-draft-poll, --poll-draft <0\|1> 是否轮询等待草稿模型工作(默认:同 --poll
--spec-draft-cpu-mask-batch, -Cbd, --cpu-mask-batch-draft M 草稿模型批处理时的 CPU 亲和性掩码(默认:同 --cpu-mask
--spec-draft-cpu-strict-batch, --cpu-strict-batch-draft <0\|1> 草稿模型批处理时是否严格 CPU 绑定(默认:--cpu-strict-draft
--spec-draft-prio-batch, --prio-batch-draft N 草稿模型批处理优先级(默认:0)
--spec-draft-poll-batch, --poll-batch-draft <0\|1> 批处理时是否轮询等待草稿模型工作(默认:--poll-draft
--spec-draft-override-tensor, -otd, --override-tensor-draft <KEY=TYPE,...> 覆盖草稿模型的张量缓冲区类型(默认:同 --override-tensor
--spec-draft-cpu-moe, -cmoed, --cpu-moe-draft 将草稿模型的所有 MoE 权重保留在 CPU 中<br>环境变量:LLAMA_ARG_SPEC_DRAFT_CPU_MOE
--spec-draft-n-cpu-moe, --spec-draft-ncmoe, -ncmoed, --n-cpu-moe-draft N 将草稿模型前 N 层的 MoE 权重保留在 CPU 中<br>环境变量:LLAMA_ARG_SPEC_DRAFT_N_CPU_MOE
--spec-draft-n-max N 推测解码中草稿 token 的最大数量(默认:3)<br>环境变量:LLAMA_ARG_SPEC_DRAFT_N_MAX
--spec-draft-n-min N 推测解码中草稿 token 的最小数量(默认:0)<br>环境变量:LLAMA_ARG_SPEC_DRAFT_N_MIN
--spec-draft-p-split, --draft-p-split P 推测解码分割概率(默认:0.10)<br>环境变量:LLAMA_ARG_SPEC_DRAFT_P_SPLIT
--spec-draft-p-min, --draft-p-min P 最小推测解码概率(贪婪)(默认:0.00)<br>环境变量:LLAMA_ARG_SPEC_DRAFT_P_MIN
--spec-draft-backend-sampling, --no-spec-draft-backend-sampling 将草稿采样卸载到后端(默认:启用)<br>环境变量:LLAMA_ARG_SPEC_DRAFT_BACKEND_SAMPLING
--spec-draft-device, -devd, --device-draft <dev1,dev2,..> 用于卸载草稿模型的设备列表(none = 不卸载),使用 --list-devices 查看可用设备
--spec-draft-ngl, -ngld, --gpu-layers-draft, --n-gpu-layers-draft N 草稿模型存储在 VRAM 中的最大层数,精确数字、'auto' 或 'all'(默认:auto)<br>环境变量:LLAMA_ARG_N_GPU_LAYERS_DRAFT
--spec-draft-model, -md, --model-draft FNAME 推测解码的草稿模型路径(默认:未使用)<br>环境变量:LLAMA_ARG_SPEC_DRAFT_MODEL
--spec-type none,draft-simple,draft-eagle3,draft-mtp,draft-dflash,ngram-simple,ngram-map-k,ngram-map-k4v,ngram-mod,ngram-cache 推测解码类型(逗号分隔列表),默认:none<br>环境变量:LLAMA_ARG_SPEC_TYPE
--spec-ngram-mod-n-min N 基于 ngram 的推测解码使用的最小 ngram token 数(默认:48)
--spec-ngram-mod-n-max N 基于 ngram 的推测解码使用的最大 ngram token 数(默认:64)
--spec-ngram-mod-n-match N ngram-mod 查找长度(默认:24)
--spec-ngram-simple-size-n N ngram-simple 推测解码的 ngram 大小 N(查找 ngram 长度)(默认:12)
--spec-ngram-simple-size-m N ngram-simple 推测解码的 ngram 大小 M(草稿 mgram 长度)(默认:48)
--spec-ngram-simple-min-hits N ngram-simple 推测解码的最小命中数(默认:1)
--spec-ngram-map-k-size-n N ngram-map-k 推测解码的 ngram 大小 N(默认:12)
--spec-ngram-map-k-size-m N ngram-map-k 推测解码的 ngram 大小 M(默认:48)
--spec-ngram-map-k-min-hits N ngram-map-k 最小命中数(默认:1)
--spec-ngram-map-k4v-size-n N ngram-map-k4v 推测解码的 ngram 大小 N(默认:12)
--spec-ngram-map-k4v-size-m N ngram-map-k4v 推测解码的 ngram 大小 M(默认:48)
--spec-ngram-map-k4v-min-hits N ngram-map-k4v 最小命中数(默认:1)
--draft, --draft-n, --draft-max N 此参数已移除,请使用 --spec-draft-n-max--spec-ngram-mod-n-max<br>环境变量:LLAMA_ARG_DRAFT_MAX
--draft-min, --draft-n-min N 此参数已移除,请使用 --spec-draft-n-min--spec-ngram-mod-n-min<br>环境变量:LLAMA_ARG_DRAFT_MIN

四、示例特定参数(example-specific params)

参数 说明
--verbose-prompt 生成前打印详细提示(默认:false)
--display-prompt, --no-display-prompt 生成时是否打印提示(默认:true)
-co, --color [on\|off\|auto] 颜色输出,区分提示、用户输入和生成内容('on', 'off' 或 'auto',默认:'auto')<br>'auto' 在输出到终端时启用颜色
-ctxcp, --ctx-checkpoints, --swa-checkpoints N 每个槽位创建的上下文检查点最大数量(默认:32)<br>更多信息参见文档<br>环境变量:LLAMA_ARG_CTX_CHECKPOINTS
-cram, --cache-ram N 设置最大缓存大小(MiB)(默认:8192,-1 = 无限制,0 = 禁用)<br>更多信息参见文档<br>环境变量:LLAMA_ARG_CACHE_RAM
--context-shift, --no-context-shift 是否在无限文本生成中使用上下文移位(默认:禁用)<br>环境变量:LLAMA_ARG_CONTEXT_SHIFT
-sys, --system-prompt PROMPT 系统提示(如果适用,取决于聊天模板)
--show-timings, --no-show-timings 每次响应后是否显示计时信息(默认:true)<br>环境变量:LLAMA_ARG_SHOW_TIMINGS
-sysf, --system-prompt-file FNAME 包含系统提示的文件(默认:无)
-r, --reverse-prompt PROMPT 在 PROMPT 处停止生成,在交互模式下返回控制权
-sp, --special 启用特殊 token 输出(默认:false)
-cnv, --conversation, -no-cnv, --no-conversation 是否以对话模式运行:<br>- 不打印特殊 token 和后缀/前缀<br>- 同时启用交互模式<br>(默认:如果聊天模板可用则自动启用)
-st, --single-turn 仅运行单轮对话,完成后退出;如果第一轮用 --prompt 预定义则不会交互(默认:false)
-mli, --multiline-input 允许输入多行文本,不必每行用 \ 结束
--warmup, --no-warmup 是否用空运行进行预热(默认:启用)
-mm, --mmproj FILE 多模态投影仪文件路径,参见 tools/mtmd/README.md<br>注意:如果使用了 -hf,此参数可省略<br>环境变量:LLAMA_ARG_MMPROJ
-mmu, --mmproj-url URL 多模态投影仪文件 URL,参见 tools/mtmd/README.md<br>环境变量:LLAMA_ARG_MMPROJ_URL
--mmproj-auto, --no-mmproj, --no-mmproj-auto 是否使用多模态投影仪文件(如果可用),使用 -hf 时有用(默认:启用)<br>环境变量:LLAMA_ARG_MMPROJ_AUTO
--mmproj-offload, --no-mmproj-offload 是否启用多模态投影仪的 GPU 卸载(默认:启用)<br>环境变量:LLAMA_ARG_MMPROJ_OFFLOAD
--image, --audio, --video FILE 图像、音频或视频文件路径(用于多模态模型),多个文件用逗号分隔
--image-min-tokens N 每个图像可占用的最小 token 数,仅用于动态分辨率视觉模型(默认:从模型读取)<br>环境变量:LLAMA_ARG_IMAGE_MIN_TOKENS
--image-max-tokens N 每个图像可占用的最大 token 数,仅用于动态分辨率视觉模型(默认:从模型读取)<br>环境变量:LLAMA_ARG_IMAGE_MAX_TOKENS
--chat-template-kwargs STRING 为 JSON 模板解析器设置额外参数,必须为有效的 JSON 对象字符串,例如 '{"key1":"value1","key2":"value2"}'<br>环境变量:LLAMA_ARG_CHAT_TEMPLATE_KWARGS
--jinja, --no-jinja 是否使用 Jinja 模板引擎进行聊天(默认:启用)<br>环境变量:LLAMA_ARG_JINJA
--reasoning-format FORMAT 控制是否允许思维标签以及是否从响应中提取,以及返回格式;可选值:<br>- none: 思维保留在 message.content 中不解析<br>- deepseek: 将思维放入 message.reasoning_content<br>- deepseek-legacy: 保留 <think> 标签在 content 中,同时填充 reasoning_content<br>(默认:auto)<br>环境变量:LLAMA_ARG_THINK
-rea, --reasoning [on\|off\|auto] 在聊天中使用推理/思考('on', 'off' 或 'auto',默认:'auto'(从模板检测))<br>环境变量:LLAMA_ARG_REASONING
--reasoning-budget N 思考的 token 预算:-1 为无限制,0 为立即结束,N>0 为 token 预算(默认:-1)<br>环境变量:LLAMA_ARG_THINK_BUDGET
--reasoning-budget-message MESSAGE 当推理预算耗尽时,在结束思维标签前注入的消息(默认:无)<br>环境变量:LLAMA_ARG_THINK_BUDGET_MESSAGE
--reasoning-preserve, --no-reasoning-preserve 在完整历史中保留推理痕迹,而不仅仅是最后一条助手消息(默认:模板默认)<br>兼容某些具有 supports_preserve_reasoning 能力的模板<br>示例:https://docs.z.ai/guides/capabilities/thinking-mode#preserved-thinking<br>环境变量:LLAMA_ARG_REASONING_PRESERVE
--chat-template JINJA_TEMPLATE 设置自定义 Jinja 聊天模板(默认:从模型元数据读取)<br>如果指定了后缀/前缀,模板将被禁用。<br>仅接受常用模板(除非在此之前设置了 --jinja):<br>内置模板列表:bailing, bailing-think, bailing2, chatglm3, chatglm4, chatml, command-r, deepseek, deepseek-ocr, deepseek2, deepseek3, exaone-moe, exaone3, exaone4, falcon3, gemma, gigachat, glmedge, gpt-oss, granite, granite-4.0, granite-4.1, grok-2, hunyuan-dense, hunyuan-moe, hunyuan-vl, kimi-k2, llama2, llama2-sys, llama2-sys-bos, llama2-sys-strip, llama3, llama4, megrez, minicpm, mistral-v1, mistral-v3, mistral-v3-tekken, mistral-v7, mistral-v7-tekken, monarch, openchat, orion, pangu-embedded, phi3, phi4, rwkv-world, seed_oss, smolvlm, solar-open, vicuna, vicuna-orca, yandex, zephyr<br>环境变量:LLAMA_ARG_CHAT_TEMPLATE
--chat-template-file JINJA_TEMPLATE_FILE 从文件读取自定义 Jinja 聊天模板(默认:从模型元数据)<br>如果指定了后缀/前缀,模板将被禁用。<br>仅接受常用模板(除非在此之前设置了 --jinja)。<br>内置模板列表同上。<br>环境变量:LLAMA_ARG_CHAT_TEMPLATE_FILE
--skip-chat-parsing, --no-skip-chat-parsing 强制使用纯内容解析器,即使指定了 Jinja 模板;模型将在 content 部分输出所有内容,包括推理和/或工具调用(默认:禁用)<br>环境变量:LLAMA_ARG_SKIP_CHAT_PARSING
--simple-io 使用基本 I/O,以获得更好的子进程和受限控制台兼容性
--log-prompts-dir PATH 将提示记录到目录(仅用于调试,默认:禁用)
--gpt-oss-20b-default 使用 gpt-oss-20b(注意:可从互联网下载权重)
--gpt-oss-120b-default 使用 gpt-oss-120b(注意:可从互联网下载权重)
--vision-gemma-4b-default 使用 Gemma 3 4B QAT(注意:可从互联网下载权重)
--vision-gemma-12b-default 使用 Gemma 3 12B QAT(注意:可从互联网下载权重)
--spec-default 启用默认的推测解码配置

说明:本手册基于 llama-cli -h 输出翻译整理,具体行为可能随版本变化,请以实际运行时的帮助信息为准。

llama-server 特有参数(仅列出与 llama-cli 不同或新增的部分)

通用参数(如 -t, -c, --samplers, --spec-* 等)请参考 llama-cli 手册,此处不重复。

服务器专属参数(example‑specific)

参数 说明
-lcs, --lookup-cache-static FNAME 静态查找缓存路径(生成时不更新)
-lcd, --lookup-cache-dynamic FNAME 动态查找缓存路径(生成时更新)
-cms, --checkpoint-min-step N 检查点最小间隔(token),默认 8192,0=无限制。环境变量:LLAMA_ARG_CHECKPOINT_MIN_SPACING_NT
-kvu, --kv-unified, -no-kvu, --no-kv-unified 是否使用统一 KV 缓冲区(默认:若槽位数自动则启用)。环境变量:LLAMA_ARG_KV_UNIFIED
--cache-idle-slots, --no-cache-idle-slots 是否在统一 KV 下将空闲槽保存到缓存并在新任务时清除(需 --cache-ram,默认启用)。环境变量:LLAMA_ARG_CACHE_IDLE_SLOTS
--spm-infill 使用 Suffix/Prefix/Middle 填充模式(而非 Prefix/Suffix/Middle),默认禁用
--pooling {none,mean,cls,last,rank} 嵌入池化类型,默认模型值。环境变量:LLAMA_ARG_POOLING
-np, --parallel N 服务器槽位数(注意:llama-cli 中此参数表示并行序列数,含义不同),默认 -1(自动)。环境变量:LLAMA_ARG_N_PARALLEL
-cb, --cont-batching, -nocb, --no-cont-batching 启用连续批处理(动态批处理),默认启用。环境变量:LLAMA_ARG_CONT_BATCHING
--mtmd-batch-max-tokens N 编码图像时每批最大图像 token 数,默认 1024。环境变量:LLAMA_ARG_MTMD_BATCH_MAX_TOKENS
-a, --alias STRING 模型名称别名(逗号分隔,供 API 使用)。环境变量:LLAMA_ARG_ALIAS
--tags STRING 模型标签(逗号分隔,仅信息展示)。环境变量:LLAMA_ARG_TAGS
--embd-normalize N 嵌入归一化:-1=无,0=最大绝对值 int16,1=曼哈顿,2=欧几里得,>2=p-范数(默认 2)
--host HOST 监听 IP 或 UNIX 套接字(.sock 结尾),默认 127.0.0.1。环境变量:LLAMA_ARG_HOST
--port PORT 监听端口,默认 8080。环境变量:LLAMA_ARG_PORT
--reuse-port 允许复用端口,默认禁用。环境变量:LLAMA_ARG_REUSE_PORT
--path PATH 静态文件服务路径,默认空。环境变量:LLAMA_ARG_STATIC_PATH
--api-prefix PREFIX API 路径前缀(不带尾部斜杠),默认空。环境变量:LLAMA_ARG_API_PREFIX
--ui-config, --webui-config JSON 默认 UI 设置的 JSON。环境变量:LLAMA_ARG_UI_CONFIG
--ui-config-file, --webui-config-file PATH 包含 UI 设置的 JSON 文件。环境变量:LLAMA_ARG_UI_CONFIG_FILE
--ui-mcp-proxy, --webui-mcp-proxy, --no-... 实验性:启用 MCP CORS 代理(非信任环境禁用),默认禁用。环境变量:LLAMA_ARG_UI_MCP_PROXY
--tools TOOL1,TOOL2,... 实验性:启用内置工具(all 为全部),可用:read_file, file_glob_search, grep_search, exec_shell_command, write_file, edit_file, apply_diff, get_datetime。非信任环境禁用。环境变量:LLAMA_ARG_TOOLS
-ag, --agent, -no-ag, --no-agent 启用 CORS 代理和所有内置工具(非信任环境禁用),默认禁用。环境变量:LLAMA_ARG_AGENT
--ui, --webui, --no-ui, --no-webui 是否启用 Web UI,默认启用。环境变量:LLAMA_ARG_UI
--embedding, --embeddings 仅支持嵌入用例(专用嵌入模型),默认禁用。环境变量:LLAMA_ARG_EMBEDDINGS
--rerank, --reranking 启用重排序端点,默认禁用。环境变量:LLAMA_ARG_RERANKING
--api-key KEY API 认证密钥(多个逗号分隔)。环境变量:LLAMA_API_KEY
--api-key-file FNAME 包含 API 密钥的文件(每行一个,#注释)。环境变量:LLAMA_ARG_API_KEY_FILE
--ssl-key-file FNAME PEM SSL 私钥文件。环境变量:LLAMA_ARG_SSL_KEY_FILE
--ssl-cert-file FNAME PEM SSL 证书文件。环境变量:LLAMA_ARG_SSL_CERT_FILE
-to, --timeout N 读写超时(秒),默认 3600。环境变量:LLAMA_ARG_TIMEOUT
--sse-ping-interval N SSE 心跳间隔(秒),-1 禁用,默认 30。环境变量:LLAMA_ARG_SSE_PING_INTERVAL
--threads-http N HTTP 请求处理线程数,默认 -1。环境变量:LLAMA_ARG_THREADS_HTTP
--cache-prompt, --no-cache-prompt 启用提示缓存,默认启用。环境变量:LLAMA_ARG_CACHE_PROMPT
--cache-reuse N 通过 KV 移位重用缓存的最小分块大小(需启用提示缓存),默认 0。环境变量:LLAMA_ARG_CACHE_REUSE
--metrics 启用 Prometheus 指标端点,默认禁用。环境变量:LLAMA_ARG_ENDPOINT_METRICS
--props 允许通过 POST /props 更改全局属性,默认禁用。环境变量:LLAMA_ARG_ENDPOINT_PROPS
--slots, --no-slots 暴露槽位监控端点,默认启用。环境变量:LLAMA_ARG_ENDPOINT_SLOTS
--slot-save-path PATH 保存槽位 KV 缓存的路径,默认禁用
--media-path PATH 本地媒体文件目录,可通过 file:// 访问,默认禁用
--models-dir PATH 路由器服务器模型目录,默认禁用。环境变量:LLAMA_ARG_MODELS_DIR
--models-preset PATH 路由器服务器模型预设 INI 文件,默认禁用。环境变量:LLAMA_ARG_MODELS_PRESET
--models-max N 路由器同时加载最大模型数,默认 4,0=无限制。环境变量:LLAMA_ARG_MODELS_MAX
--models-autoload, --no-models-autoload 路由器是否自动加载模型,默认启用。环境变量:LLAMA_ARG_MODELS_AUTOLOAD
--prefill-assistant, --no-prefill-assistant 若最后一条消息是 assistant,是否预填充响应(默认启用预填充)。环境变量:LLAMA_ARG_PREFILL_ASSISTANT
-sps, --slot-prompt-similarity SIMILARITY 请求提示与槽位提示匹配阈值(0.10,0.0=禁用)
--lora-init-without-apply 加载 LoRA 但不立即应用(后续通过 API 应用),默认禁用
--sleep-idle-seconds SECONDS 空闲多少秒后休眠,-1 禁用,默认 -1
-mv, --model-vocoder FNAME 声码器模型路径(音频生成),默认未使用
--tts-use-guide-tokens 使用引导 token 改善 TTS 单词召回率
--embd-gemma-default 使用默认 EmbeddingGemma 模型(可从网络下载)
--fim-qwen-1.5b-default 使用默认 Qwen 2.5 Coder 1.5B(可从网络下载)
--fim-qwen-3b-default 使用默认 Qwen 2.5 Coder 3B(可从网络下载)
--fim-qwen-7b-default 使用默认 Qwen 2.5 Coder 7B(可从网络下载)
--fim-qwen-7b-spec 使用 Qwen 2.5 Coder 7B + 0.5B 草稿模型(推测解码,可从网络下载)
--fim-qwen-14b-spec 使用 Qwen 2.5 Coder 14B + 0.5B 草稿模型(推测解码,可从网络下载)
--fim-qwen-30b-default 使用默认 Qwen 3 Coder 30B A3B Instruct(可从网络下载)
--gpt-oss-20b-default 使用 gpt-oss-20b(可从网络下载)
--gpt-oss-120b-default 使用 gpt-oss-120b(可从网络下载)
--vision-gemma-4b-default 使用 Gemma 3 4B QAT(可从网络下载)
--vision-gemma-12b-default 使用 Gemma 3 12B QAT(可从网络下载)
--spec-default 启用默认推测解码配置

说明:所有带 (env: ...) 的参数均支持对应环境变量,具体取值以实际程序输出为准。

Note: OpenAI API 兼容接口
┌─────────────┐
│ 前端聊天UI  │
│ ChatGPT类界面│
└──────┬──────┘
       │ HTTP请求(OpenAI格式)
       ↓
┌─────────────────┐
│ llama-server    │
│ localhost:8080  │
│ OpenAI兼容API   │
└──────┬──────────┘
       │
       ↓
┌─────────────┐
│ GGUF模型    │
│ Llama/Qwen  │
└─────────────┘

Chat接口(最常用)

POST /v1/chat/completions

http://localhost:9192/v1/chat/completions

请求格式:

{
  "model": "local-model",
  "messages": [
    {
      "role": "system",
      "content": "你是一个AI助手"
    },
    {
      "role": "user",
      "content": "你好,请介绍一下自己"
    }
  ],
  "temperature":0.7
}

返回:

{
 "choices":[
  {
   "message":{
    "role":"assistant",
    "content":"你好,我是一个基于..."
   }
  }
 ]
}

前端怎么调用?

<input id="msg">
<button onclick="send()">发送</button>

<div id="answer"></div>

<script>

async function send(){

 let text=document.getElementById("msg").value;

 let res=await fetch(
 "http://服务器IP:8080/v1/chat/completions",
 {
  method:"POST",

  headers:{
   "Content-Type":"application/json",
   "Authorization":"Bearer YOUR_API_KEY"
  },

  body:JSON.stringify({

    model:"local-model",

    messages:[
      {
       role:"user",
       content:text
      }
    ]

  })

 });

 let data=await res.json();

 document.getElementById("answer").innerHTML=
 data.choices[0].message.content;

}

</script>

流式输出(打字效果)

请求增加:

{
 "stream":true
}

返回:

data:
{"content":"你"}

data:
{"content":"好"}

data:
{"content":"!"}

前端用:ReadableStream 读取即可。

限制访问量(1人)

nginx配置

新建/etc/nginx/conf.d/llama.conf

limit_conn_zone $binary_remote_addr zone=llama_limit:10m;

server {

    listen 8080;

    location / {

        # 单用户连接限制
        limit_conn llama_limit 1;

        # 超过限制返回503
        limit_conn_status 503;

        proxy_pass http://127.0.0.91:9192;

        proxy_http_version 1.1;

        # SSE流式输出必须
        proxy_set_header Connection "";

        proxy_buffering off;

        proxy_read_timeout 3600s;

    }

    # 自定义忙碌提示
    error_page 503 = @busy;

    location @busy {

        default_type application/json;

        return 503 '
        {
          "error":
          "AI服务器正在服务其他用户,请稍后再试"
        }';

    }

}

systemctl reload nginx

llama.cpp本身建议这样启动:

./llama-server \
-m model.gguf \
--host 127.0.0.91 \
--port 9192 \
--parallel 1 \
--api-key-file /service/ai/api.key

关键 --parallel 1 llama.cpp内部只允许一个推理上下文。

常用的完整 POST JSON 可以这样写:

{
  "model": "Talk-Qwen3-1.7B-Q8",
  "messages": [
    {
      "role": "system",
      "content": "你是一个专业、简洁、可靠的中文 AI 助手。回答要直接,不要输出 thinking,不要输出 <think> 标签。"
    },
    {
      "role": "user",
      "content": "请用三句话介绍一下 llama.cpp。"
    }
  ],
  "temperature": 0.6,
  "top_p": 0.85,
  "top_k": 40,
  "min_p": 0.05,
  "repeat_penalty": 1.2,
  "presence_penalty": 0.3,
  "frequency_penalty": 0.3,
  "max_tokens": 512,
  "stream": false
}

curl 示例:

curl http://127.0.0.91:9192/v1/chat/completions \
  -H "Content-Type: application/json; charset=utf-8" \
  -H "Authorization: Bearer 你的key内容" \
  -d '{
    "model": "Talk-Qwen3-1.7B-Q8",
    "messages": [
      {
        "role": "system",
        "content": "你是一个专业、简洁、可靠的中文 AI 助手。回答要直接,不要输出 thinking,不要输出 <think> 标签。"
      },
      {
        "role": "user",
        "content": "请用三句话介绍一下 llama.cpp。"
      }
    ],
    "temperature": 0.6,
    "top_p": 0.85,
    "top_k": 40,
    "min_p": 0.05,
    "repeat_penalty": 1.2,
    "presence_penalty": 0.3,
    "frequency_penalty": 0.3,
    "max_tokens": 512,
    "stream": false
  }'

流式输出用:
"stream": true

多轮对话时,messages 自己带历史:

"messages": [
  {"role": "system", "content": "你是中文助手。"},
  {"role": "user", "content": "我叫张三。"},
  {"role": "assistant", "content": "好的,我记住了。"},
  {"role": "user", "content": "我叫什么?"}
]

不想有历史,就每次只传:

"messages": [
  {"role": "system", "content": "你是中文助手。"},
  {"role": "user", "content": "新的问题"}
]
Note: llama-server参考systemd Unit单元配置文件

单元文件(/etc/systemd/system/llama-server.service)

[Unit]
Description=llama.cpp router server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
WorkingDirectory=/service/ai/llama.cpp
ExecStart=/service/ai/llama.cpp/build/bin/llama-server \
  --models-preset /service/ai/model/models.ini \
  --models-max 1 \
  --host 127.0.0.91 \
  --port 9192 \
  --api-key-file /service/ai/api.key

Restart=always
RestartSec=5
LimitMEMLOCK=infinity
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
root@serNCnJRbYWqCtG:~# cat /service/ai/model/models.ini
[*]
threads = 16
threads-batch = 16
batch-size = 512
ubatch-size = 128
parallel = 1
jinja = 1

temp = 0.6
top-k = 40
top-p = 0.85
min-p = 0.05

repeat-penalty = 1.2
repeat-last-n = 256
presence-penalty = 0.3
frequency-penalty = 0.3

n-predict = 4096
no-warmup = 1
mmap = 1

[✏️Coder-Qwen3-1.7B-Q5]
model = /service/ai/model/Coder/Qwen3-1.7b-coder-distilled-sft-Q5_K_M.gguf
ctx-size = 32768

[✏️Coder-Qwen3-30B-A3B-Q4]
model = /service/ai/model/Coder/Qwen3-Coder-30B-A3B-Instruct-Pruned-Q4_K_M.gguf
ctx-size = 16384

[🗣️Talk-Qwen3-1.7B-Q4]
model = /service/ai/model/Qwen/Qwen3-1.7B-Q4_K_M.gguf
ctx-size = 32768

[🗣️Talk-GLM4.7-23B-A3B-Q4]
model = /service/ai/model/GLM/GLM-4.7-Flash-REAP-23B-A3B-Q4_K_M.gguf
ctx-size = 16384

api.key文件生成

mkdir -p /service/ai
openssl rand -hex 32 > /service/ai/api.key
chmod 600 /service/ai/api.key
cat /service/ai/api.key
Note: 使用llama.cpp

从GitHub克隆项目仓库并进入目录

直接下载:
https://github.com/ggml-org/llama.cpp/releases

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

如果需要,可以拉取子模块(通常用于ggml等依赖):

git submodule update --init --recursive

安装依赖

sudo apt update
sudo apt install -y build-essential cmake git

编译命令

编译主要分为CPU基础版和GPU加速版。为了加速编译,可以使用 -j 参数指定并行任务数,例如 -j 8 表示用8个任务并行编译。

CPU 基础编译 (所有平台通用)

这是最基本的编译方式,生成仅使用CPU的程序。

cmake -B build
cmake --build build --config Release -j $(nproc)  # Linux/macOS用 $(nproc),Windows可替换为具体数字如8

-B build: 在build文件夹中生成构建文件。
--config Release: 指定编译为发布版本,以获得最佳性能。
编译完成后,所有可执行文件(如llama-cli, llama-server)会位于 build/bin/ 目录下

启用硬件加速 (可选)

如需启用GPU加速,需要在CMake配置时添加相应参数

NVIDIA GPU (CUDA)
需提前安装好NVIDIA CUDA Toolkit

cmake -B build -DLLAMA_CUBLAS=ON
cmake --build build --config Release -j $(nproc)

AMD GPU (ROCm)

cmake -B build -DLLAMA_HIPBLAS=ON
cmake --build build --config Release -j $(nproc)

Apple Silicon (Metal)

cmake -B build -DLLAMA_METAL=ON
cmake --build build --config Release -j $(nproc)

其他常用编译选项

调试版本 (Debug): 如需调试,可将 Release 替换为 Debug。

静态库: 如需构建静态库而非动态库,可添加 -DBUILD_SHARED_LIBS=OFF。

使用Ninja: Ninja 是一个更快的构建工具,可用 -GNinja 指定。

编译验证

编译成功后,可以进入 build/bin/ 目录,运行一个测试命令来验证:

cd build/bin
./llama-cli -m /path/to/your/model.gguf -p "Hello, world!" -n 64

如果想了解更详细的编译选项(如OpenBLAS、Vulkan等后端),建议查阅项目文档 docs/build.md

Note: 为Debian13添加虚拟内存
sudo swapoff /swapfile
sudo fallocate -l 4G /swapfile
# swapfile大小一般是内存的两倍
chmod 600 /swapfile
# 格式化为 Swap 空间
sudo mkswap /swapfile
# 重新启用 Swap
sudo swapon /swapfile
# 验证新大小是否生效
swapon --show
free -h
# 设置开机自动启用
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab