总体思路

  1. 分析内存申请和内存使用情况。
  2. 使用驱动命令获取内存总的使用情况。GPU使用nvidia-smi,NPU使用npu-smi info。
    • 如果NPU和GPU总的内存使用相同,可以认为NPU上不存在由于软硬件限制导致的额外内存占用。
    • 如果NPU和GPU总的内存使用不同,需要采集双方的内存profiling。
  3. 采集到内存profiling后,使用tensorboard查看GPU内存池和NPU内存池向驱动申请的内存总量。
    • 如果GPU内存池和NPU内存池向驱动申请的内存总量不同,查找导致内存不一致的地方。依次检查训练初始化、前向、反向以及优化器的内存使用情况。
    • 如果GPU内存池和NPU内存池向驱动申请的内存总量相同,NPU还要检查CANN的内存申请情况,Tensorboard单独有一页显示CANN内存使用。

内存建模

最常见的大模型结构为Transformer结构,该结构由Attention和FFN两个子层组成,如图1所示:

图1 结构图

计算量和参数量如图2所示:

图2 计算量和参数量

参数缩写如图3所示:

图3 参数缩写表图

模型参数量如图4所示:

图4 模型参数量表图

内存开销如图5所示:

图5 内存开销表图

片上内存上总的内存占用为: 96h^2L + 104hL + 8(v+s)h + 34bshL + 5abLs^2