关键要点
- 禁用日志/调试(简单):约10%速度提升。
- 使用Q4量化(简单):相同速度,更少显存占用。
- 优化批处理大小(中等):批处理速度提升2-3倍。
- 用vLLM替代Ollama(难):并发请求速度提升2-5倍。
- GPU显存使用率90%+(中等):速度提升15-20%。
- 综合所有技术:约2-3倍总体加速。
GPU显存使用率如何影响速度?
默认情况下,大多数工具使用GPU显存的70–80%——空置的显存处于闲置状态。 提升至90–95%可通过允许引擎预分配更多KV缓存来改善速度15–20%:
# vLLM: increase GPU memory utilization
vllm serve meta-llama/Llama-2-7b-hf \
--gpu-memory-utilization 0.95
# Ollama: environment variable
export OLLAMA_GPU_THRESHOLD=0.95 # Use 95% of GPU
ollama run llama3.2:3b
# LM Studio: Settings → GPU acceleration slider (move to 100%)哪种批处理大小能最大化吞吐量?
对于批量处理(多提示词),将批处理大小从1增加到32可获得2–4倍的吞吐量提升。
单个请求 = 有限的流水线利用率。批量32个请求 = 2–4倍吞吐量。
权衡:每个独立请求的延迟更高(等待批次完成)。
| 批处理大小 | 吞吐量 | 延迟/请求 | 使用场景 |
|---|---|---|---|
| 1(单个) | 50 tokens/sec | 最小 | 实时对话 |
| 8 | 120 tokens/sec | 可接受 | 轻度并发 |
| 32 | 200 tokens/sec | 较高 | 批量API |
| 64+ | 250+ tokens/sec | 非常高 | 离线批处理 |
哪种推理引擎最快:vLLM vs Ollama vs llama.cpp?
vLLM:并发请求比Ollama快5–10倍——用于服务多用户的生产API。
llama.cpp:消费级硬件上单个请求最快——用于个人本地设置。
Ollama:单用户设置开发体验最佳;单请求性能与llama.cpp相当。
Text-Generation-WebUI:最慢但功能最多——仅用于实验,不适合生产。
量化真的能加速推理吗?
在现代GPU(RTX 40系列)上,Q4和Q5的运行速度与FP16相同——量化是为了减少显存占用,而非提速。
量化的间接速度优势:
- 模型文件更小 = 从磁盘加载时冷启动更快
- 降低内存带宽需求 = 旧款或内存受限硬件上速度略快(10–15%)
量化主要用于减少显存占用,而非提升原始token吞吐量。
实际能获得多少速度提升?
示例:在RTX 4090上逐步优化7B模型:
| 变更 | 速度 | 累计提升 |
|---|---|---|
| 默认Ollama(基准) | 120 tok/sec | — |
| 禁用调试日志 | 132 tok/sec | +10% |
| GPU显存 → 95% | 150 tok/sec | +25%(总计) |
| 切换到vLLM(批处理) | 300 tok/sec(批处理) | +2.5×(批处理) |
| 综合所有优化 | 300 tok/sec | +2.5×吞吐量 |
常见速度优化错误
- 将GPU显存设置为100%。 存在内存溢出崩溃风险。安全上限为90-95%。
- 降低批处理大小以提速。 批处理大小不影响单请求延迟。仅影响吞吐量。
- 过度量化以提速。 Q4速度与FP16大致相同。量化是为了减少显存,而非提速。
- 部署中途更换推理引擎。 切换Ollama → vLLM → llama.cpp会引入Bug。选定一个,优化它。
常见问题
加速本地LLM推理最有效的单一方法是什么?
对于并发请求,从Ollama切换到vLLM可提供最大单一加速——批处理吞吐量提升5–10倍。对于单个请求,将GPU显存使用率从70%提升至90–95%可获得15–20%的速度提升。禁用调试日志可额外提升10%。
批处理能改善单请求延迟吗?
不能——批处理大小影响吞吐量(每秒总token数),而非单请求延迟。要降低单个请求的延迟,需优化GPU显存使用率并使用更快的引擎(vLLM或llama.cpp)。批次越大,每个请求的等待时间越长。
vLLM比Ollama快多少?
单个请求时,vLLM和Ollama性能相近(RTX 4090运行7B模型均约120–150 tok/sec)。并发请求时,vLLM因连续批处理和PagedAttention快5–10倍。个人/单用户场景用Ollama;多用户API场景切换到vLLM。
量化能加速推理吗?
量化的主要优势是减少显存占用,而非提速。在现代NVIDIA GPU(RTX 40系列)上,Q4和Q5的运行速度与FP16相同。间接速度优势:Q4模型文件更小,从磁盘加载更快,且可能在相同显存预算内允许更大的批处理大小。
为获得最大速度,GPU显存使用率应设置为多少?
在vLLM中将GPU显存使用率设置为90–95%(--gpu-memory-utilization 0.92)。这允许引擎为KV缓存预分配更多内存,提升吞吐量。避免100%——会导致OOM崩溃。5–10%的安全余量不可忽视。
为什么本地LLM在第一次提示后变慢了?
第一次提示会将模型加载到显存中(冷启动),可能需要10–30秒。后续提示以全速运行。保持服务器运行(不要在会话之间重启)。使用Ollama时,设置OLLAMA_KEEP_ALIVE=24h以防止模型在不活动后卸载。
仅CPU推理能有效提速吗?
可以获得有限提升:使用llama.cpp并将线程数设置为物理核心数(非逻辑核心)、启用AVX2/AVX-512指令集,使用Q4_K_M量化。现代i9的现实上限:8–12 tok/sec。对于交互式对话,GPU是唯一能实现可接受延迟的路径。
上下文长度如何影响推理速度?
上下文窗口越长,推理越慢,因为注意力机制随上下文长度呈二次方扩展。处理4K上下文提示的速度约比1K提示慢4倍。将系统提示保持在500 token以下,并对长对话使用上下文摘要以保持速度。
PagedAttention是什么?为什么它能加速vLLM?
PagedAttention是vLLM的KV缓存管理系统。它动态分页内存——类似操作系统的虚拟内存。这消除了显存碎片化,允许更多并发请求,并将GPU利用率从约55%(朴素方法)提升至90%+。
GGUF和safetensors模型格式之间有速度差异吗?
有。GGUF针对内置量化的CPU/消费级GPU推理进行了优化。Safetensors对全精度GPU推理更快。对于运行FP16的RTX 40系列GPU,safetensors + vLLM通常比GGUF + Ollama快10–20%。
参考来源
- vLLM优化指南 -- docs.vllm.ai/en/dev_guide/performance_tuning.html
- Ollama性能技巧 -- github.com/ollama/ollama/blob/main/docs/troubleshooting.md