节省显存新思路,在 PyTorch 里使用 2 bit 激活压缩训练神经网络( 三 )


之后 , 我们对比了ActNN与普通fp32训练的实际内存使用情况 。 如下表所示 , ActNN可以将激活值占用的内存压缩12倍 , 将训练使用的总内存压缩4-7倍 。 这一实际内存压缩效果符合理论推导 。 为什么激活值压缩倍率是12而不是32bit/2bit=16?主要是因为ActNN不能使用inplace的ReLU , 以及需要存储少量额外的min和scale用于解压缩 。
节省显存新思路,在 PyTorch 里使用 2 bit 激活压缩训练神经网络
文章图片
最后 , 我们测试了ActNN的训练速度 。 因为ActNN在训练过程中进行了压缩 , 这些压缩在节省内存的同时也会引入额外的计算开销 。 一般来说 , 省得内存越多 , 进入的额外开销就越多 , 训练也就越慢 。 我们在NVIDIAT4(16GB内存)上对比了ActNN和已有内存节省系统的训练速度 。 如下图所示 , DTR(ICLR2020) , BLPA(NeurIPS2019)和swap分别是基于重计算 , 压缩和内存交换的三种方法 , 红叉代表Out-of-memory 。 y轴是训练吞吐量(imagespersecond) , 越高越好 。 绿色的曲线是综合ActNN在不同优化等级下的最优结果 。 可以看到 , ActNN不仅能开到最大的batchsize(即最省内存) , 同时在所有batchsize下都比baseline的训练速度更快 。
节省显存新思路,在 PyTorch 里使用 2 bit 激活压缩训练神经网络
文章图片
我们还对更多的网络进行了测试 。 在同样的内存限制下 , ActNN可以将batchsize扩大6-14倍 , 将模型尺寸或者输入图片扩大6-10倍 。 详细的实验设置和结果参见文末的论文链接 。
两行代码即可在PyTorch中使用
importactnnmodel=actnn.QModule(model)ActNN提供了一个自动模型转换封装 。 只需在训练脚本里插入两行代码 , 即可将普通的PyTorch模型转换为使用ActNN的模型 。 同时 , ActNN也提供了更高级的API支持定制化的使用场景 。
更多的例子参见github链接 。 我们提供了在图像识别、图像分割、物体检测 , 以及自监督学习等多个任务上使用actnn的完整例子和训练记录 , 欢迎试用!