这里搞 AI 的多吗,问个问题

2021-10-12 19:53:08 +08:00
 zxCoder

一篇论文的代码复现了但又没完全复现是可能啥情况啊。。。。。

一篇论文,用到了 pytroch,transformers 一些预训练模型,以及 apex 的半精度加速啥的,反正主要就这几个东西。

我甚至邮件找了作者,要到了他的 conda 环境

但是!前几天用这个环境,运行代码可以复现,今天起来发现,复现不了了?????变成了完全不同的一个结果,而且这个结果又是稳定复现的。

试过了 conda 环境重新导入,重启机器,github 重新拉代码,清空预训练模型缓存啥的,死活就是不行。

我向来是不相信玄学的,但是环境和代码我是真的一点都没动过,也不会有其他人动(除非有个黑客专门潜入我的服务器搞事情?)

4272 次点击
所在节点    Python
21 条回复
Rheinmetal
2021-10-12 19:59:13 +08:00
conda 不是严格可重复的吧 可能的影响因素太多了 需要更多信息
zxCoder
2021-10-12 20:02:33 +08:00
@Rheinmetal 服务器配置像 gpu 型号啊,显存,内存,cpu 这些都是一样的,实在想不出还能有什么影响因素了。
而且最怪的是曾经是对的。。。就比如前几天明明是结果是 90 90 90 90..... 某个时间点之后突然就 80 80 80...回不来了。。。
FRankie222
2021-10-12 20:13:30 +08:00
这类计算型的程序很可能出现这种问题,有一点点没想到的因素,就会引发蝴蝶效应,导致结果和原先的完全不同,建议再彻底过一下代码,看哪些地方可能发生了变化。
swordspoet
2021-10-12 20:21:55 +08:00
@Rheinmetal #1 conda 的环境可以复制,如果代码一样环境一样,结果应该是一样的。会不会是数据改变了?
cheng123xp
2021-10-12 20:30:23 +08:00
关于再现训练结果,Pytorch 有相关文档,可以试试
https://pytorch.org/docs/stable/notes/randomness.html
rpman
2021-10-12 20:49:40 +08:00
要 docker 还差不多
而且环境一样也阻止不了硬件对 randomness 的影响
zxCoder
2021-10-12 20:56:00 +08:00
@cheng123xp
@rpman

如果是随机性的问题,不应该每次都复现不了吗
SkyGuardian
2021-10-12 20:57:48 +08:00
先检查一下所有包的 seed 是不是都有固定值,这个一般是最主要的,也是理论上会导致结果不一样的。
玄学上可能会导致结果不一样的,bit flipping 。只要你用的 GPU 还有系统的内存有一个不支持 ECC,在运算的时候硬件被粒子打中,某一个 bit flipped 你也不知道是吧。如果是重要的 weight 被翻牌牌了,结果完全就不一样了呀。
forgetlight
2021-10-12 21:21:55 +08:00
首先确定 random seed 一致,有的会用系统时间或者读硬件作为 seed 初始化。很多 DL 的 seed 会对性能有影响。
w468750
2021-10-12 21:26:34 +08:00
先查 random seed 和各种配置,如果还能拿到标准模型,那就逐层对比检查输出结果,拿不到就固定好 seed 训练两个模型逐层对比
Wolfsin
2021-10-12 21:36:04 +08:00
虽然可能跟你的情况不一样,我之前也什么都没改,但是模型的结果就是跟以前的结果不一样,而且非常稳定怎么都变不回去。
最后翻了好几次代码,发现载入数据的顺序变了,改回去就又能复现了。
c0xt30a
2021-10-12 21:42:35 +08:00
猜测有软件包不小心升级过了
SorryChen
2021-10-12 21:46:32 +08:00
通常大部分发布的代码,都有设置 seed,比如在运行参数里 --seed xxxx 这样,如果没有也可以自己指定,你可以试试不同 seed 对性能影响是否很大,有很多模型是这样的,通常会选一个最好的在论文里面报,投机取巧。

```
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
if torch.cuda.is_available():
torch.cuda.manual_seed_all(seed)

```
ipwx
2021-10-12 21:46:48 +08:00
ummm 我的看法是,如果不能复现但结果相似,那这篇论文就是很 solid 了。
----

如果不能复现并且结果变成了一坨 shit,那这就是水文。
ipwx
2021-10-12 21:47:30 +08:00
yysy 现在有些 AI 论文是固定 random seed 才能有相似的论文,community 偏偏还觉得这就叫“reproducible”。wqnmlgb,这叫灌水!
Nimrod
2021-10-12 23:22:39 +08:00
想起来之前有个同事反应过,conda 行为具有随机性。并不知道是不是相关 hh
VZXXBACQ
2021-10-12 23:27:37 +08:00
是不是 random seed 和局部最优的问题

random seed 是有默认值的,如果是默认值和时间相关就有可能出现你说的情况了。
Liyiw
2021-10-13 01:40:54 +08:00
有可能作者也复现不了,可能就挑的是最好的结果写在了论文上面
leimao
2021-10-13 09:57:07 +08:00
这就是不用 Docker 的结果。
yuruizhe
2021-10-13 14:23:45 +08:00
重新训练,还真不一定能收敛到一个结果;重新 load 原先的 weight 再测一测?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/807396

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX