原贴链接

大家好!今天快速发个帖子;只是想分享一下我在使用 MLX paraLLM 库 https://github.com/willccbb/mlx_parallm 方面的发现。

TL;DR,我获得了超过 5 倍的生成速度!Mistral-22b 从 17 tps 提升到 100 tps!


最近一直在研究合成数据生成,所以想看看 paraLLM——原本以为第一次设置会很棘手,但实际上很容易——克隆了仓库并运行了 demo.py 脚本。这是一个非常愉快的惊喜!

成功地将 Mistral-22b-4bit 的生成速度从 17.3 tps 提升到 101.4 tps(批量大小为 31),大约是 5.8 倍的速度提升。峰值内存使用量从批量大小为 1 时的 12.66gb 增加到批量大小为 31 时的 17.01gb。所以每增加一个并发生成大约需要 150mb 的内存。我尝试设置一个脚本来自动记录内存使用情况,但事实证明没有简单的方法来报告活动内存(我检查过了),并且在推理期间尝试让它工作需要使用线程……所以最后我只是通过查看 MacTOP 并比较推理期间的空闲与峰值来手动完成。

附言,我确实设法将 100 个并发批次的 22b-4bit 挤进了我的 64gb M1 Max 机器(没有将有线内存增加到超过 41gb),但说实话,批量大小超过 30 后并没有太大的提升,因为生成和提示输入都没有增加。但根据模型大小,如果你使用的是 Ultra 而不是 Max 等,你可能会得到不同的结果。

讨论总结

本次讨论主要围绕 MLX paraLLM 库的批量生成技术展开,重点关注了速度提升、内存使用和能量效率等方面。参与者分享了在不同硬件配置下的实际使用体验,讨论了模型转换、低功耗模式下的性能提升以及用户体验的改进空间。总体氛围积极,参与者对 MLX paraLLM 库的潜力表示认可,并期待其生态系统的进一步发展。

主要观点

  1. 👍 MLX paraLLM 库在批量生成方面表现出色

    • 支持理由:通过增加批次大小,生成速度显著提升,从 17.3 tps 提升到 101.4 tps。
    • 反对声音:在批次大小超过 30 后,速度和内存使用并未显著增加。
  2. 🔥 低功耗模式下能量效率显著提升

    • 正方观点:在低功耗模式下进行推理时,Mistral-7b 和 Mistral-22b 模型的 tokens-per-watt 性能提升。
    • 反方观点:作者认为 watts 比 joules 更直观,因为 token 速度通常以 tokens-per-sec 表示。
  3. 💡 MLX paraLLM 库在 Mac 上使用非常方便

    • 解释:首次设置并不复杂,通过简单的脚本即可实现显著的速度提升。
  4. 💡 批量生成技术不会直接提升普通聊天场景中的生成速度

    • 解释:该技术可能在合成数据生成或数据集提炼方面有显著优势。
  5. 💡 MLX-community Huggingface 上已有多个 SOTA 模型转换为 MLX 格式

    • 解释:转换过程使用 safetensor 文件而非 GGUF 文件,可以使用 mlx_lm.convert 工具进行量化转换。

金句与有趣评论

  1. “😂 Also, for energy efficiency nerds like me, the tokens-per-watt gets 20% better if you inference in lowpowermode; managed 10 tokens per watt (generation) for Mistral-7b at batchsize=100. About 3.5 tokens per watt for 22b. That’s about as efficient in terms of words per watt as my brain 😂”

    • 亮点:作者幽默地将模型的能量效率与自己的大脑进行对比,增加了讨论的趣味性。
  2. “🤔 Token rate / Watts = (Tokens / seconds) / (Joules / seconds) = Tokens / Joules 🙂”

    • 亮点:评论者通过数学公式解释了 tokens-per-watt 和 tokens-per-joule 的等价性,展示了讨论的深度。
  3. “👀 Yeah, there’s a MLX-community Huggingface with pretty much all SOTA models converted for use in MLX - for instance Qwen2.5-14b-8bit: https://huggingface.co/mlx-community/Qwen2.5-14B-Instruct-8bit

    • 亮点:提供了具体的模型转换资源链接,对其他用户有实际帮助。

情感分析

讨论的总体情感倾向积极,参与者对 MLX paraLLM 库的性能提升和使用体验表示认可。主要分歧点在于批量生成技术在不同应用场景中的适用性,以及能量效率的衡量标准。可能的原因是参与者对技术的理解和应用场景的不同。

趋势与预测

  • 新兴话题:MLX 库在用户体验方面的改进,如支持更多采样器和量化类型。
  • 潜在影响:随着更多开发者加入,MLX 生态系统将不断改进,可能在更多应用场景中得到广泛应用。

详细内容:

标题:MLX 批量生成令人惊叹

在 Reddit 上,一则关于使用 MLX paraLLM 库的帖子引起了广泛关注。该帖子获得了众多点赞和大量评论。原帖主要分享了作者在使用该库时的惊喜发现,还提供了相关链接https://github.com/willccbb/mlx_parallm

作者表示,在进行合成数据生成的研究时,尝试了 paraLLM,本以为首次设置会很棘手,但实际却很容易。通过克隆仓库并运行demo.py脚本,成功将 Mistral-22b 的生成速度从 17.3tps 提升到 101.4tps,速度提升约 5.8 倍。同时,峰值内存使用从 12.66gb 增加到 17.01gb。

在讨论中,焦点集中在多个方面。有人提到对于能源效率爱好者,在低功耗模式下推理,效率能提升 20%,比如 Mistral-7b 在 batchsize=100 时能达到每瓦 10 个令牌的生成效率,而 22b 约为每瓦 3.5 个令牌。有人认为衡量标准应该是令牌每焦耳,而另有人觉得瓦特更直观,因为屏幕上能直接看到瓦特和令牌每秒的数字。

还有用户询问该技术是否仅适用于 Mac,作者回复称是苹果专用,但在 NVIDIA/CUDA 上也能进行批处理,像 vLLM、Aphrodite、MLC 都可以做批量生成,只是首次设置相对更复杂。

有人好奇这在普通聊天场景中是否能加快 tps,作者表示不能,不过在合成数据生成或数据集提炼方面很有用。

总的来说,这次关于 MLX paraLLM 库的讨论十分热烈,大家在技术细节、应用场景等方面各抒己见,为相关领域的发展提供了有价值的思考。