先说个判断:很多人觉得GPT这类东西就是一阵风潮,那些声称要在手机上跑大模型的说法,不过是博眼球的标题党。但说实话,在手机这类边缘设备上托管至少一个精简版的大型语言模型(LLM),确实有实实在在的需求——尤其是在大幅提升自然语言处理能力这件事上。问题在于,这些模型通常跟庞大的云平台绑定在一起,体量惊人,想把它们搬到边缘设备上,挑战不小。移动GPT这条路,绕不开一些关键创新。
为什么值得为移动版GPT较这个劲?
回想当年Siri刚出来那会儿,大伙儿确实挺兴奋的。跟机器聊天、让它听懂你的话,简直像是科幻片成真。但这种新鲜感很快就被现实浇灭了——你会发现,它的“理解”其实很肤浅。你得一次次地换着花样重复同一句话,就差没吼出来了,才能指望AI终于蒙对一次。后来有了短语级别的识别,比单纯靠关键词匹配强点,但碰上自然语言那点行云流水的灵活性,还是抓瞎。结果就是,你要想让语音助手管用,最好事先知道那些预设的训练短语,而不是直接说人话。这距离真正的自然语言处理,差得还远。
大型语言模型在这方面打了个漂亮的翻身仗。它们靠全球数据集训练,用基于自注意力机制的Transformer方法,学会了从自然语言里抓取常见的模式,不再死磕关键词的邻近度或固定的短语结构。这样一来,它们不仅能从你的自然语言请求中提取意图、重新组织表达,甚至能反过来给你提建议、优化你的表达方式。这已经非常接近我们理想中的自然语言处理了——而且,这项能力本身就有独立的价值,不用非得连上互联网去查事实数据。只不过,这一切目前还待在云端。
实现移动版GPT,路子怎么走?
现在稍微智能点的音箱,会在本地做一些基本的语音处理(比如语音识别、标记化),然后真正的理解活儿还是甩给云端。有人提议,手机也可以走类似的混合路线,来提升NLP的质量。但这条路的老毛病大家都知道:延迟和隐私。所以更理想的做法,是把计算留在边缘设备上,尽量少依赖云。那么问题来了:咱们真的需要把云端那么庞大的模型原封不动地搬到手机上吗?
GPT-4大概有一万亿个参数,放到移动应用里简直是天方夜谭,完全不可行。但2021年Google DeepMind放出一个大招——“检索增强变换器”(Retro)。它的思路很巧妙:不再把所有事实信息都硬塞到模型参数里,而是意识到这些事实可以直接从纯文本数据或搜索中实时检索出来(当然,要高效实现这点,细节上还得下功夫)。就这一个改变,就能把模型的大小砍到原来的几个百分点。虽然离塞进手机还有距离,但已经让人看到希望了。
要进一步缩小模型,就得靠剪枝和量化。量化在把训练好的CNN或其他模型映射到边缘设备时,已经是家常便饭了。简单说,就是把浮点权重有选择地换成定点权重,可以降到8位、4位甚至2位,同时不断验证结果准确率,确保不会砍过头。再结合压缩解压缩,量化得越精细,模型就越小,推理速度也更快,功耗也更低(因为DDR读写少了)。剪枝则是另一招:通过测试各个权重对结果的敏感度,有选择地把不重要的权重替换成零。很多NLP模型里,相当大一部分权重其实没那么关键。如果搭配高效的稀疏处理器,这种剪枝能进一步缩小有效模型体积,提升性能。当然,具体能优化多少,还得看具体的AI平台。
CEVA NeuPro-M:给移动GPT准备的硬件
NeuPro-M NPU IP是一系列专为嵌入式应用设计的AI处理引擎。把模型映射到这些引擎的预处理软件,能把有效模型大小缩小最多20:1。结合Retro压缩之后,整个LLM的大小可以控制在约十亿参数左右。这在现代边缘AI引擎(比如NeuPro-M IP)的容量范围内,完全可行。
NeuPro-M核心的配置很灵活,从1到8个并行引擎可选。每个引擎都配了一套翻跟斗:专门优化无结构稀疏性的真实稀疏模块、负责注意力或softmax计算的神经乘法器,以及处理各种定制需求的向量处理单元。这些核心共享一块公共的L2内存,可以并行跑数据流,提高吞吐量,尤其擅长并行化那些耗时的softmax归一化计算和注意力步骤——这样一来,归一化带来的延迟开销就被有效消除了。性能方面,NeuPro-M从每个核心4 TOPS起步,最高能到256 TOPS,整个系统可以提供超过1200 TOPS的性能。
如果我们真想用这东西来替代Siri这类语音应用,还得加上语音识别和文本转语音的功能,才能打造一个完全以语音为中心的交互界面。CEVA的WhisPro已经实现了语音接收,而输入时的语音识别和输出时的文本转语音,完全可以用跑在NeuPro-M上的小型Transformer来处理。所以,你完全可以在一个平台上搭建完整的语音交互管道:从语音输入,到识别和理解,再到语音输出。
当然,如果你真想让手机根据语音提示给你写一篇关于复杂主题的详细论文,那可能还是得让它连上互联网去查事实数据,然后生成文章。但话说回来,在大多数更实际的场景里——比如找餐馆、查电视上正在播的电影、问奥斯汀今天天气怎么样——你可能只需要在最后一步连网获取数据就行了,再也不需要为了搞懂你的问题而走这一趟。这不就是人们一直想要的那种体验吗?确实挺酷的。
