torch.backends.cudnn.benchmark 和 torch.backends.cudnn.deterministic

torch.backends.cudnn.benchmark

torch.backends.cudnn.benchmark=True

将会在程序在开始时花费一点额外时间

因为网络固定,可以为整个网络的每个卷积层搜索最适合它的卷积实现算法,实现加速。
(实现卷积层的算法还有基于 GEMM的,基于 FFT 的,基于 Winograd 算法的等等,而且每个算法还有自己的一些变体。在一个开源的 C++ 库 triNNity 中,就实现了接近 80 种的卷积前向传播算法!)

适用场景是网络结构固定(不是动态变化的),网络的输入形状(包括 batch size,图片大小,输入的通道)是不变的,反之,如果卷积层的设置一直变化,将会导致程序不停地做优化,反而会耗费更多的时间。

可以设置在定义device时

if args.use_gpu and torch.cuda.is_available():
    device = torch.device('cuda')
    torch.backends.cudnn.benchmark = True
else:
    device = torch.device('cpu')

参考:https://zhuanlan.zhihu.com/p/73711222

总结:预优化减少时间

torch.backends.cudnn.deterministic

torch.backends.cudnn.deterministic = True,每次返回的卷积算法将是确定的,即默认算法。

配合上设置 Torch 的随机种子为固定值的话,应该可以保证每次运行网络的时候相同输入的输出是固定的

#确保输入固定时,输出不变
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False

参考:https://zhuanlan.zhihu.com/p/141063432?from_voters_page=true


附:设置随机种子

ms_seed = 42069
 
np.random.seed(my_seed)
torch.manual_seed(my_seed)
torch.cuda.manual_seed_all(my_seed)
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值