苹果如何把30亿参数的模型装进了你的iPhone

howappleletllminiphone

大语言模型(LLM)是一种神经网络。你可以用它来理解和生成语言。模型的行为取决于你在训练时教给它的数值。这些数值被称为参数。

苹果把一个 30 亿参数的模型装进了你的 iPhone。这意味着该模型需要大约 30 亿个数值才能正常工作。这些数值决定了模型如何理解输入、如何生成输出。

苹果是如何在 iPhone 上运行这样的模型,同时又不对设备造成负面影响的?

在本文中,我们将尝试回答这个问题。以下是内容概览:

  • 在手机上运行 LLM 面临的问题

  • 苹果如何让权重存储更廉价

  • 苹果如何让重复计算更快

  • 适配器如何帮助各功能共享基础模型

  • 苹果如何优化运行模型的硬件

  • 系统如何决定何时使用云端

image

在手机上运行 LLM 面临的问题

运行 LLM 也被称为推理(inference)。在这个阶段,LLM 利用其参数来处理请求。

在处理一段文本之前,LLM 必须先将其切分成一个个 token。你可以把 token 理解为一个词、词的一部分,甚至标点符号。模型接收这些 token,并生成更多 token 作为回复的一部分。在模型内部,这些 token 会经过一系列处理层。

image

第一个问题关乎参数的存储。

以 16 位精度计算,我们之前提到的 30 亿参数会占用将近 6GB 的空间。但这还不是全部。你还需要空间来存放输入提示词、计算过程以及模型所需的临时结果。最后,你还得让操作系统和其他应用共用同一块内存。由此可见,存储是一个重大决策。

第二个问题关乎如何快速地把权重从内存移动到处理器。在文本生成过程中,处理器需要反复从内存中获取数值数据。即使你的处理器性能强大,它也可能把大量时间浪费在等待数据从内存中取回上。

苹果工程团队还必须在内存容量和内存带宽的限制下,努力让 LLM 在 iPhone 上运行。除此之外,手机还必须兼顾电池消耗、过热问题,以及其他应用对相同资源的争夺。你肯定不希望 LLM 让设备的其他部分变得无响应。

苹果如何让权重存储更廉价

减小模型体积最直接的方法,就是用更少的比特来存储每个权重。这项技术被称为量化(quantization)。

你可以把量化理解为用更少的取值可能性来表示数值。当然,在这个过程中你会损失一些数值精度。但模型仍然可以以相当不错的水平完成其任务。主要权衡在于选择一种表示方式,使其在节省内存和保证质量之间达到最佳平衡点(见下图)

image


苹果工程团队使用了一种名为调色板化(palettization)的技术。在这种技术中,你将相似的权重值分组。一个小型查找表存储代表性的数值,而每个权重只存储指向该查找表的简短引用。例如,可以用一个 2 比特的引用从查找表中的四个条目里选择一个。

在较早的模型版本中,苹果工程团队混合使用了 2 比特和 4 比特的表示方式,平均每个权重 3.7 比特。这意味着 30 亿个权重可以存储在约 1.39GB 中。这是一个相当不错的优化。

image

他们混合使用不同精度,是因为模型的不同部分对数值误差的容忍度差异很大。敏感的组件需要分配更多比特,以免质量下降;而其他组件则可以压缩得更狠。

苹果后来发布的模型让压缩更加激进。主解码器权重使用每权重 2 比特,嵌入表使用每权重 4 比特。为了让这种压缩奏效,苹果使用了量化感知训练(quantization-aware training)。在这种方法中,你模拟量化将施加的限制,然后在这些限制存在的情况下调整模型的权重,让它学会在约束下工作。

苹果如何让重复计算更快

权重存储只是整个内存问题的一部分。成功压缩模型之后,模型在处理请求时仍然需要内存。假设一个模型已经读完了一段文字,并生成了回复的开头部分。当模型尝试预测下一个 token 时,它需要使用来自之前 token 的信息。然而,如果你不得不重新计算每一个中间结果,那将是对计算资源的巨大浪费。

KV 缓存(键值缓存)用于存储这些中间结果。你可以把这个缓存理解为一种复用已完成计算的方式。然而,KV 缓存也有代价——如你所见,缓存会占用内存。请求中的文本越多,你需要在缓存中存储的信息就越多。即使一个模型的权重能舒适地装入内存,在处理一篇长文档时,它仍可能面临内存问题。

这意味着你有两个优化目标。第一,压缩权重以减小模型占用的空间。第二,尽量减小 KV 缓存的体积。

苹果通过一种称为跨层 KV 共享(cross-layer KV sharing)的技术来进行缓存优化。在这项技术中,你需要把模型分成两个模块,深度比为 5:3。第二个模块中的层会复用第一个模块最后一层产生的 key 和 value。通过这种方法,苹果将 KV 缓存的内存占用降低了 37.5%。

适配器如何帮助各功能共享基础模型

你可以用压缩来减小单个模型的大小和成本。但很多时候,你可能需要许多个功能略有差异的模型副本。一个简单的做法是:为摘要创建一个模型,为改写创建一个模型,再为信息提取创建一个模型……但这些模型会有大量重叠的语言能力。你基本上是在重复复制这些共同的能力。

适配器(adapter)可以帮你消除这种重复。你可以把适配器理解为一个小型的参数集合,它能改变基础模型在特定任务上的工作方式。例如,假设你有一个功能负责撰写简洁的通知摘要,另一个功能负责把较长的段落改写成不同的风格。这两个功能可以共享同一个基础 LLM,无需重复。

这项技术被称为 LoRA(低秩适配,Low-Rank Adaptation)。在训练适配器时,你固定基础模型的权重,只修改适配器的权重。这就是为什么让模型专门化变得更便宜,而不必分发一个独立的新模型。

image

苹果将适配器应用于多种组件,如注意力矩阵、注意力输出投影和前馈网络。其 rank-16 适配器使用 16 位数值,占用大约几十 MB 的空间。它们可以根据需要加载、缓存或交换这些适配器。

苹果如何优化运行模型的硬件

即使模型很小,你仍然需要高效的硬件实现,才能让模型发挥最佳性能。iPhone 配备了多种处理器来应对这一挑战。有负责所有通用工作的 CPU;有可以并行处理大量数值运算的 GPU;还有能高效运行机器学习工作负载的苹果神经网络引擎(ANE)。然而,仅仅使用加速器并不意味着模型就能高效运行。你仍然需要选择合适的数据布局,把大型数组拆分成可管理的分块,同时还要尽量减少内存拷贝。这些技术对速度和内存使用都有影响。

系统如何决定何时使用云端

即使做出了所有这些优化,模型仍然有它的极限。以苹果为例,其端侧模型完全能够胜任摘要、信息提取和分类等任务。不过,Apple Intelligence 会先检查一个请求是否能在设备上处理。对于更复杂的工作,它可以把请求发送到私有云计算(Private Cloud Compute,PCC)。PCC 提供了一个受保护的环境,只有经过授权的软件才能在其中处理数据。它还限制任何外部方查看数据。

苹果使用加密网络连接来保护信息在传输到云端途中的安全。你的设备会针对经验证的 PCC 节点加密请求。任何处于这个边界之外的基础设施都没有解密密钥,无法读取请求内容。只有当数据进入授权边界时才能被读取。其目标是确保即使是苹果的员工和管理系统也无法访问请求内部的内容。

当请求最终到达云端后,一个独立的服务器模型会接管处理。苹果使用混合专家(mixture-of-experts)计算和并行处理流水线。这让大模型能够选择最佳的计算组件来分配工作。image

结语

     苹果一直在对其模型进行大量更新。2026 年,他们推出了 AFM 3 Core——新一代 30 亿参数模型;此外还有 AFM 3 Core Advanced——一个稀疏模型,总参数量为 200 亿,但每次只根据 Apple Silicon 系统的能力激活其中的 10 亿到 40 亿参数。在 Core Advanced 中,完整模型存储在闪存中,只有专家权重会被加载到内存(RAM)中。它会根据提示词来选择权重,而不必为每个 token 都从闪存中切换专家。苹果还扩展了云端架构,现在你可以在 Google Cloud 的 NVIDIA GPU 上运行 PCC 工作负载。

     苹果遵循的核心设计原则是:模型的能力应当基于运行时可用资源来设计。我们所看到的所有技术共同协作,为用户带来最佳体验。

posted on 2026-10-28 09:31  PetterLiu  阅读(35)  评论(0)    收藏  举报