1、 写成函数的形式,通过调用函数,返回想要的结果,中间变量在返回后会清空
函数返回值越少越好,_ 虽然不会显示变量,但会占内存
2、清除中间变量函数
if hasattr(torch.cuda, 'empty_cache'): torch.cuda.empty_cache()
3、设置变量初始值,循环结束后,变量恢复初始状态
4、验证集和测试集训练不使用梯度
with torch.no_grad():
对于不需要bp的forward, 在参数更新时会节省很多内存
5、使用float16精度混合计算 torch.astype('float16')
6、尽可能使用inplace操作,
inplace=True指的是进行原地操作,选择进行原地覆盖运算。 比如 x+=1则是对原值x进行操作,然后将得到的结果又直接覆盖该值。
7、将变量拆分成机器可以运行的大小,分别进行参数更新(等同于一个大数据的更新)
8、注意显卡是否都占满,没有占满的话使用并行运算
标签:减小,float16,cache,变量,torch,inplace,内存,运行 From: https://www.cnblogs.com/fly-learn/p/16758559.html