torch.backends.cudnn

CPU适合串行计算,擅长逻辑控制;
GPU擅长高强度并行计算,适用于AI算法的训练学习;
CUDA是NVIDIA专门负责管理分配运算单元的框架;
cuDNN是用于深度神经网络的GPU加速库。

cuDNN使用非确定性算法,可以通过torch.backends.cudnn.enabled = False对其进行禁用;如果设置torch.backends.cudnn.enabled = True,则表明可以使用cuDNN。
如果在可以使用cuDNN的基础上,再设置torch.backends.cudnn.benchmark = True,那么cuDNN使用的非确定性算法就会自动寻找最适合当前配置的高效算法,来达到优化运行效率的目的。

如果网络的输入数据在维度或类型上变化不大,那么设置torch.backends.cudnn.benchmark = True可以增加运行效率;
如果网络的输入数据在每次iteration时都会在维度或类型上发生变化的话,会导致cuDNN每次都去寻找一遍最优配置,这样反而会降低运行效率。

因此,有时我们会看见在代码开头会出现这样两行代码:

torch.backends.cudnn.enabled = True  # 使用cuDNN
torch.backends.cudnn.benchmark = True  # cuDNN自动寻找最适合当前配置的高效算法

在使用GPU的时候,PyTorch会默认使用cuDNN加速,但是在使用cuDNN的时候,torch.backends.cudnn.benchmark的默认值为False。如果将标志位置为True,我们就可以在PyTorch中对模型内的卷积层进行预先的优化,也就是在每一个卷积层中测试cuDNN提供的所有卷积实现算法,然后选择最快的那个。这样在模型启动的时候,只要额外多花一点点预处理时间,就可以较大幅度地减少训练时间。

如果在PyTorch程序中设置了torch.backends.cudnn.deterministic = True,并且torch.backends.cudnn.benchmark = False的话,那么模型就会选那个默认的卷积算法。
如果将torch.backends.cudnn.deterministic的标志位置为True的话,每次返回的卷积算法将是确定的,即默认算法。如果配合上设置Torch的随机种子为固定值的话,应该可以保证每次运行网络的时候相同输入的输出是固定的。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 当使用torch.backends.cudnn时,有时会出现报错的情况。为了解决这个问题,你可以尝试以下几个解决方案。首先,你可以在你的train.py或者main.py开头加上一段代码来固定所有的随机种子,包括numpy、python和pytorch(cpu、gpu)。这样可以使用deterministic=True的代码来确保你得到相同的测试精度或误差,但会导致训练速度变慢。具体的代码如下所示:\[2\] ```python def seed_torch(seed: int = 42) -> None: random.seed(seed) os.environ\['PYTHONHASHSEED'\] = str(seed) # 为了禁止hash随机化,使得实验可复现 os.environ\["CUDA_LAUNCH_BLOCKING"\] = "1" os.environ\["CUBLAS_WORKSPACE_CONFIG"\] = ":16:8" np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed(seed) torch.cuda.manual_seed_all(seed) torch.backends.cudnn.benchmark = False torch.backends.cudnn.deterministic = True print(f"Random seed set as {seed}") seed_torch() ``` 另外,你也可以使用torch.use_deterministic_algorithms函数来检测是否使用了随机算法,并解决报错问题。具体的操作可以参考pytorch官方文档中关于pytorch non-deterministic操作的说明。\[3\] 希望以上解决方案能够帮助你解决torch.backends.cudnn报错的问题。如果问题仍然存在,请尝试其他方法或查阅更多相关资料。 #### 引用[.reference_title] - *1* *2* *3* [Pytorch 深度学习结果无法复现的解决办法](https://blog.csdn.net/weixin_45203752/article/details/126596853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值