
# EMS以存代算
#### 以存代算产生的背景
在AI推理过程中，Transformer模型接收用户的问题输入，并通过迭代方式生成相应的回答。每个Transformer层由自注意力模块和前馈网络模块组成。
在自注意力模块中，上下文词元（token）与模型参数结合，生成中间数据K（键）和V（值），并进行注意力计算。为避免在迭代生成过程中重复计算KV，生成的KV中间数据被存储在AI服务器的显存中，形成KV缓存。每个词元的KV缓存大小取决于模型的维度、层数以及数据精度，计算公式为：单个词元的KV缓存大小 = 模型维度 \* 模型层数 \* 数据精度 \* 2。例如：GPT3模型的数据维度和层数分别为12288和96，在双字节精度下，单个词元的KV缓存大小为12288 \* 96 \* 2 \* 2字节 = 4.5MB。
在推理过程中，每个推理请求所需的KV缓存大小与上下文长度成线性关系。例如：在GPT3模型的推理中，长度为2048的上下文将占用约4.5MB \* 2048 = 10GB的AI服务器显存空间。
然而，AI服务器通常只能提供几十GB的显存容量，其中一部分还要用于存储模型参数，仅剩余部分空间用于KVCache缓存。例如：使用8张64GB的AI服务器部署GPT3模型，系统显存总容量为512GB（8 \* 64GB），其中350GB用于模型参数，剩余162GB仅能支持16个（162GB / 10GB）2048上下文长度的推理请求缓存KV值。
因此，AI服务器能够同时处理的请求数量受限于显存容量。
综上所述，Transformer模型推理中存在严重的AI显存内存墙问题。为解决这一问题，EMS通过以存代算技术加速AI推理。
#### 以存代算原理
在Transformer模型的推理过程中，由于AI服务器的显存容量限制，现有的推理系统无法在AI服务器的显存中持续保存多轮对话的KVCache缓存。为了应对这一问题，系统通常会丢弃已处理对话的KV缓存，以腾出显存空间来服务新的请求。然而，当这些被丢弃的KV缓存对应的对话再次出现时，系统必须重新计算这些KV缓存，如[图1] 中的（a）所示。这种重复计算不仅浪费了计算资源，还增加了推理成本。
为了减少成本并提升推理性能，EMS服务引入了以存代算技术CachedAttention，如[图1] 中的（b）所示。该技术利用EMS中的大容量分布式内存池来存储和复用多轮对话中产生的KVCache缓存，而不是直接丢弃它们。具体操作是，将一个会话对应的历史KV缓存保存到EMS中，当该对话重新激活时，再从EMS中加载并复用这些KV缓存，从而避免了重复计算。
图1多轮对话中使用 EMS
![](https://support.huaweicloud.com/productdesc-ems/zh-cn_image_0000002583385339.png)
通过以存代算技术，EMS有效地避免了多轮对话中的重复计算，显著降低了首字时延，提高了推理预填充阶段（Prefill阶段）的吞吐量，并降低了端到端的推理成本。
#### 缓存系统性能优化
EMS还采用了以下技术来优化缓存系统性能，如[图2]所示：
图2EMS以存代算技术   
![](https://support.huaweicloud.com/productdesc-ems/zh-cn_image_0000002583305301.png)
- 采用异步保存和读取策略，以减少加载和保存KV缓存的时间。
- 利用多级缓存和分布式缓存架构，通过更大容量的存储介质提供充足的缓存空间。
- 通过自动感知调度器中的任务队列信息，实现多层次存储介质间的缓存调度，以提高访问效率。
 
