Character.AI 推理服务2万QPS背后的技术点
发布日期:2024-08-09 09:05:30
浏览次数: 1827
来源:竹言见智
LLM推理吞吐量的关键瓶颈在于KV大小,它不仅决定了 GPU 上可以容纳的最大批量大小,而且还影响注意力层的 I/O 成本。CharacterAI通过使用以下技术,在不降性能情况下,将 KV 缓存大小减少 20 倍以上。在所有注意力层中都采用了多查询注意力(Shazeer,2019)。与大多数开源模型中采用的 Grouped-Query Attention 相比,这将 KV 缓存大小减少了 8 倍。暂无具体超参及实验数据。混合注意力视野Hybrid Attention Horizons利用LongFormer中技术,将局部注意力(Beltagy et al., 2020)与全局注意力层交错(如上图d所示),通过滑动窗训练局部注意力,并将复杂度从 O(n2)降低到 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% 的缓存率,进一步降低了推理成本。
训练及服务的量化
定制实现 int8 内核,对模型权重、激活和注意力 KV 缓存进行量化。与PTQ技术不同系统以 int8 精度原生训练模型,消除了训练/服务不匹配的风险,同时也显着提高了训练效率。
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业