- 分析内存申请和内存使用情况。
- 使用驱动命令获取内存总的使用情况。GPU使用nvidia-smi,NPU使用npu-smi info。
- 如果NPU和GPU总的内存使用相同,可以认为NPU上不存在由于软硬件限制导致的额外内存占用。
- 如果NPU和GPU总的内存使用不同,需要采集双方的内存profiling。
- 采集到内存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 。