链载Ai
标题:
Character.AI 推理服务2万QPS背后的技术点
[打印本页]
作者:
链载Ai
时间:
昨天 10:59
标题:
Character.AI 推理服务2万QPS背后的技术点
LLM推理吞吐量的关键瓶颈在于KV大小,它不仅决定了 GPU 上可以容纳的最大批量大小,而且还影响注意力层的 I/O 成本。CharacterAI通过使用以下技术,在不降性能情况下,将 KV 缓存大小减少 20 倍以上。
多查询注意力MQA
在所有注意力层中都采用了多查询注意力(Shazeer,2019)。与大多数开源模型中采用的 Grouped-Query Attention 相比,这将 KV 缓存大小减少了 8 倍。暂无具体超参及实验数据。
混合注意力视野
Hybrid Attention Horizons
利用LongFormer中技术,将局部注意力(Beltagy et al., 2020)与全局注意力层交错(如上图d所示),通过滑动窗训练局部注意力,并将复杂度从 O(n
2
)降低到 O(n),这里n表示输入序列长度。实验发现在大多数注意力层上将注意力范围减少到 1024 不会对评估指标产生显着影响,包括长上下文大海捞针基准。
在生产环境中,每 6 个layer中只有 1 个使用全局注意力。
跨层KV共享
Cross Layer KV-sharing
我们将 KV 缓存绑定在相邻的注意力层之间,这进一步将 KV 缓存大小减少了 2-3 倍。对于全局注意力层,我们将多个全局层的 KV 缓存跨块绑定,因为在长上下文用例下,全局注意力层主导着 KV 缓存大小。与论文(Brandon et al., 2024)效果类似,跨层共享 KV 不会降低质量。
Stateful Caching有状态缓存
Character.AI 产品的特点是其中大多数聊天都是长对话,平均一条消息的对话历史记录为 180 条消息。随着对话时间越来越长,在每个回合不断重新填充 KV 缓存的成本将非常高。
为了解决这个问题,Character.AI开发了一种轮次间缓存系统。对于每个prefilled前缀和生成消息,将 KV 值缓存在本地内存,方便快速查询。
与 RadixAttention (Zheng et al., 2023) 类似,使用树状结构在 LRU 缓存中管理缓存的 KV 张量,类似下效果。
缓存的 KV 值由前缀标记的滚动哈希编制索引,对于每个新查询,将为上下文的每个前缀计算滚动哈希,并检索最长匹配项的缓存。这样即使对于部分匹配的消息,也可以重复使用缓存
。
在队列级别,使用会话粘性将来自同一对话框的查询路由到同一服务器。由于 KV 缓存较小,因此每个服务器可以同时缓存数千个对话。系统实现了 95% 的缓存率,进一步降低了推理成本。
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: var(--articleFontsize);letter-spacing: 0.034em;height: auto !important;" src="https://api.ibos.cn/v4/weapparticle/accesswximg?aid=87126&url=aHR0cHM6Ly9tbWJpei5xcGljLmNuL3N6X21tYml6X3BuZy9QVkRkSkR2aGZ2V0IxeUd0bkhzb28zUFZlU0lPdk5wTmN6aWJmdjNUejRwRmZkV2lhNDdMeGxIckNxZ1BCUElpY0JpY0ZRblZNeW9yUUQ3TkMxZHhLU29pYlFnLzY0MD93eF9mbXQ9cG5nJmFtcA==;from=appmsg"/>
训练及服务的量化
定制实现int8 内核,对模型权重、激活和注意力 KV 缓存进行量化。与PTQ技术不同系统以 int8 精度原生训练模型,消除了训练/服务不匹配的风险,同时也显着提高了训练效率。
欢迎光临 链载Ai (https://www.lianzai.com/)
Powered by Discuz! X3.5