深度学习模型训练技巧

1.不同版本torch结果不一样的原因是各个版本的随机种子不一样

2.做过并行计算或者操作系统的同学可能知道,GPU的计算方式一般是异步的。异步运算不像同步运算那样是按照顺序一步一步来,异步是同时进行的,异步计算中,两种不一样的操作可能会发生同时触发的情况,这是处理两者间的前后关系、依赖关系或者冲突关系就比较重要了。
有一个众所周知的小技巧,在执行训练程序的时候将环境变量CUDA_LAUNCH_BLOCKING=1设为1(强制同步)可以准确定位观察到我们显存操作的错误代码行数。
“CUDA_LAUNCH_BLOCKING=1” 是一个用于控制 CUDA 并行计算的环境变量设置。
在 CUDA 中,GPU 的计算任务通常是异步执行的,即主线程会在将计算任务提交给 GPU 后立即继续执行后续的代码,而不会等待 GPU 完成计算。这种异步执行方式可以提高程序的性能,但有时也会导致调试和错误排查变得困难。
通过将环境变量 “CUDA_LAUNCH_BLOCKING” 设置为 “1”,可以将 GPU 计算任务改为同步执行,也就是在主线程中等待 GPU 完成计算后再继续执行后续的代码。这样可以方便地进行调试和错误排查,因为代码的执行顺序更加可控,但也可能带来一定的性能损失。
在调试或排查问题时,将 “CUDA_LAUNCH_BLOCKING” 设置为 “1” 可以帮助开发人员捕获和跟踪 GPU 计算任务的执行过程,以便更好地理解程序的行为和调试潜在问题。然而,对于正常的生产环境和性能优化目的,一般不建议将其设置为 “1”,而是保持默认的异步执行方式。

3. 在 DataLoader 中使用多个 worker 和页锁定内存
当使用 torch.utils.data.DataLoader 时,设置 num_workers > 0,而不是默认值 0,同时设置 pin_memory=True,而不是默认值 False。

参考文档:https://pytorch.org/docs/stable/data.html

来自 NVIDIA 的高级 CUDA 深度学习算法软

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ming_Chs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值