优化 Ollama 性能需要调整哪些参数?
优化 Ollama 性能该从哪些方面入手?
Ollama 的性能瓶颈通常出现在三个环节:模型加载、推理计算和内存调度。优化思路可以归纳为——选对量化、调好参数、用满硬件。下面逐项展开。
模型量化怎么选?
量化是影响推理速度和显存占用最直接的参数。Ollama 支持多种量化级别,核心区别在于精度和速度的权衡:
| 量化格式 | 模型体积 | 推理速度 | 精度损失 | 适用场景 |
|---|---|---|---|---|
| Q4_K_M | 最小 | 最快 | 较明显 | 显存紧张、追求速度 |
| Q5_K_M | 适中 | 较快 | 轻微 | 多数场景的推荐选择 |
| Q8_0 | 较大 | 较慢 | 极小 | 对输出质量要求高 |
| F16 | 最大 | 最慢 | 无 | 调试或精度验证 |
bash# 下载不同量化版本 ollama pull llama3.1:8b-q4_k_m ollama pull llama3.1:8b-q8_0
实际测试中,8GB 显存的 RTX 4060 运行 Q4_K_M 量化的 7B 模型,速度可以从 3-4 tok/s 提升到 30-45 tok/s,差距在一个数量级。2026 年 Ollama 还新增了 NVFP4 量化支持,让本地推理结果能和云端生产环境保持一致。
选择建议:先从 Q4_K_M 起步,如果输出质量不满意再升到 Q5_K_M,一般不需要更高量化。
Modelfile 里哪些参数值得调?
在 Modelfile 中通过 PARAMETER 指令可以精细控制推理行为:
dockerfilePARAMETER temperature 0.7 # 控制输出随机性,代码生成建议 0.1-0.3,对话 0.6-0.8 PARAMETER top_p 0.9 # 核采样阈值,和 temperature 二选一调整即可 PARAMETER top_k 40 # 候选 token 数,一般 20-60 PARAMETER num_ctx 4096 # 上下文窗口,短对话设 2048 省显存 PARAMETER repeat_penalty 1.1 # 重复惩罚,1.05-1.1 之间即可 PARAMETER num_gpu 99 # GPU 卸载层数,不是 GPU 数量 PARAMETER num_batch 512 # 批处理大小,吞吐优先可调到 1024-2048
几个容易踩的坑:
num_gpu的含义是模型有多少层放到 GPU 上计算,不是 GPU 的数量。比如 Llama 2 7B 有 32 层,设成 32 就全部走 GPU,显存不够就减到 20 让部分层回退 CPU。num_ctx直接影响显存占用,从 4096 减到 2048 可以省出相当可观的显存,短对话场景放心缩减。num_batch调大能提高吞吐量,但也会吃更多显存,需要和num_ctx一起权衡。
GPU 和显存怎么管?
GPU 是 Ollama 性能的关键,显存不够用是最常见的问题。
bash# 指定使用的 GPU export CUDA_VISIBLE_DEVICES=0 # 查看显存使用情况 nvidia-smi --query-gpu=memory.free --format=csv,noheader,nounits # 启用 Flash Attention,显存占用可降低 30%-50% export OLLAMA_FLASH_ATTENTION=1
显存不够时的降级策略:
- 开启
OLLAMA_FLASH_ATTENTION=1,这是最优先的操作,几乎无副作用 - 降低量化级别,从 Q8_0 换到 Q5_K_M 或 Q4_K_M
- 减少
num_ctx,短对话用 2048 甚至 1024 - 减少
num_gpu,让部分层回退 CPU - 开启低显存模式,KV 缓存放到 CPU 内存,速度会下降但能跑起来
苹果 M 系列芯片有独特优势——统一内存架构意味着显存等于内存。M2/M3 跑 7B-14B 模型性能接近入门级独立显卡,2026 年 Ollama 切换 MLX 引擎后 M5 芯片在 70B 以上模型上表现更是突出。
并发请求怎么处理?
Ollama 默认单并发,生产环境需要调整:
bash# 环境变量方式 export OLLAMA_NUM_PARALLEL=4 # 并行处理请求数 export OLLAMA_MAX_LOADED_MODELS=3 # 最大同时加载模型数 export OLLAMA_MAX_QUEUE=20 # 排队上限 export OLLAMA_KEEP_ALIVE=30m # 模型保持加载时长,-1 表示永久
也可以在 Modelfile 里设置:
dockerfilePARAMETER num_parallel 4
OLLAMA_KEEP_ALIVE 很实用——默认 5 分钟没请求就卸载模型,设长一点能避免冷启动。频繁使用的服务建议设成 30m 或 -1。
CPU 模式有什么优化空间?
没有 GPU 的机器也能跑,但参数要针对性调整:
dockerfilePARAMETER num_thread 6 # CPU 线程数,建议设为物理核心数的 60%-80% PARAMETER num_batch 128 # 小批量减少内存压力 PARAMETER num_ctx 2048 # 缩短上下文 PARAMETER num_gpu 0 # 强制全走 CPU
服务器级 CPU 可以开启 NUMA 优化:
bashexport OLLAMA_NUMA=1
纯 CPU 模式跑 Q4 量化的 1B-7B 模型,速度大约 5-15 tok/s,能用但不快,适合低频调用场景。
怎么监控和排查性能问题?
bash# 查看当前运行的模型和资源占用 ollama ps # 查看 Ollama 服务日志 ollama logs # 实时监控 GPU 使用 watch -n 1 nvidia-smi
几个关键指标:
- 首 token 延迟:反映模型加载和首次推理速度,正常应该在 2 秒以内
- 推理速度:tok/s 数值,7B 模型 GPU 跑 30+ tok/s 算正常
- GPU 利用率:推理时应该在 80% 以上,否则说明有瓶颈
- 显存占用:跑起来后应该接近满载,剩很多说明显存没利用好
如果 GPU 利用率低,检查 num_gpu 是否设够了、num_batch 是否太小。如果频繁 OOM,按前面的降级策略逐项排查。
不同硬件大致能跑什么模型?
| 模型规模 | 最低显存/内存 | 推荐硬件 | 参考速度 |
|---|---|---|---|
| 1B-3B | 无需 GPU | 8GB RAM | 30-60 tok/s (M2) |
| 7B-8B | 8GB | RTX 3080 / M2 Pro | 40-80 tok/s (GPU) |
| 13B-14B | 12GB | RTX 3080 Ti / M3 Max | 25-45 tok/s |
| 30B-34B | 24GB | RTX 4090 / M2 Ultra | 15-25 tok/s |
| 70B | 48GB | 双卡 4090 / M2 Ultra | 8-15 tok/s |
注意这是 Q4 量化下的参考值,Q8 或 F16 所需显存会翻倍。选择模型时先看自己硬件的上限,再在量化级别上做取舍。