基于Core ML的本地Llama 3.1

基于Core ML的本地Llama 3.1

💡 原文英文,约5800词,阅读约需22分钟。
📝

内容提要

许多应用开发者希望在Apple硅上本地运行大型语言模型(LLMs),以提高推理效率和保护用户隐私。本文介绍了如何优化和部署Llama-3.1-8B-Instruct模型,利用Apple的Core ML框架实现约33个tokens/s的解码速度。通过引入状态化的键值缓存和4位量化,显著提升了模型性能,适用于其他基于变换器的LLMs。

🎯

关键要点

  • 许多应用开发者希望在Apple硅上本地运行大型语言模型(LLMs),以提高推理效率和保护用户隐私。

  • 本文介绍了如何优化和部署Llama-3.1-8B-Instruct模型,利用Apple的Core ML框架实现约33个tokens/s的解码速度。

  • 模型必须经过仔细优化,以有效利用可用的系统资源,因为LLMs通常对内存和处理能力有很高的需求。

  • 使用Core ML框架和优化措施,Llama-3.1-8B-Instruct模型可以在M1 Max上本地运行。

  • 基线模型导出和性能评估是优化过程的第一步,了解模型的基本性能和改进空间。

  • 导出PyTorch模型到Core ML需要定义一个薄包装器,并使用Core ML工具进行转换。

  • 模型输入包括token化的文本序列和二进制注意力掩码,输出为每个token的原始未归一化概率分数。

  • 模型执行分为“提示”和“扩展”两个阶段,使用贪婪采样策略生成下一个token。

  • 评估模型性能的指标包括提示延迟和扩展吞吐量,后者反映了模型生成输出token的速度。

  • 基线模型的扩展吞吐量较低,主要由于静态输入形状和缺乏键值缓存。

  • 通过引入灵活的输入形状和状态化的键值缓存,可以显著提高模型性能。

  • 使用融合的缩放点积注意力(SDPA)和块状int4权重量化进一步优化模型性能。

  • 状态化的键值缓存允许模型在每次预测调用后更新缓存,减少了数据复制的开销。

  • 块状int4量化将模型大小从16GB减少到4.2GB,解码速度提高到约33 tokens/s。

  • 使用Core ML框架和所述优化,开发者可以在Apple硅上本地部署LLMs,利用用户硬件实现成本效益推理。

🔎

延伸解读

本地部署的隐私保护

在Apple硅上本地运行大型语言模型(LLMs)可以有效保护用户隐私。通过避免将数据发送到第三方服务器,开发者能够确保用户信息不被泄露。这种本地化的推理方式不仅提高了数据安全性,还能提升应用的响应速度,适合对隐私要求较高的场景。

优化模型性能的关键

文章中提到的状态化键值缓存和4位量化是提升Llama-3.1-8B-Instruct模型性能的关键技术。状态化键值缓存减少了重复计算,提高了推理效率,而4位量化则显著降低了模型大小,提升了解码速度。这些优化措施对于其他基于变换器的LLMs同样适用,开发者应关注这些技术在实际应用中的实现。

性能评估的重要性

在优化模型时,基线模型的性能评估至关重要。通过了解模型在没有优化时的表现,开发者可以更清晰地识别瓶颈并制定相应的优化策略。文章中提到的提示延迟和扩展吞吐量是评估模型性能的关键指标,开发者应定期进行性能测试,以确保优化措施的有效性。

延伸问答

如何在Apple硅上本地运行大型语言模型?

通过优化和部署Llama-3.1-8B-Instruct模型,利用Apple的Core ML框架,可以在Apple硅上本地运行大型语言模型。

Llama-3.1-8B-Instruct模型的解码速度是多少?

Llama-3.1-8B-Instruct模型的解码速度约为33个tokens/s。

使用Core ML框架的主要优化措施有哪些?

主要优化措施包括引入状态化的键值缓存和4位量化,以提高模型性能。

如何将PyTorch模型导出到Core ML格式?

需要定义一个薄包装器,并使用Core ML工具进行转换,确保输入形状和输出类型正确。

模型性能评估的指标有哪些?

模型性能评估的指标包括提示延迟和扩展吞吐量,后者反映了模型生成输出token的速度。

状态化的键值缓存有什么优势?

状态化的键值缓存允许模型在每次预测调用后更新缓存,减少了数据复制的开销,从而提高了性能。

🏷️

标签

➡️

继续阅读