type
status
date
slug
summary
tags
category
icon
password
Character.AI:引领大型语言模型效率、经济性和可扩展性的创新路径
#AI技术 #自然语言处理 #机器学习 #深度学习 #计算效率优化 #成本控制
在 Character.AI,我们正致力于通用人工智能(AGI)。在这个未来的状态下,大型语言模型(LLMs)将增强日常生活,提供商业生产力和娱乐,并帮助人们解决从教育到辅导、支持、头脑风暴、创意写作等各种问题。
要在全球范围内实现这一目标,至关重要的是实现高效的“推理”——即 LLMs 生成回复的过程。作为一家全栈 AI 公司,Character.AI 从头开始设计其模型架构、推理栈和产品,从而能够优化推理,使其更加高效、经济和可扩展,以满足快速增长的全球受众的需求。
今天,我们每秒处理超过20,000次推理查询。为了更好地理解这一点,这大约是谷歌搜索每秒处理的查询量的20%,根据第三方估计,谷歌搜索每秒处理约105,000次查询(Statista, 2024)。
我们能够在这种规模上可持续地提供 LLMs 服务,因为我们在服务栈中开发了一系列关键创新。在这篇博客文章中,我们分享了过去两年中开发并最近应用的一些技术和优化。
内存高效的架构设计
LLM 推理吞吐量的关键瓶颈是注意力键和值(KV)缓存的大小。它不仅决定了 GPU 上可以容纳的最大批量大小,还主导了注意力层的 I/O 成本。我们使用以下技术将 KV 缓存大小减少了20倍以上,而不会降低质量。通过这些技术,GPU 内存不再是服务大批量大小的瓶颈。
1. 多查询注意力。我们在所有注意力层中采用多查询注意力(Shazeer, 2019)。与大多数开源模型中采用的分组查询注意力相比,这将 KV 缓存大小减少了8倍。
2. 混合注意力范围。我们将局部注意力(Beltagy et al., 2020)与全局注意力层交替使用。局部注意力通过滑动窗口进行训练,将复杂度从 O(length^2) 降低到 O(length)。我们发现,在大多数注意力层上将注意力范围减少到1024对评估指标没有显著影响,包括长上下文needle-in-haystack基准。在我们的生产模型中,每6层中只有1层使用全局注意力。
3. 跨层 KV 共享。我们将相邻注意力层的 KV 缓存进行绑定,这进一步将 KV 缓存大小减少了2-3倍。在全局注意力层中,我们将多个全局层的 KV 缓存跨块绑定,因为在长上下文使用情况下,全局注意力层主导了 KV 缓存大小。类似于最近的一篇出版物(Brandon et al., 2024),我们发现跨层共享 KV 不会降低质量。
![notion image](https://research.character.ai/content/images/2024/06/figure1-2-1.png?t=bb87bef0-4c9f-49db-9d70-aa4c3aac9a51)
图1。左图:标准的 transformer 设计,每个注意力层都是全局注意力。右图:我们的生产模型中的注意力设计。蓝色框表示全局注意力,绿色框表示局部注意力,曲线表示 KV 共享。对于全局注意力层,我们在多个非相邻层之间共享 KV。此图仅显示了全模型中的一部分层。
有状态缓存
我们的一项关键创新是一个高效的系统,用于在聊天回合之间缓存注意力 KV。在 Character.AI 上,大多数聊天是长对话;平均每条消息有180条对话历史。随着对话变长,在每次回合中持续填充 KV 缓存将是极其昂贵的。
为了解决这个问题,我们开发了一个回合间缓存系统。对于每个预填充的前缀和生成的消息,我们将 KV 值缓存到主内存中,并在未来的查询中检索它们。类似于 RadixAttention(Zheng et al., 2023),我们将缓存的 KV 张量组织在一个带有树结构的 LRU 缓存中。缓存的 KV 值通过前缀标记的滚动哈希进行索引。对于每个新查询,计算上下文每个前缀的滚动哈希,并为最长匹配检索缓存。这使得即使是部分匹配的消息也能重用缓存。
在集群级别,我们使用粘性会话将来自同一对话的查询路由到同一服务器。由于我们的 KV 缓存大小很小,每台服务器可以同时缓存数千个对话。我们的系统实现了95%的缓存命中率,进一步降低了推理成本。
![notion image](https://research.character.ai/content/images/2024/06/figure2-1-1.png?t=5931e3fc-2964-4b34-983c-f76028158f61)
图2。蓝色框表示主内存中的缓存张量。绿色和黄色框表示 CUDA 内存中的 KV 缓存。当一个新查询到达时,它会检索最长匹配前缀的 KV 缓存。我们的滚动哈希系统允许检索部分匹配的消息的缓存。
训练和服务的量化
我们在模型权重、激活和注意力 KV 缓存上使用 int8 量化。为了支持这一点,我们为矩阵乘法和注意力实现了定制的 int8 内核。与常见的“训练后量化”技术不同,我们原生地在 int8 精度下训练模型,消除了训练/服务不匹配的风险,同时显著提高了训练效率。量化训练本身是一个复杂的话题,我们将在未来的文章中详细讨论。
共建未来
高效的推理对于扩展 AI 系统并将它们无缝集成到我们的日常生活中至关重要。综上所述,以上讨论的创新实现了前所未有的效率,并将推理成本降低到一个使大规模提供 LLMs 服务变得更容易的水平。与2022年底开始时相比,我们将服务成本降低了33倍。如果今天我们使用领先的商业 API 来提供我们的流量,其成本至少是我们系统的13.5倍。
然而,这只是开始。在 Character.AI,我们很高兴能够继续建设一个 LLMs 驱动创新并提升每个人体验的未来。加入我们(Join us)在这段激动人心的旅程中,共同推动 AI 可能性的极限。我们正在共同创造一个高效且可扩展的 AI 系统在每一次互动中发挥核心作用的未来。
- 作者:Doiiars
- 链接:https://notion.doiiars.com/article/character-ai-innovative-path-efficiency-economic-scalability-large-language-models
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章