契机
M4 Mac mini 的发布,结合国补可以说掀起了一股购机潮。16GB 起步的内存、3500 元的价格加上新模具,笔者也忍不住购入了一台。
苹果之所以大发善心,让 Mac mini 从 16GB 内存起跳,其中一个重要的原因就是 Apple Intelligence。不少人会有一个误解:苹果不是外包大模型给 OpenAI 了吗,为什么需要端上计算?实际上大部分 Apple Intelligence 的应用都是苹果自研的模型1,其他提供方的定位更像是搜索引擎。
参照苹果基座大模型(AFM)的论文2的架构图,Apple Intelligence 大致分为两部分:
- 端上模型(AFM-on-device),约 2.73B 的模型,经过混合精度的量化,能够在 Apple Neural Engine 上运行(这里我们记住量化和能在 ANE 上运行,后面再详细展开)。
- 云端模型(AFM-server),未知参数量,运行在 Apple silicon 服务器上,并通过隐私云计算(Private Cloud Compute)提供隐私安全保证。更多 PCC 相关设计请参照博客3。注意所有第三方模型服务都是运行在 PCC 之外的,因此随着苹果服务端模型能力的提升,使用其提供的服务是更好的选择。
以这个 2.73B 的模型为例,经过量化之后每个权重大概是 3.5 bits,那么运行时需要占用的统一内存为 2.73*3.5/8=1.19 GB,这还仅仅是一个语言模型,不同场景可能还有专有的多模态模型,因此常驻几 GB 的内存如果还是默认 8 GB 的运行环境,实在不能说是「为 Apple 智能准备好」。
随着 DeepSeek v2、Qwen-2.5、Llama-3.3 等开源模型的发布,开源模型的部分能力逐渐持平甚至超过 gpt-4o,Local LLM 社区也掀起一股又一股热潮。虽然各家旗舰模型基本在千亿(100B)左右规模,合理量化下消费级单机设备很难跑得动,但 5B 左右的小语言模型(SLM)或者多模态模型也是进展喜人,同样值得我们关注。
下图是来自 Qwen-2.5 的博客4,MMLU 能达到 65 分以上的模型尺度越来越小。
另有研究5发现,几乎每隔 3.3 个月,模型能力密度会翻倍,即能在更小的尺度下压缩更多的知识。
为什么我们需要本地大模型
读到这里,有很多人会有疑问:厂商提供的模型服务好用、后期有保证、价格便宜甚至免费,为什么还会有部署本地大模型这种需求?
这个问题和在家里自建服务、NAS、甚至服务器非常类似,但还是有些不太一样的地方:
隐私?
可能有人觉得自己本地的项目、知识库是自己的固有 IP,接入外部大模型有隐私问题。这个问题是存在的,但是非常少。
实话说,在当前阶段,用户输入数据不再是这些头部大模型公司训练数据的可靠来源,为了解决复杂的推理任务它们甚至更倾向于使用合成数据;如果是出于避免广告追踪的目的,使用手机厂商封装的第三方服务,这些模型服务提供方大概率也无法追踪到个人。
但是和智能音箱的语音交互、NAS 上的个人相册、家里的监控录像一样,这些数据也足够构成部署一个本地模型来处理的理由。
好玩!
是的,relax,除非你是买了几台 Mac mini 用雷雳口连接组集群的狂热爱好者,抑或是 4 路 4090 的「国家电网合作伙伴」,那你完全可以把本地部署大模型当成一种纯粹的挑战和娱乐。
它和其他自建服务一样,可能有一定的上手门槛和维护成本(这里不完全对,大模型存在的意义就是解决问题的门槛变得非常低),但是真的可以很有乐趣。比如我有这样几个想法,虽然没有时间,一定可以用大模型实现:
- 语音家居自动化:现在语音助手只能开关调整状态,还是非常初级。本质上它们都还是关键词匹配,没办法理解用户指令。本地 LLM 可以理解诸如「每周六 12 点如果家里只有一个人就关上窗帘」这样的复杂指令,并输出可供 Home Assistant 执行的自动化服务。
- 本地 RSS 过滤:基于用户设定的兴趣,通过正文和摘要过滤 RSS feed 相关内容,这个用来筛 arxiv 文章感觉很有用。
- 简易的猫粮投喂:定时取拍喂食器的摄像头图像,给多模态模型分析是否有猫粮,如果没有就投喂,彻底告别那些带着摄像头、溢价高、有隐私问题还可能随时跑路的产品。
这里就需要大家大开脑洞。幸运的是,因为大模型的通用性非常好,我们也不再需要精调、训练、阅读年久失修的部署文档,完成这样的工程甚至不停求助 API 模型就可以。
除此之外还有更高阶的玩法。得益于开源模型的涌现,我们可以操作模型的权重得到更有意思的输出:
- 模型融合:通过 mergekit6融合系列模型的参数,得到更强大的模型。听上去很不靠谱,但实际上不少公司模型训练中和社区模型是这么产生的。比如你可以平均一下 Qwen-Coder 和 Qwen-Math,很可能得到一个代码和数学都不错的模型。下图中 mergekit-community/QwQ-32B-Preview-Instruct-Coder 就是由三个模型融合得到的。
- 特征增强(feature steering):来自 Anthropic 对 Sonnet 的可解释性研究7,通过加强特定特征,改变模型的输出行为。比如下图加强「金门大桥」十倍之后模型自我认知变成了「金门大桥」而不需要提示词辅助。
- 模型越狱:厂商发布的大模型一般经过了安全对齐导致某些方面能力不足,比如创造性。可以通过一定的训练重新矫正相关行为。
同时不得不提到开源社区的活跃同时带来了多方面的进步,我们不仅有了更好的训练、推理工具,也带了模型技术上的迭代。例如现在最常用的长序列扩展方法 NTK aware scaling,是作者在研究 SuperHot8的时候偶然发现,相关内容直接发布在 r/LocalLLaMA 中。
选择什么大模型
好了,我们打开 HuggingFace 开始挑选心爱的模型,结果一下子被这浩如烟海的模型整出选择恐惧症了。好在 HuggingFace 贴心地给了我们一个 2024 年开源模型总结9,这里你可以看到最受大家喜爱的一批模型:
厂商的模型命名确实是非常值得吐槽,连 OpenAI 这些搞 to C 的产品名称也经常让人一头雾水。从上面的图里,我们简单认识一下这些命名规则:
- 模型名和版本号:例如 Qwen-2.5、Llama-3.1,一般来说是越大越好
- 模型参数量:1.5B、7B、70B 等等,可以看到大多数下载都是 10B 一下的模型,也是消费级显卡能跑起来的模型大小,同样也是越大越好
- 是否经过对话对齐:一般带 Chat/Instruct 的模型是能进行对话的,Base 模型只能做补全任务
- 特殊能力:Coder/Code 经过代码加训,Math 经过数学增强等等
- 多模态:Vision 或者 VL 代表具有视觉能力,Audio 能进行音频处理等等
- 模型(量化)格式:GGUF、AWQ、GPTQ 等等,为了节省显存进行了量化
从这些命名中我们大致能定位到自己想要的模型。但是另外值得注意的是模型支持的语言——并不是所有开源模型都像 ChatGPT 一样能做到几乎支持所有语言,比如 Llama 就不支持中文。尽管这些模型是能够进行多语言对话的,但是能力会相较于支持的语言有所降低。
模型能力是我们选择模型的第一指标,但是什么是模型能力?它和什么因素相关?
什么决定模型能力?
根据传统的训练 Scaling Laws,模型训练的 loss 直接和训练的计算量相关(包括模型参数大小、训练的数据量),当 loss 降低到一定程度,模型会出现「涌现行为」,即在任务中的准确性有突然的提升。
我们可以直观理解为「脑子越大、书读越多,成绩越好」,并会在某个时刻突然「开窍」了。以 Qwen 为例:
- Qwen-1.5-72B 训练了 3T tokens,Qwen-2.5-72B 训练了 18T tokens10,后者效果自然会更好
- Qwen-32B 一定会显著好于 Qwen-7B,但是再往上 Qwen-72B 对于特定应用场景的相对提升可能变小了
各家卷训练算力逐渐饱和之后,目前还有类似 o1 、开源的 QwQ 这样的模型,会主动进行更多的推理,提高模型能力。我们可以直观理解成「思考越多,成绩越好」。当然我们不用这些推理模型,使用思维链提示、多数投票采样,也能达到类似的效果。
模型能力=榜单成绩?
这个问题反映出一个大模型领域评估的难题——如何正确衡量模型的效果。在展开之前,我的回答是:大多数情况下可以,但是请以实际测试为准。
跟人类的考试一样,大模型的测试也分为这些题型:
- 客观题:比如知识类的多项选择题;数学、编程题,有明确的答案或者可以验证结果。
- 主观题:没有标准答案,比如多轮对话、创意写作、安全性评估等等。需要使用模型(比如 gpt-4o)或者人类评估。
事实上大部分论文、榜单比的基本是客观题型,比如最常见的 MMLU (Massive Multitask Language Understanding)的样题如下:
Question: In 2016, about how many people in the United States were homeless?
A. 55,000
B. 550,000
C. 5,500,000
D. 55,000,000
Answer: B
对于对话模型,模型会看到除答案以外的部分,评估正确生成答案的准确率。显然这个和我们实际使用场景是有一定的偏差。除非你用大模型做作业。
另一方面,大多数榜单题目是开源并且存在已久,模型开发者不管是有意无意都很难避免数据泄露、榜单过拟合的问题。但是话说回来,如果一个模型在各个榜单上都刷很高,那么它大概率有两把刷子。同时也有部分榜单是通过人类评估、题目闭源或者随时间变化,是否意味着完全公正呢?多数情况下是的,但还是有榜单优化的方法能够涨点。
那么我们可以从哪些维度去评价模型能力呢?以 Llama311的后训练指标为例:
- 知识性、指令跟随通用指标:后者即模型「听话」程度
- 数学推理
- 代码
- 多语言
- 工具使用:模型调用外部接口
- 长文本:处理长段的文本输入输出
有哪些榜单可以参考?
Open LLM Leaderboard 是 HuggingFace 推出的公开可复现的开源大模型榜单,主要评价指标几经迭代,目前都是一些比较难的评测作为参考,比如 GPQA(博士水平的物化生),因此得分比较低是正常的。
我们如果选择 For Consumers/Mid-range
和 Only Official Providers
可以过滤出比较适合家用的官方提供的模型,当然选择社区提供的其他精调或者融合模型也可以,但是要注意是否有可用的量化版本下载。
由 LMSYS 的真人盲选榜单,由于其特殊性也是各家刷榜和 PR 的主要目标和来源。不过能筛选的维度比较少,而且位于前列的基本是闭源模型。不过值得注意的事,尽管由于其机制,刷榜变得困难但也并非不可能,可以作为挑选模型的辅助指标。
每月都会更新题目、每半年完整刷新,以防止数据泄露和主观评估设计的榜单。以代码能力,目前的排名为:
开源评估工具、中英闭源评测集榜单,问题是模型比较少、前面也都是闭源模型。
是否该选择多模态或者推理模型?
多模态模型的选择同样很多,但是不一定有很好的推理框架支持。不过乐观预计在 2025 年我们会有更多开源的多模态模型,真正用一个模型推理所有家用场景。
推理模型开源的目前可选的大概只有 QwQ-32B-preview,不过这类模型有个缺点就是会无法控制地输出长段思考(废话),很有意思但是会非常耗时。
模型大小选择
这个问题和想要解决什么任务、需要多少序列长度、能接受多少延迟等等都有关系。当然和我们有什么硬件的关系是最密切的。大致上可以有这样一个模糊的印象:
- 小规模(~<5B):典型如 Gemma2-2B、 Llama3.2-3B、Qwen2.5-Coder-3B,基本的语言理解、摘要总结等入门级别任务。
- 中等规模(~10B):典型大小 7B、14B,简单的编程任务和逻辑推理任务。
- 中上规模(~30B):典型如 Qwen-32B-Coder,已经能接近市面最好的模型的编程能力了,而且 Q4 量化之后在 16GB 左右,也算是接近消费级设备上限的甜品尺寸。
- 旗舰型(>70B):基本是各家最好的模型,不过注意有一类特殊的 MoE 模型,在比较性能的时候通常用激活参数,比如 DeepSeek-V2,激活参数 21B,但是全部参数是 236B,然而推理一般是需要全部加载到内存中的,实际上很难跑到消费级设备上。
模型选择还涉及到模型瓶颈、硬件、量化、推理引擎等等更复杂的知识,这我们会在后面的文章中详细介绍。
欢迎在评论区分享你在用的模型和使用场景 😀!
扩展阅读:译文 | 百舸争流,能者自渡:本地大语言模型(LLM)那些事
> 关注 少数派小红书,感受精彩数字生活 🍃
> 实用、好用的 正版软件,少数派为你呈现 🚀