使用tensorflow-gpu获得可重现的结果

uch*_*n21 9 machine-learning deep-learning tensorflow

使用Tensorflow处理项目.但是,我似乎无法重现我的结果.

我已经尝试设置图级别种子,numpy随机种子甚至操作级别种子.但是,它仍然不可重复.

在搜索Google时,大多数人都将reduce_sum函数指向罪魁祸首,因为即使在设置种子后,reduce_sum函数在gpu上也具有非确定性属性.但是,由于我正在开展纸张项目,我需要重现结果.还有其他有效的功能可以解决这个问题吗?

另一个建议是使用CPU.但是,我正在研究错误数据,这样的CPU不是一个选项.使用Tensorflow处理复杂项目的人如何解决这个问题?或者,审阅者可以加载已保存的模型检查点文件以进行结果验证?

Mar*_*oma 5

很酷,您想要使结果可重复!但是,这里有很多事情要注意:

如果可以通过执行完全相同的步骤来获得与纸张中完全相同的数字,那么我称之为可复制的纸张。这意味着,如果人们可以访问相同的环境,相同的软件,硬件和数据,则将能够获得相同的结果。相反, 如果仅遵循一篇论文的文字说明,如果一篇论文可以达到相同的结果,则该论文被称为可复制。因此,很难实现可复制性,但也可以更好地指示纸张的质量

您希望在按位相同的模型上获得训练结果。圣杯是写纸的方式是,如果人们只有纸,他们仍然可以确认结果。

另请注意,在许多重要论文中,实际上都无法复制结果:

  • 数据集通常不可用:JFT-300M
  • 大量使用计算能力:对于Google的一篇AutoML / Architecture Search论文,我问作者在其中一项实验上花费了多少GPU小时。当时,如果我想要那么多的GPU小时,那将花费我大约25万美元。

如果这是一个问题,则在很大程度上取决于上下文。作为比较,想想CERN / LHC:不可能有完全相同的实验。地球上只有极少数的机构拥有检查结果的工具。仍然不是问题。因此,请问您的顾问/已经在该期刊/会议上发表过论文的人。

实现可复制性

这太难了。我认为以下内容会有所帮助:

  • 确保您提到的质量指标没有太多数字
  • 由于训练可能取决于随机初始化,因此您可能还想给出一个间隔而不是一个数字
  • 尝试较小的变化
  • 从头开始重新实现(也许使用另一个库?)
  • 请同事阅读您的论文,然后再向您解释他们认为您做了什么。

获取位智相同的模型

在我看来,您已经做了重要的事情:

  • 设置所有的种子:numpytensorflowrandom,...
  • 确保培训测试分组一致
  • 确保以相同的顺序加载训练数据

请注意,可能有些因素无法控制:

  • Bitflips:B。Schroeder,E。Pinheiro和W.-D。Weber,“野外的Dram错误:大规模的现场研究”
  • 固有的硬件/软件可再现性问题:浮点乘法不具有关联性,GPU上的不同内核可能在不同时间完成计算。因此,每次运行都可能导致不同的结果。(如果有人可以在这里提供权威的参考,我会很高兴)