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 · 5 天前 · 2660 次点击

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

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

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

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

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

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

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

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

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

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