首页 > 其他分享 >LLM新巅峰||北大提出mllm-NPU,赋能1000字/秒的设备端LLM预填充

LLM新巅峰||北大提出mllm-NPU,赋能1000字/秒的设备端LLM预填充

时间:2024-08-07 11:55:00浏览次数:9  
标签:mllm 内存 LLM NPU 执行 CPU

f1ad29415266286c10eb179c9862d801.jpeg

本文提出了mllm-NPU,这是第一个有效利用设备上神经处理单元(NPU)卸载的LLM推理系统。mllm-NPU的主要设计目标是减少预填充延迟和能耗。它针对主流的仅解码器的变压器架构的LLM(例如LlaMA、GPT等)。关键思想是最大限度地在移动NPU上执行预填充,以加速整数计算,同时保持在CPU/GPU上执行必要的浮点操作以保持准确性。为了克服上述挑战并提高NPU卸载效率,mllm-NPU在三个层面上重构了提示和模型:(1)在提示层面:mllm-NPU将可变长度的提示分割成多个固定大小的块,同时保持数据依赖性;(2)在张量层面:mllm-NPU识别并提取重要的异常值以在CPU/GPU上运行;(3)在块层面:mllm-NPU根据硬件亲和性和对准确性的敏感度将变压器块调度到CPU/GPU和NPU。

https://arxiv.org/pdf/2407.05858

5dd2f98f1fc87ed0c6ccafe2f69bb19e.jpeg

09a202e5d812cce090ca596ad7dc978c.jpeg

mllm-NPU系统设计概述

mllm-NPU是一个创新的大型语言模型(LLM)推理系统,专为移动设备上的神经处理单元(NPU)优化。该系统的主要设计目标是减少预填充(prefill)阶段的延迟和能耗,同时保持推理精度。mllm-NPU通过在算法和系统设计上的协同优化,有效地解决了LLM架构与现代NPU设计之间的语义差异。


mllm-NPU的工作流程包括准备阶段和执行阶段。在准备阶段,mllm-NPU使用增强的张量级量化算法将LLM量化为W8A8格式,并生成固定长度的分块共享图,以高效处理变长提示。在执行阶段,mllm-NPU将接收到的提示分割成固定大小的块,并按照因果关系处理这些块。这些块图会根据它们的数据格式被分割成子图,并根据硬件亲和性和精度敏感性在CPU/GPU和NPU之间进行调度。

1dff7b8486b5febbf888228007367c80.jpeg


三大创新技术详解

1. 分块共享图

mllm-NPU通过引入分块共享图来应对动态提示长度的挑战。这种方法基于对LLM操作符的两种分类:静态操作符和动态操作符。静态操作符如线性层和层归一化,可以跨不同块共享;而动态操作符如注意力机制,依赖于块长度和序列,不能共享。通过这种方式,mllm-NPU将LLM分解为多个子图,共享子图一次构建和优化,非共享子图则针对不同块单独构建。这种方法显著减少了内存开销,并提高了可扩展性。

0448795975b88607e94d4eb07dd5466f.jpeg

2. 影子离群值执行

为了在不牺牲LLM精度的前提下实现NPU友好的张量级激活量化,mllm-NPU采用了影子离群值执行技术。该技术在运行时将具有离群值的激活通道提取到一个更紧凑的张量中,在CPU上执行,并将结果合并回NPU上的原始操作符结果中。这种设计不仅解决了离群值的问题,还优化了内存使用,并减少了CPU和NPU之间的同步开销。

3. 无序子图执行

mllm-NPU采用无序子图执行策略来优化执行效率。通过在块和子图级别进行分区后,LLM子图可以不按块序列顺序执行。这种策略显著扩大了调度空间,最小化了由于CPU/GPU浮点操作引起的执行泡沫。mllm-NPU利用在线启发式算法,在保证正确性的前提下,动态选择执行顺序,从而最大化NPU的利用率并最小化CPU/GPU的工作负载影响。

实现与评估

1. 实现

mllm-NPU的实现涉及多个关键技术,包括分块共享图、阴影异常执行和乱序子图执行。这些技术共同优化了移动NPU的加载效率,显著提高了预填充速度和能效。

  • 分块共享图:通过将变长提示分解为多个固定大小的块,并为每个块构建预优化的计算图,mllm-NPU显著减少了图构建和优化的时间。此外,通过共享不依赖于块序列的静态运算符,减少了内存占用,提高了扩展性。

  • 阴影异常执行:为了在不牺牲精度的情况下实现对NPU友好的张量激活量化,mllm-NPU采用了阴影异常执行技术。通过在CPU上并行处理稀疏的异常激活通道,mllm-NPU能够在保持NPU计算效率的同时,减少由于异常值引起的量化误差。

  • fc6d663638873f87068e4a908ccfce87.jpeg

  • 乱序子图执行:mllm-NPU通过乱序执行子图来优化计算流程,减少由于CPU/GPU上的浮点运算导致的执行泡沫。这种策略扩大了调度空间,使得可以更灵活地管理各个子图的执行顺序,从而最大化NPU的利用率和减少总体执行时间。

  • 22b6f7dba78392ba1b7f647bf7152ab4.jpeg

2. 评估

mllm-NPU的性能通过与多个基线系统的比较得到验证。实验结果显示,无论是在预填充速度、能耗还是端到端推理延迟方面,mllm-NPU都显著优于现有技术。

  • 预填充性能:在1024个令牌的提示长度下,mllm-NPU在Xiaomi 14设备上的预填充速度比使用CPU的llama.cpp快18.17-38.4倍,比使用GPU的TFLite快1.27-2.34倍。

  • 能耗:在Redmi K60 Pro设备上,mllm-NPU在1024令牌提示长度下的能耗比使用CPU的llama.cpp低35.63-59.52倍,比使用GPU的TFLite低1.85-4.32倍。

  • 端到端性能:在实际的移动应用场景中,mllm-NPU在端到端推理延迟上也展现出了优越性,特别是在UI自动化和自动电子邮件回复的任务中,mllm-NPU的表现远超其他基线系统。

性能分析

mllm-NPU的性能优势主要源于其创新的设计和优化策略。通过在移动NPU上最大化整数运算的执行,同时在CPU/GPU上处理必要的浮点运算,mllm-NPU不仅提高了执行速度,还降低了能耗。

  • 内存消耗:尽管mllm-NPU引入了额外的内存开销(主要是由于阴影异常执行技术),但这一开销相对较小,仅占总内存的一小部分。这得益于其高效的内存管理策略,如分块共享图技术,有效减少了不必要的内存占用。

  • 精度保持:mllm-NPU在保持高效NPU执行的同时,几乎不损失推理精度。通过动态处理异常值位置,mllm-NPU能够在元素级别上提供比传统量化方法更高的精度,从而保证了模型的输出质量。

  • 系统兼容性:mllm-NPU支持标准的LLM格式,并可以与现有的解码引擎兼容,使其能够灵活地集成到各种移动设备和应用中。此外,mllm-NPU的设计允许与其他算法级优化技术结合使用,进一步提升性能。

总之,mllm-NPU通过一系列创新技术,显著提高了移动设备上大型语言模型的推理性能,为实现高效、低能耗的移动设备端LLM推理提供了有效解决方案。

准确性与内存消耗

1. 准确性保持

mllm-NPU系统在实现高效的NPU卸载的同时,保持了较高的准确性。与FP16相比,准确性损失不到1%,这在实际应用中是可接受的。这得益于其创新的技术,如影子离群值执行(shadow outlier execution),它允许在CPU上以浮点精度处理离群值,从而保持了高准确性。此外,mllm-NPU与其他基线模型相比,在保持准确性的同时,显著提高了执行效率。

2. 内存消耗

尽管mllm-NPU引入了一些额外的内存开销,例如为离群值执行加载的浮点权重,但这些开销相对较小,仅占总内存的0.6%至1%。此外,通过共享图(chunk-sharing graph)技术,mllm-NPU显著减少了内存需求,因为它允许在不同的执行块之间共享静态操作符。这种方法不仅减少了内存占用,还提高了内存使用的效率。

标签:mllm,内存,LLM,NPU,执行,CPU
From: https://blog.csdn.net/huake6/article/details/140986436

相关文章

  • LLM大模型实战:从零到精通——大模型应用开发极简入门
    大家好,今天给大家推荐一本大模型应用开发入门书籍《大模型应用开发极简入门》,本书对很多AI概念做了讲解和说明!朋友们如果有需要《大模型应用开发极简入门》,扫码获取~本书主要讲解了以下几个方面的大模型技术:GPT-4和ChatGPT的工作原理:书中详细介绍了这两个先进的语言......
  • 代码随想录算法训练营第62天 | 最短路径:dijkstra(堆优化版)+ Bellman_ford算法
    47.参加科学大会https://kamacoder.com/problempage.php?pid=1047dijkstra(堆优化版)精讲https://www.programmercarl.com/kamacoder/0047.参会dijkstra堆.html#思路94.城市间货物运输Ihttps://kamacoder.com/problempage.php?pid=1152Bellman_ford算法精讲https://www.pr......
  • WPF KeyDown MVVM via CallMethodAction of behavior
    <behavior:Interaction.Triggers><behavior:EventTriggerEventName="KeyDown"><behavior:CallMethodActionMethodName="WinKeyDown"TargetObject="{Binding}"/></behavior:EventTrigger>&......
  • WPF Window.InputBindings KeyBinding Key
    //xaml<Windowx:Class="WpfApp233.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mi......
  • 【大模型书籍PDF】LangChain入门指南:构建高可复用、可扩展的LLM应用程序( 推荐)
    今天又来给大家推荐一本大模型方面的书籍<Langchain入门指南>这本书专门为那些对自然语言处理技术感兴趣的读者提供了系统的LLM应用开发指南。全书分为11章,从LLM基础知识开始,通过LangChain这个开源框架为读者解读整个LLM应用开发流程。......
  • LLM学习笔记-位置编码篇
    在Transformer模型中,位置编码(PositionalEncoding)的引入是为了补充自注意力机制(Self-Attention)在捕捉序列位置信息方面的不足。自注意力机制是Transformer的核心,但它对输入序列的位置信息并不敏感。具体来说,Transformer模型对输入序列中的每个元素进行处理时是并行的,而不是像传统......
  • 吴恩达力荐LangChain经典课程-《LangChain大型语言模型(LLM)应用开发》免费分享
    介绍LangChain是一个开源框架,旨在帮助人工智能开发者将大语言模型(如GPT-4)与外部计算和数据源结合起来。这个框架提供了Python和JavaScript包,使开发者能够轻松地将自己的数据与大语言模型连接起来,从而实现更复杂的人工智能应用。LangChain的创始人是哈里森·蔡斯和安库什......
  • 2024大模型秋招LLM相关面试题整理
    0一些基础术语大模型:一般指1亿以上参数的模型,但是这个标准一直在升级,目前万亿参数以上的模型也有了。大语言模型(LargeLanguageModel,LLM)是针对语言的大模型。175B、60B、540B等:这些一般指参数的个数,B是Billion/十亿的意思,175B是1750亿参数,这是ChatGPT大约的参数规模。强......
  • 【人工智能LLM】开源 LLM 大模型汇总以及微调策略_有哪些开源的大模型可以微调(1)
    目录前言LLaMA*[stanfordAlpaca](https://blog.csdn.net/qq_36287702/article/details/131138356#stanford_Alpaca_11"stanfordAlpaca")GuanacoVicunaChinese-LLaMA-AlpacaChinese-VicunaLuotuo-ChineseFalcon*[OpenBuddy-Falcon](https://blog.csdn.......
  • 使用JS的input框实现音频文件的上传与播放功能
    在网页中实现音频文件的上传和播放功能,可以通过HTML的<input>元素和JavaScript来完成。下面是一个简单的示例,展示了如何使用HTML和JavaScript实现这个功能:HTML部分<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>音频上传与播放</title>......