Allennlp多GPU挖坑记——serialization_dir &Multiprocessing swan runtime error freeze_support()论文前的三天的一个大bug

 

这个故事的起因是这样的,我在做这个实验的时候,总是遇到multiprocessing的spwan的奇奇怪怪的问题,我的主函数是这样的,写成这样主要是我当时为了方便自己debug,关于debug,看这里https://guide.allennlp.org/debugging,却不想开启了一段噩梦的开始,三天时间哇,一个奇葩奇葩奇葩的小错误,直接影响了试验进度和论文进程

import json
import shutil
import sys

from allennlp.commands import main

config_file = "experiments/venue_classifier.json"

# Use overrides to train on CPU.
overrides = json.dumps({"trainer": {"cuda_device": -1}})

serialization_dir = "/tmp/debugger_train"

# Training will fail if the serialization directory already
# has stuff in it. If you are running the same training loop
# over and over again for debugging purposes, it will.
# Hence we wipe it out in advance.
# BE VERY CAREFUL NOT TO DO THIS FOR ACTUAL TRAINING!
shutil.rmtree(serialization_dir, ignore_errors=True)

# Assemble the command into sys.argv
sys.argv = [
    "allennlp",  # command name, not used by main
    "train",
    config_file,
    "-s", serialization_dir,
    "--include-package", "my_library",
    "-o", overrides,
]

main()

修改这个错误很简单,直接在main上加if __name__=='__main__',就这样,如果你遇到其他的问题,欢迎来跟我交流,遇到问题的人多了我才有动力继续整理为博客

好吧,还是大概说下发现问题的过程

周五以及随后周末几天最大的成果可以说就说把allennlp的坑踩了一遍,问题的起因是allennlp. 单卡一边模型要一天,然鹅从多卡开始配制就各种奇奇怪怪,光怪陆离,离奇古怪,匪夷所思的问题,最早的问题是serialization_dir目录,不管我设置不设置recover或者force,添不添加预训练模型在这个目录下,总会有file exist或者 file not found,或者file 不合适的问题,好吧,你大爷的,看github上的issue呢,完全没用,不过幸运又不幸的是周一早上解决了,周六我尝试过按步debug,改写库函数,版本回退等方式,由于网上遇到此问题的和我相似又不完全一样,事实证明他们的解决方案对我没一个好使的,最后解决问题的方法还是在抽茧剥丝的报错信息里,当我把所有由于配置导致的问题解决之后,问题指向了multiprocessing的swan包,当我按照它的教程把模型训练代码重构之后,真正的报错信息才浮现出来,读取的layer的state和预训练模型不匹配,检索之后好吧又是一个多进程问题,但是问题是原来一直都隐藏在某个sub processing完全不为人所知哇。等这次论文结束了我打算出个踩坑的文档记录,希望能帮助后来人

后续,虽然上面的程序是可以进行多进程了,但是这个程序跑了一周没结束,我觉得这个是很不正常的,5555,哭到卷曲,太难受的,

上一篇:2021-12-27---2021SC@SDUSC---DolphinScheduler(14)


下一篇:Android 的 Support 库的认识 V4, V7 ,V13, Androidx