原贴链接

使用Llama-3.1-8B-Instruct-Q8模型,我在配备M3 Max 64GB的MacBook Pro上对Ollama、MLX-LM和Llama.cpp进行了相同提示(约32k tokens)的测试。所有三个引擎均使用最新版本。考虑到MLX专为Apple Silicon优化,而Ollama是Llama.cpp的封装,我预期速度顺序为Ollama < Llama.cpp < MLX(从慢到快)。然而,结果令人惊讶!Llama.cpp怎么了?我确保所有层都加载到GPU上,并多次重跑测试以确认以下结果:

引擎Tokens提示处理Tokens文本生成
Ollama32141398.16 t/s65925.79 t/s
MLX-LM32134391.40 t/s82818.89 t/s
Llama.cpp32141306.64 t/s7418.77 t/s

讨论总结

帖子作者对Ollama、MLX-LM和Llama.cpp在M3 Max上的性能进行了测试,发现结果与预期不符,引发了广泛讨论。主要议题包括各引擎的上下文大小、参数设置、模型配置的一致性,以及Ollama的自动调优和模型变体对性能的影响。部分评论对测试的有效性和结果准确性提出质疑,也有人对VLLM的性能表示好奇。整体氛围以技术探讨为主,情感倾向中性偏疑惑。

主要观点

  1. 👍 检查参数一致性
    • 支持理由:确保各引擎的上下文大小及其他参数相同,才能进行公平比较。
    • 反对声音:部分评论认为即使参数一致,结果也可能受其他因素影响。
  2. 🔥 Ollama的自动调优
    • 正方观点:Ollama的自动调优可能提升了其性能。
    • 反方观点:自动调优可能导致结果不可控,影响测试的公平性。
  3. 💡 模型变体影响
    • 解释:Ollama可能是Q4变体,影响了其性能表现。
  4. 🤔 测试环境不一致
    • 解释:配置不一致导致测试结果无效,需统一环境重新测试。
  5. 👀 VLLM的性能好奇
    • 解释:有用户对VLLM在这些工具中的性能排名表示兴趣。

金句与有趣评论

  1. “😂 Check out if the context size (and other parameters) is pre-set equally for all three.”
    • 亮点:直接指出参数一致性的重要性。
  2. “🤔 Something is off, how can Ollama be that much faster than llama.cpp when it’s a wrapper of llama.cpp?”
    • 亮点:表达了对Ollama性能异常的疑惑。
  3. “👀 I wonder where VLLM would be in this ranking!”
    • 亮点:引出了对其他工具性能的好奇。

情感分析

讨论的总体情感倾向中性偏疑惑,主要分歧点在于测试的有效性和结果准确性。部分用户对Ollama的性能表示怀疑,认为可能存在虚假宣传。整体上,讨论较为理性,大家更关注技术细节和测试方法的科学性。

趋势与预测

  • 新兴话题:VLLM的性能比较可能成为后续讨论的热点。
  • 潜在影响:此次讨论可能促使更多用户关注模型测试的参数一致性和环境配置,推动相关工具的优化和改进。

详细内容:

标题:关于 Ollama、MLX 和 Llama.cpp 在 M3 Max 上的速度测试引发热议

近日,一则关于在配备 M3 Max 的 MacBook Pro 上测试 Ollama、MLX-LM 和 Llama.cpp 速度的帖子在 Reddit 上引起了广泛关注。该帖子作者使用 Llama-3.1-8B-Instruct-Q8 对同一约 32k 令牌的提示进行测试。截至今日,使用的均为三者的最新版本。

原帖作者原本预期速度排序为 Ollama < Llama.cpp < MLX(从慢到快),但实际测试结果却令人惊讶。帖子中详细列出了测试数据:

引擎令牌提示处理令牌文本生成
Ollama32141398.16 t/s65925.79 t/s
MLX-LM32134391.40 t/s82818.89 t/s
Llama.cpp32141306.64 t/s7418.77 t/s

此帖获得了大量的点赞和众多评论,引发了以下主要讨论方向: 有人指出要检查是否所有模型的上下文大小及其他参数都设置相同。因为 Ollama 若未指定会从模型文件加载并默认设为 2k 令牌,而 llama.cpp 的情况不明确。 有人疑惑为何 Ollama 作为 llama.cpp 的包装器却比 llama.cpp 快很多。有人猜测 Ollama 会对并行请求数量进行自动调优,或许原作者未在 llama.cpp 上设置相同的设置。同时,Ollama 模型默认的上下文大小很小。 有人认为测试中配置缺乏一致性,所以测试不具有效性。 还有人好奇 VLLM 在这种排名中的位置,以及为何生成的令牌长度会有所不同。

在讨论中,有人表示 MLX 确实比 Llama.cpp 快。但也有人认为 Ollama 存在虚假测试等问题。

此次讨论的核心问题在于,为何实际测试结果与预期大相径庭,是参数设置、模型优化还是其他因素导致了这样的差异?不同观点的碰撞,让我们对这些模型的性能有了更深入的思考。