大模型激活值所占用的内存与序列长度、模型维度的解析
大模型激活值所占用的内存与序列长度、模型维度的解析
下图展示了激活值的内存占用情况(假设序列长度s与模型维度h大致相等)。注意右下角的大块区域:注意力机制(即即时执行/传统实现方式)正是内存消耗的主要来源!
“您为何将序列长度 s 与模型维度 h 进行比较?二者存在怎样的关联?”
这是个很好的问题!实际情况是,激活值所占用的内存(相较于基础模型占用的内存),在很大程度上取决于序列长度与模型维度的比值(同时也与注意力头数量相关)。不妨参考下面的表达式:
您是否好奇公式本身?可查看本节末尾的 “激活值计算公式” 旁注。
若序列更短(例如,长度仅为模型维度的四分之一),则激活值所需占用的空间会显著减少,如下图所示。
我们通过一个数值示例来把它讲得更清楚:
一个 8 位模型(参数精度 p_model=8)占用 18 个内存单位(模型内存 memory_model=18)。
该模型包含 16 个注意力头(注意力头数量 n_heads=16)。
序列长度(s=500)约为模型维