当前位置: 首页 > article >正文

关于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()

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

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是为了保持结果的可复现性,我感觉这很扯就是,波动理应当极小极小(当然这是我目前的偏见)。


http://www.kler.cn/a/146964.html

相关文章:

  • IntelliJ IDEA中Maven项目的配置、创建与导入全攻略
  • 游戏引擎学习第78天
  • CES Asia 2025:VR/AR/XR引领科技新潮流
  • 1.两数之和--力扣
  • Qt官方下载地址
  • 用 Python 绘制可爱的招财猫
  • 解决git与huggingface项目下载速度慢或者失败的问题
  • 70-76-堆、贪心算法
  • java设计模式学习之【单例模式】
  • Spark升级中对log4j中的一些思考
  • 移动安全威胁:今天和明天的危险
  • C++类与对象(5)—流运算符重载、const、取地址
  • 《微信小程序从入门到精通》---笔记1
  • 【Github】git安装
  • 【Python】使用execute(sql)执行insert之后没有插入数据
  • 贪吃蛇小游戏基本简单布局
  • Clion+Ubuntu(WSL)+MySQL8.0开发环境搭建
  • 30天精通Nodejs--第十二天:ioredis
  • 华为OD机试 - 分月饼(Java JS Python C)
  • Vue常见的实现tab切换的两种方法
  • python大写中文转阿拉伯数字
  • C 中的指针 - 函数
  • Java游戏 王者荣耀
  • 【玩转client-go】使用client-go从POD拷贝文件出来
  • Android 13.0 开机过滤部分通知声音(莫名其妙的通知声音)
  • 蓝桥杯官网算法赛(蓝桥小课堂)