这个故事的起因是这样的,我在做这个实验的时候,总是遇到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,哭到卷曲,太难受的,