从内存使用维度,以下几个方面都会影响内存使用峰值:
- 内存池缓存算法。不同的缓存算法,碎片控制水平存在差异。
- 内存池个数。空闲内存不能跨内存池复用,内存池个数越多,空闲内存利用率就越低。
- 算子实现。不同的实现算法/策略(例:小块数据多次计算vs大块数据几次计算),内存开销也不同。
- PyTorch API/OP适配。不同的适配方式(例:大kernel vs 小算子拼接),内存开销也不同。
- 非连续转连续。某些算子不支持非连续输入,需要插入格式转换算子,产生额外临时内存开销。
- 私有格式。某些场景,私有格式比ND格式多占用内存,存在私有格式流转的网络内存峰值会高于ND格式整网流转。