原贴链接

我想分享一个我一直在做的项目:将AQLM+PV(最先进的2位量化)集成到 Executorch 中进行移动部署

https://x.com/black_samorez/status/1821933255744016866

我已经成功移植了内核并为他们设置了AQLM量化模型的Llama演示编译。此外,我还能够使用他们现有的量化API将嵌入层语言模型头部量化到4位。

最终的Llama-3.1-8b-Instruct检查点仅占用2.3 GB内存,这非常接近总内存需求,因为Executorch是一个非常底层的库。

原始的Llama-3.1-8b-Instruct检查点,可以在vLLMTransformers中运行在GPU上:https://huggingface.co/ISTA-DASLab/Llama-3.1-8B-Instruct-AQLM-PV-2Bit-2x8-hf

适用于安卓的检查点和演示应用APK:https://huggingface.co/ISTA-DASLab/AQLM-executorch

缺点之一是嵌入层/语言模型头部量化似乎会显著降低语法严格应用(如编码)的性能,但这种影响尚未得到充分研究。此外,目前生成速度很慢:它仅利用单个核心并以大约1 tok/s的速度生成。不过,我不是ARM开发和C++多线程方面的专家。如果有谁想帮助我编写更快的内核,我很乐意合作。

讨论总结

本次讨论主要围绕作者black_samorez分享的将AQLM+PV量化技术集成到Executorch中以实现移动部署的项目。讨论中涉及了性能优化、多线程处理、模型量化等技术细节。参与者提出了使用OpenMP进行多线程处理、性能比较、模型格式转换等建议和问题。整体氛围技术性强,参与者积极提供技术支持和反馈。

主要观点

  1. 👍 使用OpenMP进行多线程处理
    • 支持理由:Danmoreng建议使用OpenMP进行多线程处理以提高生成速度,并提供了一段代码示例。
    • 反对声音:black_samorez指出并行化输入对于下一个token预测并不实用,尝试了OMP但效果不佳。
  2. 🔥 量化技术的影响
    • 正方观点:black_samorez成功将AQLM+PV集成到Executorch中,实现了对embeddings和language modeling head的4位量化。
    • 反方观点:量化后的模型在语法严格应用中性能下降,生成速度慢,仅利用单核。
  3. 💡 寻求技术合作
    • black_samorez寻求ARM开发和C++多线程专家的帮助,愿意与了解如何优化C++代码在ARM或高通处理器上运行的人合作。

金句与有趣评论

  1. “😂 Just add openmp for multithreading.”
    • 亮点:Danmoreng的建议简洁直接,提供了多线程处理的思路。
  2. “🤔 Based on our evaluations of MMLU 5-shot…”
    • 亮点:black_samorez提供了基于MMLU 5-shot评估的性能数据,展示了量化技术的实际影响。
  3. “👀 I’d happily collaborate with anyone who knows how to make C++ code run fast on arm-v8a or Qualcomm processors specifically to make it faster.”
    • 亮点:black_samorez表达了合作的意愿,寻求技术专家的帮助。

情感分析

讨论的总体情感倾向积极,参与者对技术细节表现出浓厚兴趣,并提供了建设性的建议和反馈。主要分歧点在于量化技术对性能的影响,以及如何优化代码以提高生成速度。

趋势与预测

  • 新兴话题:量化技术在移动部署中的应用可能会引发更多关于性能优化和多线程处理的讨论。
  • 潜在影响:优化后的模型可能在移动设备上实现更高效的运行,推动AI技术在移动端的普及。

详细内容:

标题:在安卓手机上运行 Llama-3.1-8b-Instruct 并压缩至 2.5GB 内存

近日,Reddit 上一则关于在安卓手机上运行 Llama-3.1-8b-Instruct 的帖子引发了广泛关注。该帖子获得了众多点赞和大量评论。

原帖主要介绍了作者将 AQLM+PV(SOTA 2 位量化)集成到Executorch以用于移动端部署的项目。作者成功移植了内核,设置了 Llama 演示编译,将模型的内存占用压缩至 2.3GB,但也提到了一些问题,如量化在编码等严格应用中会显著降低性能,生成速度慢,仅利用单核且约 1 tok/s,作者并非 ARM 开发和 C++多线程专家,希望有人协助优化。

帖子中引发的主要讨论方向包括如何提高运行速度、不同量化方式的比较、模型的适用性等。核心问题在于如何进一步优化模型在安卓手机上的性能。

讨论焦点与观点分析:

关于提高多线程性能,有用户提出“Just add openmp for multithreading”,并给出了具体代码示例,但作者表示并行化输入对于下一个令牌预测作用不大,且尝试 OMP 后未明显提速。

对于量化方式的比较,作者提供了基于 MMLU 5-shot 的评估数据,表明不同模型的性能差异。

有用户询问是否能以特定格式发布模型以及能否用于特定量化等问题,作者回应了相关的可能性和限制。

还有用户提到了其他相关的优秀模型和应用。

特别有见地的观点如关于不同模型在特定场景下的性能表现分析,丰富了对该话题的讨论。

总之,Reddit 上的这场讨论展现了大家对在安卓手机上优化模型运行的关注和思考,期待未来能有更出色的解决方案。