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()
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
是为了保持结果的可复现性,我感觉这很扯就是,波动理应当极小极小(当然这是我目前的偏见)。
原文地址:https://blog.csdn.net/RobinWitch/article/details/134648119
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_20184.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!