网络模块尺寸多样导致的内存碎片

在给网络换了编码器之后,出现了显存不足的报错,于是出现了两个问题,一个是为什么服务器上有5G的显存不可用,由于除了数据集之外,配置和模型相同的另一个设备上还有接近一半的占用,而这里显然高出了几G,所以先不解决这个问题,而是改模型的尺寸,如何调整使其符合当前的显存,由于编码之后使用3*3的卷积进行了通道的调整,想着改成1*1的显存会下降,因为从参数量计算上看后者的结果更小,但事实上相反,由于后者对应模块的尺寸在输入输出上很多不一致,导致碎片很多,显存占用反而更高,而输入输出通道相对单一,且操作重复的3*3的卷积,如果用参数量是in_channel* out_channel* kernel_size * kernel_size计算,结果是参数量更高,但是实际的显存占用却更低,查询推测原因是通道尺寸的不一致导致内存块释放后的复用率较低,所以碎片较多,需要分配更多的显存,不过本身似乎没有太大的区别,只是在显存存在瓶颈且有部分无法释放的时候,问题比较明显,如果换成本身可复用率较高的模块,似乎能解决这个问题,就是不知道补充上了这点显存的不足,结构本身的这种空洞是否能够支撑起性能的要求;

你可能感兴趣的:(深度学习)