llama-server
llama-server¶
- 对外提供 API 服务
语法¶
./llama-server -m <model_path> [options]
核心参数¶
- 仅记录最可能使用的
基础配置¶
1.模型加载¶
-m/--model: 指定模型路径
2.上下文控制¶
-c, --ctx-size N
- 设置模型的上下文窗口大小
- 默认值为 4096 个 tokens
- 较大的值允许模型记住更长的对话历史,但会增加内存使用量
- 建议根据实际需求和可用内存来设置
- 示例:
--ctx-size 8192用于需要长上下文的场景
3.线程控制¶
-t, --threads N
-
这是控制生成文本时使用的 CPU 线程数的关键参数
-
默认值为-1,表示系统会自动选择合适的线程数
-
建议设置为物理 CPU 核心数,而不是逻辑核心数
-
示例:如果你有一个 8 核 CPU,可以设置
--threads 8 - 注意:设置过高可能会导致性能下降,因为线程切换开销会增加
-tb, --threads-batch N
-
专门用于控制批处理和提示词处理时的线程数
-
如果不设置,默认使用与--threads 相同的值
-
在处理大量并发请求时特别有用
-
可以设置比--threads 更大的值,以提高批处理性能
- 示例:
--threads 8 --threads-batch 16表示生成用 8 线程,批处理用 16 线程
4.处理器控制¶
-C, --cpu-mask M
-
允许通过十六进制掩码,精确控制哪些 CPU 核心可以被使用
-
配合--cpu-range 使用可以实现更精细的 CPU 控制
-
适用于需要特定 CPU 核心处理任务的场景
- 示例:
--cpu-mask 0xF表示只使用前 4 个 CPU 核心
--numa TYPE
- NUMA 优化
4.内存管理¶
--mlock
-
强制系统将模型保持在 RAM 中,防止被换出到磁盘
-
可以显著提高响应速度,特别是在内存压力大的情况下
-
适用于有充足 RAM 的服务器环境
-
建议在生产环境中启用此选项【必用】
- 示例:
--mlock --model model.gguf
--no-mmap
- 禁用内存映射,强制将整个模型加载到 RAM 中
- 可能会导致启动时间变长
- 在某些情况下可以减少页面调出
- 如果遇到频繁的页面调出问题,可以尝试启用此选项
- 使用示例:
--no-mmap --model model.gguf
5.GPU 控制¶
-dev, --device <dev1,dev2,..>
-
用于指定要使用的 GPU 设备列表
-
可以通过逗号分隔指定多个 GPU
-
设置为"none"表示不使用 GPU 加速
-
适用于有多 GPU 的系统,可以精确控制使用哪些 GPU
-
示例:
--device 0,1使用前两个 GPU -
使用前,建议先用
--list-devices查看可用设备 - 该参数会打印可用设备列表并退出
-ngl, --n-gpu-layers N
- 控制有多少层模型被加载到 GPU 显存中
- 较大的值会提供更好的性能,但需要更多显存
- 对于显存较小的 GPU,建议从较小的值开始尝试
- 例如 RTX 3060 6GB 显存,可以从 8 层开始:
--n-gpu-layers 8 - 对于 RTX 4090 这样的大显存 GPU,可以设置更多层:
--n-gpu-layers 32
-ts, --tensor-split N0,N1,N2,...
-
控制模型在多个 GPU 之间的张量计算分配比例
-
通过逗号分隔的数字指定每个 GPU 的负载比例
-
适合 GPU 性能不同的情况
- 示例:
--tensor-split 3,2,1表示: - 第一个 GPU 处理 50%的计算
- 第二个 GPU 处理 33.3%的计算
- 第三个 GPU 处理 16.7%的计算
多 GPU 管理参数也能用
6.批处理参数¶
-b, --batch-size N
-
设置逻辑批处理大小,默认 2048
-
影响并发请求的处理效率
-
较大的值可以提高吞吐量,但会增加内存使用
-
建议根据实际负载和可用资源调整
-
将该值增加到 物理批处理大小 的值以上,可以提高即时处理性能
-
示例:
--batch-size 1024适合中等规模服务器
-ub, --ubatch-size N
- 设置物理批处理大小,默认 512
- 直接影响硬件资源的使用效率
- 需要根据硬件配置谨慎调整
- 不建议设置过大,可能导致性能下降
- 示例:
--ubatch-size 256适合大多数场景
7.缓存管理¶
--cache-type-k TYPE
- 设置 KV 缓存中 K(Key)的数据类型
- 可选值包括:f32, f16, q8_0, q4_0 等
- 影响内存使用和计算精度
- 对性能有显著影响
- 示例:
- 高性能场景:
--cache-type-k f16 - 节省内存场景:
--cache-type-k q4_0
-dt, --defrag-thold N
- 设置 KV 缓存碎片整理的阈值
- 默认值 0.1,设置为负数表示禁用
- 较低的值会更频繁地进行碎片整理
- 影响内存使用效率
- 示例:
--defrag-thold 0.2适合长时间运行的服务
--prompt-cache
- 提示词缓存
服务器配置¶
1.网络设置¶
--host HOST
- 设置服务器监听的 IP 地址
- 默认为 127.0.0.1(仅本地访问)
- 设置为 0.0.0.0 允许远程访问
- 生产环境建议配合 SSL 和 API 密钥使用
--port 端口
- 默认 8080
- 示例:
--host 0.0.0.0 --port 8080
--api-key KEY
-
设置 API 访问密钥, API 认证
-
用于限制 API 的访问权限
-
可以通过文件加载多个密钥
-
建议在生产环境中启用
- 示例:
--api-key "your-secret-key"
2.安全配置¶
--ssl-key-file FNAME
--ssl-cert-file FNAME
- 配置 SSL 证书,启用 HTTPS
- 提供安全的加密通信
- 生产环境必备
- 需要同时提供私钥和证书文件
- 示例:
--ssl-key-file private.key
--ssl-cert-file cert.pem
3.监控和日志¶
--metrics
- 启用 Prometheus 兼容的监控指标
- 提供性能和使用情况的实时监控
- 可以与 Grafana 等工具集成
- 建议在生产环境启用
- 访问路径为/metrics
--log-file FNAME
- 指定日志文件路径
- 记录服务器运行状态和错误信息
- 支持日志轮转
- 便于问题排查
- 示例:
--log-file server.log
--slots: 启用槽位监控
--path: 静态文件路径
模型和推理配置¶
1.采样参数¶
--temp N
- 控制生成文本的随机性
- 默认值 0.8
- 较高的值(如 1.2)产生更多样的输出
- 较低的值(如 0.3)产生更确定的输出
- 示例:
--temp 0.7适合一般对话
--top-p N
- 控制核采样的概率阈值
- 默认值 0.9
- 较高的值允许更多样的输出
- 较低的值使输出更加保守
- 示例:
--top-p 0.92
2.LoRA 适配器¶
--lora
- 加载 LoRA 适配器
- 使用见 cli
3.语法约束¶
--grammar GRAMMAR
- 设置输出的语法约束
- 用于控制生成文本的格式
- 支持 BNF 语法
- 适合生成特定格式的文本
- 示例:
--grammar "your-grammar-rules"
4.特殊功能¶
--embedding
- 启用嵌入向量生成功能
- 用于文本相似度计算等任务
- 需要模型支持嵌入功能
- 示例:
--embedding --model embedding-model.gguf
--reranking
- 启用文档重排序功能
- 用于搜索结果优化
- 需要特定类型的模型
- 示例:
--reranking --model rerank-model.gguf
实际应用¶
一个生产环境的配置:
./llama-server \
--model model.gguf \
--threads 16 \
--n-gpu-layers 32 \
--ctx-size 4096 \
--batch-size 2048 \
--host 0.0.0.0 \
--port 8080 \
--api-key "secret-key" \
--ssl-key-file key.pem \
--ssl-cert-file cert.pem \
--metrics \
--log-file server.log \
--mlock
本站总访问量 次