服务端阅读 05月28日 07:09
优化 Ollama 性能需要调整哪些参数?
优化 Ollama 性能该从哪些方面入手?Ollama 的性能瓶颈通常出现在三个环节:模型加载、推理计算和内存调度。优化思路可以归纳为——选对量化、调好参数、用满硬件。下面逐项展开。模型量化怎么选?量化是影响推理速度和显存占用最直接的参数。Ollama 支持多种量化级别,核心区别在于精度和速度的权衡:| 量化格式 | 模型体积 | 推理速度 | 精度损失 | 适用场景 ||---------|---------|---------|---------|---------|| Q4KM | 最小 | 最快 | 较明显 | 显存紧张、追求速度 || Q5KM | 适中 | 较快 | 轻微 | 多数场景的推荐选择 || Q8_0 | 较大 | 较慢 | 极小 | 对输出质量要求高 || F16 | 最大 | 最慢 | 无 | 调试或精度验证 |# 下载不同量化版本ollama pull llama3.1:8b-q4_k_mollama pull llama3.1:8b-q8_0实际测试中,8GB 显存的 RTX 4060 运行 Q4KM 量化的 7B 模型,速度可以从 3-4 tok/s 提升到 30-45 tok/s,差距在一个数量级。2026 年 Ollama 还新增了 NVFP4 量化支持,让本地推理结果能和云端生产环境保持一致。选择建议:先从 Q4KM 起步,如果输出质量不满意再升到 Q5KM,一般不需要更高量化。Modelfile 里哪些参数值得调?在 Modelfile 中通过 PARAMETER 指令可以精细控制推理行为:PARAMETER temperature 0.7 # 控制输出随机性,代码生成建议 0.1-0.3,对话 0.6-0.8PARAMETER top_p 0.9 # 核采样阈值,和 temperature 二选一调整即可PARAMETER top_k 40 # 候选 token 数,一般 20-60PARAMETER 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 性能的关键,显存不够用是最常见的问题。# 指定使用的 GPUexport 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,这是最优先的操作,几乎无副作用降低量化级别,从 Q80 换到 Q5KM 或 Q4K_M减少 num_ctx,短对话用 2048 甚至 1024减少 num_gpu,让部分层回退 CPU开启低显存模式,KV 缓存放到 CPU 内存,速度会下降但能跑起来苹果 M 系列芯片有独特优势——统一内存架构意味着显存等于内存。M2/M3 跑 7B-14B 模型性能接近入门级独立显卡,2026 年 Ollama 切换 MLX 引擎后 M5 芯片在 70B 以上模型上表现更是突出。并发请求怎么处理?Ollama 默认单并发,生产环境需要调整:# 环境变量方式export OLLAMA_NUM_PARALLEL=4 # 并行处理请求数export OLLAMA_MAX_LOADED_MODELS=3 # 最大同时加载模型数export OLLAMA_MAX_QUEUE=20 # 排队上限export OLLAMA_KEEP_ALIVE=30m # 模型保持加载时长,-1 表示永久也可以在 Modelfile 里设置:PARAMETER num_parallel 4OLLAMA_KEEP_ALIVE 很实用——默认 5 分钟没请求就卸载模型,设长一点能避免冷启动。频繁使用的服务建议设成 30m 或 -1。CPU 模式有什么优化空间?没有 GPU 的机器也能跑,但参数要针对性调整:PARAMETER num_thread 6 # CPU 线程数,建议设为物理核心数的 60%-80%PARAMETER num_batch 128 # 小批量减少内存压力PARAMETER num_ctx 2048 # 缩短上下文PARAMETER num_gpu 0 # 强制全走 CPU服务器级 CPU 可以开启 NUMA 优化:export OLLAMA_NUMA=1纯 CPU 模式跑 Q4 量化的 1B-7B 模型,速度大约 5-15 tok/s,能用但不快,适合低频调用场景。怎么监控和排查性能问题?# 查看当前运行的模型和资源占用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 所需显存会翻倍。选择模型时先看自己硬件的上限,再在量化级别上做取舍。