2017年,来自谷歌的几个研究员写下Attention is All you need的题目,给世界带来了Transformer模型架构,它成为了今天“大模型”繁荣背后无可争议的根基,OpenAI的GPT,Meta的Llama以及一众最主流大语言模型都是在Transformer的基础上生长起来的,今天还有一批又一批聪明的研究者在不停尝试提出比Transformer更强的模型架构。
某种程度上,今天所有AI模型层面的研究都在围绕对Transformer的掌控与超越展开。但这样一个划时代的研究在当时并未立刻引起所有人的重视,而这种“嗅觉”的差异也很大程度决定了今天的AI格局——OpenAI在这篇论文出现第二天就立刻彻底转向了Transformer架构,然后2020年5月OpenAI基于Transformer架构的GPT-3论文发表,2年后ChatGPT出现,一切都不再相同。
大模型领域最新的一个热门趋势是把模型塞到手机里。而最应该做这个研究的公司终于带着它的论文现身,那就是苹果。
这家公司的研究团队最近发布了一篇论文LLM in a flash: Efficient Large Language Model Inference with Limited Memory,简单来说,它尝试利用闪存来解决大模型在塞进手机时遇到的内存不足的问题。
这是一个对于端侧部署模型十分关键的问题。
计算机的记忆体(Memory)简单分为内存(Ram)和闪存(Flash)两种。内存用于临时存储那些需要随时访问的数据和指令,它提供高速的读写,有较高的存储密度。而闪存正相反,它读写较慢,适用于长期数据的存储。
因此从特性上看,内存更适合需要频繁读写的大模型。然而这带来一个问题,它成了一个限制死了的搭配,比如一个70亿参数的模型,就需要超过14GB的内存才能以半精度浮点格式加载参数,但这超出了大多数边缘设备的能力。
如这篇论文的标题所示,苹果想要通过闪存来解决这个问题。
苹果版的曹冲称象
论文为了将大模型搬到闪存上,一共做了三步。
第一步:先让闪存能参与到模型运行中来。
论文提到一个概念,大语言模型在前馈网络(FFN)层展现出高度的稀疏性(超过90%)。FFN是一种基本的神经网络架构,其中信息单向流动,从输入层流向输出层,中间可能经过多个隐藏层。在这种网络中,每一层的输出仅作为下一层的输入,而没有任何反馈或循环连接。于是论文把FFN当成是一个筛子,仅迭代传输闪存中必要的、非稀疏数据到DRAM进行处理。
第二步:论文提出了一种名为“滑动窗口技术”的神经元数据管理方法。
把那些在预测模型中产生正输出的神经元定义为活跃神经元,在内存中保留最近一部分输入标记的神经元数据,仅加载当前输入标记与其直接前驱不同的神经元数据。这样做能有效利用内存,释放掉之前分配给已不在滑动窗口内的旧标记神经元数据的内存。
第三步:论文还提出了一种增加数据块大小的策略。
论文用OPT和Falcon模型做实验,把向上投影的第i列和向下投影的第i行捆绑存储。当激活第i个中间神经元时,这两部分数据会同时被使用。通过在闪存中将这些对应的列和行一起存储,可以将数据整合成更大的块进行读取。
这些术语看起来依然晦涩?没关系我们可以做个类比,事实上它的思路与曹冲称象非常像。
首先论文要解决的问题就是,大模型是大象,没办法直接上秤测量(设备内存有限,放不了大模型)。
于是用了三个步骤来在特定环节减少对大模型的访问延迟。
首先找到一个等价方法,让大象上船,测量水位线,再用石头垒在船上,船达到同样的水位线,最后称这些石头的重量(也就是上面说的第一步,可以理解为减少数据加载)。
然后,其中体积一样大的石头不需要称第二次(也就是第二步,优化数据块大小以提高闪存吞吐量)。
此外,搬运石头的时候使用更大的框,一次可以装很多块石头(就是最后一步的,高效管理加载到内存中的数据)。
而这个过程的重点,是优化闪存交互和内存管理,以实现内存受限设备上的高效推理。使用这个方法来预测FFN的稀疏性并避免加载零化的参数,优化成本模型和按需选择性加载参数,实现了可以运行比设备DRAM容量大两倍的模型,并在CPU和GPU上分别比传统方法提速4-5倍和20-25倍。
当然,论文提供的方法只针对60到70亿左右参数的模型,如果是几百亿参数的模型,这样的办法会造成死锁或者内存溢出。不过他仍然给了便携使用大模型的可能性,这是非常难得的。
为了证明论文提出方法的实际价值,论文引用了Facebook的OPT 6.7B模型和TII的Falcon 7B模型。下图在模型的一半内存可用时,1个token的推理延迟。在M1 Max上,每个token从闪存加载需要125毫秒的延迟,内存管理需要65毫秒。因此,每个token的总的与内存相关的延迟小于190毫秒(两者总和)。
相比之下,传统方法需要以6.1GB/s的速度加载13.4GB的数据,导致每个token的延迟大约为2330毫秒。因此,这个方法相对于基准方法有了重大改进。Falcon 7B也是类似,使用论文的方法延迟仅为250毫秒,而传统方法的延迟为2330毫秒。延迟肯定是越低越好,越低代表从闪存中加载大模型的速度越快。
在AI上落后了?苹果已经悄悄地做了一堆工作
在今年AI的疯狂里,苹果曾被诟病动作很慢,但这篇论文、此前苹果提出的MLX框架、自动语音识别(ASR)以及它自己的模型Ferret等研究,其实都在说明苹果已经目标明确在做很具体的研究了。看看这几个重要的但并没有引起很多重视的研究,也可以感受到苹果AI上的大方向。
MLX框架是苹果在2023年推出的一个专门运行在苹果芯片上的机器学习数组框架。MLX支持可组合的函数变换,用于自动微分、自动向量化和计算图优化,但重点是MLX中的计算只有在需要时,数组才会被实际计算出来。同时MLX中的计算图是动态构建的,改变函数参数的形状不会触发缓慢的编译过程。而且MLX中的数组存在于共享内存中,可以在任何支持的设备类型上执行MLX数组的操作,而不需要数据传输。
也就是说,MLX突出一个节省资源且“海陆空”三栖作战(可以同时调用内存、显存,可以在手机和电脑运行)。这说明苹果非常注重模型的可实现性,即便是手机这样内存有限的设备也能跑大模型。当有了这样的框架后,苹果就可以将Ferret模型塞进便携设备里了。
Ferret模型是苹果在2023年10月推出的新型多模态大型语言模型(MLLM),它能够理解图像内任意形状或粒度的空间指代,并准确地对开放词汇的描述进行定位。Ferret采用了一种新颖而强大的混合区域表示方法,将离散坐标和连续特征结合起来表示图像中的一个区域。为了提取多样化区域的连续特征,论文提出了一种空间感知的视觉采样器,能够处理不同形状之间的稀疏性差异。模型有了这种理解能力,意味着Ferret可以接受各种输入,比如点、边界框和自由形状,像是DALL·E也好,Midjourney也好,都不能完全理解这种提示词的输入。
苹果将要推出的AR设备Vision Pro,对外宣称是首款采用空间计算的产品。空间计算本质是传感器的一门学问,通过传感器来获取关于物理空间的数据,并通过计算和分析这些数据来理解和处理环境信息。传统电子设备屏幕都只是平面二维,但是空间计算作用的是现实中三维空间的物理概念,在Ferret的加持下,空间的边界感、长宽高三种向量的立体感就会更加明显。
Ferret模型不一定能按要求画出最美的画面,但它一定能符合拥有艺术设计能力创作者的需求。尤其是在视觉识别、配色方案、排版、网格等设计专业领域,Ferret模型的效果将会最为明显。设计从业者是苹果最为广泛的受众之一,苹果就像是个狙击手,专门瞄准用户最需要它的地方。
此外苹果也一直在对与Siri相关的AI技术做研究,比如大语言模型在SLU任务上的准确性受限于ASR系统对给定语音输入的准确性。为了解决这一问题,苹果找到了一种方法:使用ASR的n-best假设列表来提示大语言模型,而非仅依赖错误率较高的1-best假设。这意味着Siri在接入大语言模型后,性能会得到提高。
至此,从硬件的芯片层,到调用系统侧,到与空间计算概念相联系的自研多模态模型,再到目前看起来最被期待的AI能力的入口Siri,苹果都已经有体系、有目的、有节奏地完成了诸多技术积累。2024年,在讨论AI时可能没人能忽视苹果了。
本文来自微信公众号:GenAI新世界(ID:gh_e06235300f0d),作者:苗正,编辑:王兆洋