cudnn.benchmark
参数详解
核心作用
-
自动优化卷积算法
当设置为True
时,PyTorch 会:- 测试所有可用的 CuDNN 卷积算法
- 为当前输入尺寸选择最快的算法
- 缓存最优算法以供后续使用
-
输入尺寸固定时效果显著
对固定输入尺寸(如固定 batch size 和图像尺寸)的训练任务能明显加速
适用场景
✅ 推荐开启的情况:
- 输入尺寸固定的任务(如标准分类、分割任务)
- 需要最大化训练速度(大型模型/大数据集)
❌ 不建议开启的情况:
- 输入尺寸频繁变化(如可变尺寸训练)
- 显存资源紧张
- 需要严格确定性结果
参数配置对比
配置组合 | 速度 | 显存占用 | 适用场景 |
---|---|---|---|
benchmark=True | 快 | 高 | 固定输入尺寸 |
benchmark=False | 慢 | 低 | 输入尺寸变化/显存不足 |
deterministic=True | 最慢 | 低 | 需要严格可复现性 |
代码示例
# 推荐在训练脚本开头设置
torch.backends.cudnn.benchmark = True # 开启优化(输入尺寸固定时)
torch.backends.cudnn.benchmark = False # 关闭优化(输入尺寸变化时)
当前配置分析
“benchmark”: False, # 默认关闭
“deterministic”: True # 强制确定性
由于设定了 deterministic=True,benchmark 会自动失效
这种配置优先保证结果可复现性,牺牲了部分速度优化
最佳实践建议
固定输入尺寸 + 不要求严格确定性 → 开启 benchmark
可变输入尺寸 or 需要可复现性 → 关闭 benchmark
显存不足时 → 关闭 benchmark