


2026年3月3日,ollama v0.17.5版本正式发布。这一版本可谓一次重要升级,核心亮点在于新增了Qwen3.5系列模型,并全面改进了采样算法、GPU与CPU混合分配机制、内存峰值监控以及MLX引擎下的稳定性。本文将根据完整的更新内容,详细解析每一处技术改动,让开发者能够理解这一版本背后的架构进步和性能演化。
v0.17.5引入了全新的模型系列——Qwen3.5,包括 0.8B、2B、4B 与 9B 四个参数规模版本。这使得开发者能根据硬件资源灵活选择不同性能梯度的模型。
值得注意的是,在此次版本中,Qwen3.5模型支持 GPU 与 CPU 混合加载模式,同时针对模型“自我重复”问题进行了深度修复。新模型可通过命令重新下载:
ollama pull qwen3.5:35b新版本修复了Qwen3.5模型在GPU与CPU拆分运行时的崩溃问题。此前,当模型部分参数映射至CPU后,DeltaNet层或KV缓存命中时容易出现panic,如今通过对线性注意力张量缺失、conv1d权重校验、层级递归验证进行系统修复,显著提升了混合资源下的运行稳定性。
ollama run --verbose 现在会显示峰值内存使用情况。新增的参数结构 Metrics 中增加了:
• PeakMemory:以GiB或人类可读格式输出峰值内存;
• formatPeakMemory()函数:自动判断单位并格式化显示;
• Summary()方法中新增内存输出逻辑。
这可以帮助开发者在分析模型运行性能时,即时观察峰值占用,便于评估MLX引擎的内存优化效果。
MLX runner一系列补丁包括:
• 修复了在KV缓存命中时引发panic的问题;
• 报告真实内存使用,而非理论分配值;
• 增加错误传播机制,通过api.StatusError将pipeline异常上报到客户端;
• 严格限制模型上下文长度以防越界;
• 优化prompt评估计时逻辑,使计时与计数更精确;
• 引入内存峰值复位API mlx_reset_peak_memory()。
这一系列操作让MLX在处理大模型时更稳定,也为后续GPU监控功能奠定基础。
新版sample/samplers.go重新定义了采样器结构。关键新增:
• presence(存在惩罚)
• frequency(频率惩罚)
• 改进的repeat(重复惩罚)
• Accept()与Reset()机制保证历史token采样状态复位。
这意味着模型在生成文本时,可通过三个维度惩罚控制重复输出的概率,使生成结果更自然、更具多样性。
transforms.go引入新的惩罚运算逻辑:
• 对于正logit采用除法惩罚;
• 对负logit采用乘法维持数值稳定;
• 频率惩罚根据历史出现次数线性递减logit;
• 存在惩罚在再次出现时直接降低得分。
该设计明显针对语言模型重复倾向进行了抑制,使其在多轮生成中表现更像人类语言思维链条。
tokenCounts()函数新增令牌历史回溯长度为64,这相当于模型在采样时考虑过去64个令牌的统计分布。结合presence与frequency惩罚,能有效减少循环性表述问题。
server/routes.go和server/prompt.go修改了Prompt截断逻辑。新策略:
• 当模型类型为MLX(即safetensors格式),将禁用上下文截断;
• 非MLX模型仍保留truncate机制,但在计算时精确考虑图片token数量。
这可以保证MLX模型不会因为Prompt截断而导致上下文缺失,从而提高多模态场景下的生成连贯性。
在images.go中新增:
func (m *Model) IsMLX() bool {
return m.Config.ModelFormat == "safetensors"
}它成为后续路径判断的核心函数,用于区分MLX模型与传统GGUF模型,从而决定不同的加载与截断策略。
原本的接口:
VRAMSize() uint64
TotalSize() uint64被统一重构为:
MemorySize() (total, vram uint64)这使得每次调用能同时返回总占用与显存占用,支持更精准的GPU监控与调度。
相关修改贯穿整个系统:
• llm/server.go
• server/sched.go
• x/imagegen/server.go
• x/mlxrunner/client.go
• x/mlxrunner/server.go
从图像生成模型到LLM主分支,接口结构全面统一,为后续跨引擎集成提供一致的内存访问标准。
model/models/qwen3next/model.go加入了推理层循环判定逻辑:
• 若KV头数含零层则判定为Recurrent;
• 若全非零则根据full_attention_interval推导混合布局;
• 自动兼容旧GGUF模型格式。
这部分逻辑由新单元测试model_new_test.go验证,确保混合注意力布局在导入旧模型时仍保持稳定。
model.Validate()全面检查每层SSM张量是否齐全,包括:
• ssm_dt、ssm_a、ssm_conv1d、ssm_norm、ssm_out 等;
• 若任何缺失,将直接报错明确指出缺失字段。
这样在加载过程中可以即时识别模型结构问题,防止DeltaNet等模块计算时崩溃。
新增**分块拼接树(balanced concat tree)**机制:
• 避免在长提示词下连接操作导致内存膨胀;
• 通过二叉合并方式显著优化Prompt处理速度;
• 减少部分offload状态下的中间张量无缓冲写入问题。
客户端返回内容中新增:
• PeakMemory
• EvalDuration
• PromptEvalDuration
结合服务器端 /v1/status 新增内存字段,形成完整性能监控链路。
client.go里的 Ping()方法从/health改为/v1/status,增加返回:
• ContextLength
• Memory
• Progress
让主调度器动态掌握MLX进程的上下文与内存实时状态。
新管线流程中:
• 超长Prompt提前拒绝(返回400错误);
• 自动计算“生成上限=模型最大上下文长度 - prompt长度”;
• 在生成结束时实时统计峰值内存;
• 通过 CompletionResponse 向客户端报告完整评估计数、时长与内存峰值。
这标志着ollama首次形成贯通的Prompt→采样→内存监控全链闭环。
v0.17.5新增大量测试文件,涵盖:
• model_validate_test.go:验证层校验逻辑;
• transforms_test.go:验证惩罚公式正确性;
• samplers_test.go与benchmark_test.go:性能和采样行为稳定性;
• model_new_test.go:验证Recurrent层推断逻辑。
这说明官方团队已将测试覆盖率扩大到生成过程、结构识别、采样算法和性能基准四个维度。
• repeat_penalty 默认值从 1.1 下调为 1.0;
• 新增 presence_penalty、frequency_penalty;
• 在modelfile.mdx中更新参数表,帮助用户在自定义模型文件中直接使用新的采样控制项。
这代表ollama开始将文本生成的可控性参数化,让开发者在不同场景下能轻松平衡“创造性”与“连贯性”。
代码地址:github.com/ollama/ollama
从整体来看,ollama v0.17.5不仅仅是一次小版本迭代,更是一次系统层级的性能与稳定性重构。
所有变化可归纳为三大技术方向:
1. 模型层级革新:引入Qwen3.5模型、兼容GGUF导入、修复DeltaNet问题;
2. 采样系统强化:添加三重惩罚策略、优化历史记忆机制;
3. 引擎结构统一:内存接口标准化、MLX与LlamaRunner架构合并、峰值监控链路贯通。
这套更新让ollama在未来版本中能够同时支持更强大的多模态模型、更精准的采样控制以及更稳定的跨平台混合计算结构。
开发者建议立即升级至v0.17.5,并重新拉取对应模型文件以获得最稳定的性能体验:
ollama pull qwen3.5:9bollama正以这种“工程级精密迭代”的方式不断向更智能、更稳定、更开放的AI推理平台迈进。此次更新,是其从语言生成引擎迈向平台级分布计算架构的重要一步。
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。
欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
更新时间:2026-03-05
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight All Rights Reserved.
Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302035593号