V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zxCoder
V2EX  ›  Python

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

  •  
  •   zxCoder · 11 天前 · 3022 次点击

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

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

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

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

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

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

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

    如果是随机性的问题,不应该每次都复现不了吗
    SkyGuardian
        8
    SkyGuardian   11 天前
    先检查一下所有包的 seed 是不是都有固定值,这个一般是最主要的,也是理论上会导致结果不一样的。
    玄学上可能会导致结果不一样的,bit flipping 。只要你用的 GPU 还有系统的内存有一个不支持 ECC,在运算的时候硬件被粒子打中,某一个 bit flipped 你也不知道是吧。如果是重要的 weight 被翻牌牌了,结果完全就不一样了呀。
    forgetlight
        9
    forgetlight   11 天前 via iPhone
    首先确定 random seed 一致,有的会用系统时间或者读硬件作为 seed 初始化。很多 DL 的 seed 会对性能有影响。
    w468750
        10
    w468750   11 天前   ❤️ 1
    先查 random seed 和各种配置,如果还能拿到标准模型,那就逐层对比检查输出结果,拿不到就固定好 seed 训练两个模型逐层对比
    Wolfsin
        11
    Wolfsin   11 天前 via iPhone
    虽然可能跟你的情况不一样,我之前也什么都没改,但是模型的结果就是跟以前的结果不一样,而且非常稳定怎么都变不回去。
    最后翻了好几次代码,发现载入数据的顺序变了,改回去就又能复现了。
    c0xt30a
        12
    c0xt30a   11 天前
    猜测有软件包不小心升级过了
    SorryChen
        13
    SorryChen   11 天前
    通常大部分发布的代码,都有设置 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
        14
    ipwx   11 天前
    ummm 我的看法是,如果不能复现但结果相似,那这篇论文就是很 solid 了。
    ----

    如果不能复现并且结果变成了一坨 shit,那这就是水文。
    ipwx
        15
    ipwx   11 天前
    yysy 现在有些 AI 论文是固定 random seed 才能有相似的论文,community 偏偏还觉得这就叫“reproducible”。wqnmlgb,这叫灌水!
    Nimrod
        16
    Nimrod   11 天前
    想起来之前有个同事反应过,conda 行为具有随机性。并不知道是不是相关 hh
    VZXXBACQ
        17
    VZXXBACQ   11 天前
    是不是 random seed 和局部最优的问题

    random seed 是有默认值的,如果是默认值和时间相关就有可能出现你说的情况了。
    Liyiw
        18
    Liyiw   10 天前   ❤️ 1
    有可能作者也复现不了,可能就挑的是最好的结果写在了论文上面
    leimao
        19
    leimao   10 天前
    这就是不用 Docker 的结果。
    yuruizhe
        20
    yuruizhe   10 天前
    重新训练,还真不一定能收敛到一个结果;重新 load 原先的 weight 再测一测?
    chizuo
        21
    chizuo   10 天前
    性能差这么多,感觉和 seed 关系不大了。而且代码一般都是固定 seed 的,建议再三检查是否代码有修改
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1676 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 16:49 · PVG 00:49 · LAX 09:49 · JFK 12:49
    ♥ Do have faith in what you're doing.