ollama run llama3 即可开始服务。它在底层封装了 llama.cpp(在 Apple Silicon 上还封装了 MLX),并暴露了一组环境变量和模型参数来控制硬件的使用方式。默认设置适合日常使用,但会留下大量未利用的性能。本指南涵盖每个重要参数以及如何为您的工作负载进行设置。
最后验证时间:2026-10-14 — Ollama v0.33.2。
Apple Silicon 使用 MLX。 从 Ollama 0.19 开始,Apple Silicon 上的默认后端是 Apple 的 MLX 框架,而非 llama.cpp。MLX 在 M 系列芯片上提供了更快的推理速度(请参阅 Apple Silicon 和 MLX 优化)。本指南中的大多数环境变量同时适用于两个后端;行为不同的地方会明确说明。
上下文窗口调优
上下文窗口(num_ctx)控制模型在单个请求中可以处理的 token 数量——包括您的提示词和生成的响应。它是仅次于模型权重本身的最大内存消耗因素。
如何增加 Ollama 上下文窗口
Ollama 默认使用 2048 token 的上下文窗口。大多数现代模型支持 8K、32K 甚至 128K token,但 Ollama 默认不使用模型的最大值——它使用 2048 来保持内存使用可预测。 有 3 种设置方式,从最具体到最全局: 按请求设置(API):Windows
macOS
上下文窗口内存开销
KV 缓存随上下文长度线性增长。计算公式:Flash attention
Flash attention 是 Ollama 提供的最接近免费性能提升的优化。它重新设计了模型计算 token 之间注意力的方式——不再在内存中实例化完整的注意力矩阵,而是以适合快速 SRAM 的分块方式计算注意力。结果是:- 降低 30-50% 的内存使用用于 KV 缓存——在长上下文长度时收益最大。
- 更快的推理——尤其在 GPU 上,分块计算很好地映射到张量核心。
- 相同的输出质量——flash attention 在数学上等同于标准注意力,不是近似计算。
如何在 Ollama 中启用 flash attention
设置环境变量:Windows
macOS
在使用 MLX 后端的 Apple Silicon 上,flash attention 默认启用,
OLLAMA_FLASH_ATTENTION 变量无效——MLX 始终使用优化的注意力内核。GPU 卸载策略
Ollama 自动将模型层卸载到 GPU。当完整模型可以放入 VRAM 时,所有层都在 GPU 上运行以获得最快速度。当 VRAM 紧张时,Ollama 在 GPU 和 CPU 之间分配层——GPU 运行它能处理的部分,其余回退到系统内存。Ollama 如何决定 GPU 层数
Ollama 的 GPU 调度按以下顺序工作:- 完全卸载——如果模型权重 + KV 缓存可以放入 VRAM,所有层都放到 GPU。这是最快的配置。
- 部分卸载——如果模型无法完全放入,Ollama 将尽可能多的层放在 GPU 上,其余在 CPU 上运行。性能会下降,因为每次前向传播都必须通过 PCIe 总线访问 CPU 侧的层。
- 仅 CPU——如果没有可用的 GPU 或 VRAM 太小连几层都放不下,整个模型在 CPU 上运行。
GPU 层数控制:num_gpu
参数 num_gpu 设置卸载到 GPU 的层数。在 Modelfile 中或按请求设置:
Modelfile
API
VRAM 预算
每个卸载的层同时消耗权重和 KV 缓存的 VRAM。粗略估计:
预留 1-2 GB VRAM 余量用于 CUDA 上下文和开销。
KV 缓存精度
KV 缓存存储每个活跃序列中每个 token 的键和值张量。默认情况下,Ollama 使用f16(16 位浮点)。您可以切换到量化精度,以微小的质量代价换取内存使用的降低。
通过 OLLAMA_KV_CACHE_TYPE 环境变量设置缓存类型:
线程配置
参数num_thread 控制 Ollama 用于推理的 CPU 线程数。合适的值取决于 CPU 实际承担的工作量。
在 Modelfile 中或按请求设置:
Modelfile
API
OLLAMA_NUM_THREADS 全局设置:
在 Apple Silicon 上,线程调优的重要性较低,因为 GPU 和 CPU 共享统一内存,MLX 后端负责调度。默认值通常效果良好。
批处理大小调优
参数num_batch 控制 Ollama 在预填充阶段(提示词摄取)一次处理多少 token。默认值为 512。
Modelfile
并行请求
OLLAMA_NUM_PARALLEL 控制单个模型同时处理多少个请求。默认值为 1——Ollama 每个加载的模型一次处理一个请求。
内存和 VRAM 随
OLLAMA_NUM_PARALLEL 扩展。每个并行请求需要自己的 KV 缓存。如果您以 num_ctx 8192 服务 4 个并行请求,您需要 4 倍于单个请求的 KV 缓存内存。何时增加并行请求
在以下情况下增加OLLAMA_NUM_PARALLEL:
- 您从同一模型服务多个用户或智能体。
- 您运行的批处理工作负载中总吞吐量比单个请求延迟更重要。
- 您有 VRAM 余量,且单个请求时 GPU 利用率不足。
- 您服务单个用户或智能体。
- 您优先考虑低延迟而非吞吐量。
- VRAM 紧张。
模型内存管理
保持模型加载:OLLAMA_KEEP_ALIVE
默认情况下,Ollama 在 5 分钟不活动后将模型从内存中卸载。下一个请求必须从磁盘重新加载模型,根据模型大小和磁盘速度需要几秒到几分钟。
设置 OLLAMA_KEEP_ALIVE 来控制模型保持加载的时间:
限制加载的模型数:OLLAMA_MAX_LOADED_MODELS
Ollama 可以同时保持多个模型加载。默认值为 3 ×(GPU 数量)或仅 CPU 时为 3。如果您服务多个模型并希望限制内存使用,请降低此值:
Apple Silicon 和 MLX 优化
从 Ollama 0.19 开始,Apple Silicon 上的默认后端是 Apple 的 MLX 框架。MLX 针对 Apple 的统一内存架构进行了优化,在 M 系列芯片上提供比 llama.cpp 更快的推理速度。性能提升
来自 Ollama 2026 年六月 MLX 优化更新的基准测试:
MLX 还在 Apple Silicon 上支持 NVFP4 量化,提供接近 BF16 的质量,仅 4 位内存占用——质量损失是 Q4 量化的一半。
Apple Silicon 优化建议
- 使用 MLX 优化的模型。 在 Apple Silicon 上拉取模型时,Ollama 自动使用 MLX 后端。无需配置。
- Flash attention 始终开启。 MLX 默认使用优化的注意力内核。
OLLAMA_FLASH_ATTENTION变量无效。 - 统一内存意味着完全 GPU 卸载。 Apple Silicon 的 GPU 可以访问全部 RAM 池,因此
-ngl 999(所有层在 GPU 上)只要模型和 KV 缓存可以放入统一内存即可工作。 - 使用
OLLAMA_KV_CACHE_TYPE=q8_0来扩展内存预算。将 KV 缓存减半可以让您运行更大的模型或更长的上下文。 - 设置
OLLAMA_KEEP_ALIVE=-1用于常驻推理。模型保持在统一内存中,无重新加载开销。
如果您需要跨平台可移植性,或想在 NVIDIA GPU 和 Mac 上运行相同的配置,可以强制 Ollama 在 Apple Silicon 上使用 llama.cpp 后端。请联系 Ollama 支持团队或查阅其文档,了解用于覆盖后端选择的环境变量。
示例配置
Mac Studio M2 Ultra — 128 GB 统一内存
Modelfile
NVIDIA RTX 4090 — 24 GB VRAM
Modelfile
多 GPU 服务器 — 4× RTX 4090(96 GB 总 VRAM)
Modelfile
仅 CPU 服务器 — 64 GB RAM,无 GPU
Modelfile
高吞吐量批处理 — RTX 4090
Modelfile
低延迟交互式服务 — RTX 4090
Modelfile
常见错误及如何避免
错误 1:将 num_ctx 设置过高
问题: 您将num_ctx 128000 设为”以防万一”,但您的提示词不到 2K token。您刚刚浪费了 64 GB 的 KV 缓存内存。
修复: 将 num_ctx 设置为匹配您的实际工作负载。如果您的提示词不到 4K token,使用 num_ctx 4096 或 num_ctx 8192。您随时可以通过 API 为特定请求增加它。
错误 2:忘记 flash attention
问题: 您使用的 VRAM 比实际需要多 30-50%,因为没有启用 flash attention。 修复: 始终设置OLLAMA_FLASH_ATTENTION=1。在支持的硬件上没有缺点。
错误 3:未控制模型卸载
问题: 休息 10 分钟后重新发起请求,第一个请求花了 30 秒,因为 Ollama 从磁盘重新加载了模型。 修复: 设置OLLAMA_KEEP_ALIVE=-1 用于常驻推理。模型保持在内存中,每个请求都能即时响应。
错误 4:在 GPU 上使用过多线程
问题: 您在 32 线程的 CPU 上设置了num_thread 32,但所有层都在 GPU 上。多余的线程争抢缓存并拖慢调度。
修复: 当所有层都在 GPU 上时,使用 num_thread 2 到 num_thread 4。CPU 只处理调度和分词,不做推理计算。
错误 5:忽视 KV 缓存精度
问题: 您的 VRAM 不足,Ollama 将层卸载到 CPU,但您从未考虑过 KV 缓存使用了 2 倍于必要的内存。 修复: 设置OLLAMA_KV_CACHE_TYPE=q8_0 将 KV 缓存内存减半。这是质量和内存节省的最佳平衡。
错误 6:将 OLLAMA_NUM_PARALLEL 设置过高
问题: 您在 24 GB GPU 上设置了OLLAMA_NUM_PARALLEL=16,现在每个请求只有 1.5 GB 的 KV 缓存。请求失败或质量下降。
修复: 计算您的 KV 缓存预算:(VRAM - model_weights) / num_parallel。如果每个请求不到 1 GB,请减少 num_parallel 或降低 num_ctx。
故障排除
Ollama 启动后变慢
原因: 模型已被卸载,必须从磁盘重新加载。 修复: 设置OLLAMA_KEEP_ALIVE=-1 以无限期保持模型加载。
内存不足错误
原因: 模型 + KV 缓存超出可用 VRAM 或 RAM。 修复: 减少num_ctx,启用 OLLAMA_FLASH_ATTENTION=1,设置 OLLAMA_KV_CACHE_TYPE=q8_0,或使用更小的量化。
GPU 未被使用
原因: Ollama 未检测到 GPU,或 VRAM 太小连几层都放不下。 修复: 检查ollama ps 查看层是否在 GPU 上。对于 NVIDIA GPU,确保安装了 NVIDIA 驱动和 CUDA 工具包。对于 AMD GPU,确保安装了 ROCm。
CPU 推理缓慢
原因: 线程过多,或层在 GPU 和 CPU 之间分割。 修复: 将num_thread 设置为物理核心数。如果可能,使用 num_gpu 将更多层卸载到 GPU。使用更小的量化(Q4_K_M 或 Q5_K_M)以在 GPU 上放入更多层。
后续步骤
Ollama 远程访问
通过 Tokios 向团队成员和智能体暴露您的 Ollama 模型——无需开放端口或设置 OLLAMA_HOST=0.0.0.0。
硬件参考
比较用于本地 LLM 推理的硬件平台——规格、模型容量和建议。
模型适配查找
查找哪些模型可以在您的硬件上运行,或哪些硬件可以运行您的目标模型。
测试您的部署
在调优后测量延迟和吞吐量以确认改进效果。
常见问题
Ollama 快速推理的最佳配置是什么?
Ollama 快速推理的最佳配置是什么?
启用 flash attention(
OLLAMA_FLASH_ATTENTION=1),将上下文窗口设置为任务实际所需的大小(而非模型最大值),对长上下文使用量化 KV 缓存(OLLAMA_KV_CACHE_TYPE=q8_0 或 q4_0),并确保模型完全卸载到 GPU。具体命令请参阅上述各节。如何减少 Ollama 的内存使用?
如何减少 Ollama 的内存使用?
最大的 3 个调节手段:(1)降低
num_ctx——内存随上下文长度线性增长,(2)使用 OLLAMA_KV_CACHE_TYPE=q4_0 量化 KV 缓存,最高可节省 75% 的 KV 缓存,(3)使用更小的模型权重量化(例如 Q4_0 而非 Q8_0)。Flash attention 还可以节省 30-50% 的注意力内存。Ollama 在 Mac 上使用 MLX 吗?
Ollama 在 Mac 上使用 MLX 吗?
是的——从 Ollama 0.19 开始,Apple Silicon 上的默认后端是 Apple 的 MLX 框架,而非 llama.cpp。MLX 在 M 系列芯片上提供更快的推理速度(55-80 tok/s,M2 Ultra,而 llama.cpp 为 25-40 tok/s)。
OLLAMA_FLASH_ATTENTION 变量对 MLX 无效,因为 MLX 始终使用优化的注意力内核。Ollama 可以处理多少并行请求?
Ollama 可以处理多少并行请求?
设置
OLLAMA_NUM_PARALLEL(默认 1)。每个并行槽位为 KV 缓存增加约 20-30% 的内存开销。对于 7B 模型 Q4 量化 8K 上下文,4 个并行槽位可以舒适地放入 8 GB VRAM。对于更大模型或更长上下文,从 2 开始测量。为什么 Ollama 加载模型很慢?
为什么 Ollama 加载模型很慢?
模型加载时间主要消耗在从磁盘读取权重并移至 GPU。使用 NVMe SSD(而非 HDD),设置
OLLAMA_KEEP_ALIVE 保持模型在请求之间处于热状态,设置 OLLAMA_MAX_LOADED_MODELS 以避免驱逐和重新加载。在 Apple Silicon 上,NVFP4 模型加载更快,因为权重更小。应该使用什么 GPU 卸载设置?
应该使用什么 GPU 卸载设置?
默认情况下,Ollama 自动选择卸载到 GPU 的层数。为了获得最快速度,将
num_gpu 设置为模型的总层数(完全卸载)。如果 VRAM 不足,先减少 num_ctx,再减少 num_gpu——保持模型完全在 GPU 上几乎总是比部分卸载更快。来源
- Ollama FAQ — 关于环境变量和配置的官方文档
- Ollama Modelfile reference — 参数语法和有效值
- Ollama MLX performance update — 2026 年六月 Apple Silicon 基准测试和优化
- Ollama GPU scheduling deep dive — VRAM 管理和多 GPU 行为
- Ollama performance tuning: batching, KV cache, and OOM — num_batch 基准测试和内存计算
- Ollama environment variables: complete reference — 针对 v0.32.5 源码审计
更改 Ollama 配置后,请重新注册您的 Tokios 部署,以便连接器获取新的上游端点。请参阅注册模型。