pytorch训练加速技巧

搭建的模型训练时间过长,除了方法上的改进,在pytorch基本操作上的改进有以下实践与总结。

  1. 参考https://blog.csdn.net/Xw_Classmate/article/details/113362129中的方法。
  2. 除了上述方法,以下为个人实践中总结的技巧:
  • 空间换时间:能预处理的数据,尽量预处理之后保存,训练过程中直接使用预处理的数据。
  • 矩阵放在gpu上:对于矩阵运算,尽可能放到gpu上,无论该矩阵是否需要梯度更新。同时能用矩阵表示变换尽可能用矩阵变换表示;
  • 避免使用append操作:对于列表list,使用list.append(**)也是较为耗时的,若已知列表长度,尽可能用numpy数组替换列表。
  • 减少使用concat操作:解释同上。
  • 使用numpy数组存储:数据较大时,使用numpy数组或者张量形式存储,这样无论是对其继续操作还是作为函数返回值都比使用列表或其他形式要快。
  • 减少for循环:对于numpy数组或tensor类型,使用torch.where() 或numpy.where()来查找数组或张量中满足条件的值,要比自己写for循环查找快很多。尤其是该张量的reqiures_grad=True时,使用for循环对该张量操作会使得梯度反向传播时非常非常慢。
  • 避免数据在cpu与gpu上来回切换:进行同一操作的数据应放在相同的device上(否则会报错),数组、张量尽可能放在gpu上。
  • 循环操作:若实在无法避免for循环甚至多重循环,分两种情况处理:(1)若该张量的reqiures_grad=True,则将其放在gpu上计算for循环(若放在cpu上会使得梯度反向传播异常慢);(2)若该张量不需要计算梯度reqiures_grad=False,则放在cpu上处理循环操作。
  • 不涉及梯度图的数据使用tensor.detach()。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值