关于torch.backends.deterministic和torch.backends.cudnn.benchmark

TLDR:这是个关于torch.backends.cudnn设置的问题,不同组合的torch.backends.deterministic和torch.backends.cudnn.benchmark会产生不一样的结果,其中最快的组合(deterministic = False ,benchmark = True)比最慢的组合(deterministic = True ,benchmark = False)大约快了30倍。

现在先记录下方便以后有想法有能力了再总结回顾。

在跑BEAT的时候,有一处代码很好玩,other_tools.set_random_seed()

我加了点注释的代码如下:

python 复制代码
def set_random_seed(args):
    os.environ['PYTHONHASHSEED'] = str(args.random_seed)
    random.seed(args.random_seed)
    np.random.seed(args.random_seed)
    torch.manual_seed(args.random_seed)
    torch.cuda.manual_seed_all(args.random_seed)
    torch.cuda.manual_seed(args.random_seed)
    ## pay attention ,the below is training speed difference ,in camn:
    ## if set deterministic = True  ,benchmark = True ,it will cost almost 50-60 seconds for 10its
    ## if set deterministic = False ,benchmark = True ,it will cost almost 1-2 seconds for 10its
    ## if set deterministic = True  ,benchmark = False,it will cost 58 seconds for 10its
    ## if set deterministic = False  ,benchmark = False,it will cost almost 4-5 seconds for 10its
    torch.backends.cudnn.deterministic = args.deterministic #default: False
    torch.backends.cudnn.benchmark = args.benchmark         #default: False
    torch.backends.cudnn.enabled = args.cudnn_enabled       #default: True

只不过很有点意外的是当deterministic = True ,benchmark = True的时候居然这么慢,我起初以为设置好了benchmark=True后torch框架会自动选个最快的卷积算法,后续deterministic = True让这个卷积算法每次返回都是这个固定最快的。

上面是我以为的,下面根据结果(在注释的代码中)来分析

deterministic = True ,benchmark = True的情况,的确还是会选下卷积算法,比如把benchmark在比如设置为False的时候每次运行时间都是固定的,设置为True的时候还是会有点时间上的小波动,可见的确是选了下卷积的算法造成了结果的差异。当然具体怎么选的我暂且就不知道了,当然,选取最快的情况deterministic = False ,benchmark = True会有什么意向不到的结果我暂且也不清楚,网上很多说选取deterministic = True ,benchmark = False是为了保持结果的可复现性,我感觉这很扯就是,波动理应当极小极小(当然这是我目前的偏见)。

相关推荐
心易行者12 分钟前
从零搭建完整Web应用:7步走完全流程,配合web应用托管零门槛上线
人工智能·python·ai编程
小柯南敲键盘31 分钟前
跨境电商图片翻译工具,批量处理视频字幕与抠图
人工智能·python·音视频
2601_9669496539 分钟前
五档盘口数据对量化交易有什么价值?从信号判断到策略风险的完整分析
开发语言·人工智能·python·数据分析·量化·股票数据·quantdash
cxhello1 小时前
消费者活着、心跳正常、日志干净,但它七天没拉过一条消息
python·kafka
砚底藏山河1 小时前
【量化纯GET实战 #11】移动均线 MA:5 日 20 日 60 日怎么算怎么用
java·python·金融·maven
小吴学不废Java1 小时前
Python 基础语法
开发语言·python
weixin_433417671 小时前
阿里视频大模型wan2.7‑t2v,可以生成视频
人工智能·python·音视频
sukioe1 小时前
一张图、两把锁:AI 物流履约平台的确定性边界设计
人工智能·python·ai·langchain
2601_962203511 小时前
【SpringBoot3】面向切面 AspectJ AOP 使用详解
开发语言·前端·python
程序员大雄学编程1 小时前
微积分43. 无穷积分入门:从概念到Python实战可视化
开发语言·python·学习·微积分