好几天没写了,总结一下这几天干嘛啦。
周五的时候,上午搞了周四那份代码。因为,虽然能跑起来了。但是还是一直用的是CPU。然后本以为能很快的解决这个问题。没想到搞了一上午也没搞出来。明明哪里写的都没有问题,就是不用GPU。最后我实在是没办法了。放弃它了。然后又找了一份新的。
但是好巧不巧,这个新的其实就是在我一直改的那份代码的基础上改的。然后也搞了一天,周五下午晚上基本就在搞这个。因为这个我也跑不起来。但是后来发现,又是数据的问题,本来cityspace那个数据是34分类的,他代码里是按19分类写的。我估计这个数据集也是更新过的。很奇怪,反正改到晚上很晚,终于跑起来了。但是发现结果(召回率、F1 score之类的)都是nan,后来就训练上100轮然后去睡觉了。
第二天起来的时候,看了一下结果。发现一百轮之后,loss竟然还是2,可能数据集太复杂了。因为原来的代码,默认是1000轮。但是我也不知道是不是这个原因。反正召回率啥的还是nan。后来没办法,打算还是先把代码再啃一遍,毕竟和之前那个还是不一样。然后想着自己换一个简单的数据集再试一试,然后改成二分类的代码,我好像没必要要多分类的代码。
于是,周六上午捣鼓了半天。然后下午和晚上基本就摆烂了。看不进去,真的看不懂。想着放松一下,第二天再学了。
然后周日,也就是昨天,上午开会,开完会就去奶奶家了。回来就晚上了,也没有干什么。
然后今天上午又继续看代码了,看了一会之后傻杯老师又让我干活,我也懒得给他干,想着到时候再说。但是今天起的也挺晚的,看了一会就又吃饭了。今天下大雨,然后一觉睡到了4点。睁开眼看到另一个老师2点多时候给我发消息,让我建一个3:50的会议,说是协助我解决一下部署时候遇到的问题(上午傻杯打电话时候问我部署情况,我说我整不了)。然后我4点回的他说刚看到,赶紧爬起来开电脑建会议上号开会。
开完会就吃饭了,今天吃完饭也没有休息,直接干活了。没办法,好在我留了一手,其实是我之前就解决了的问题,我说我没解决。他在那说半天我其实都没在意,但是还有另一个问题我是真的解决不了。但是后来,他找到了一个帖子,讲了一个思路。因为django-celery-result这个包在oracle生成默认数据库的时候一直报alway关键字不能在Oracle 11.2使用(我们一直用的12C)。那个帖子说的就是Django2.0+版本建数据表默认都是12C的语法,不能符合11.2的语法。之前我走错路了,一直以为是cx-oracle或者是django-celery-result的版本问题,真的没想过是django的问题。
然后就新建了一个conda环境,装了一个1.11.22版本的django,就为了能建一个表。但是还是有很多问题,建完的表代码能够读取到了,但是少了很多字段(因为建的过程中也报错来着),但是好在id字段的触发器什么的都建好了,这是最关键的。后来我又手动加了一些必须的字段。
当我以为万事大吉的时候,发现,有时候代码报错了,然后会遗留一条PENDING状态的任务记录。然后我手动删掉PENDING状态的任务之后,代码还是能读取到1条记录。简直崩溃了。后来搞了好久才想到会不会是PL/SQL执行sql语句之后没有自动提交事务啊。天,居然有这么沙雕的设计,自己手撕sql删除,还要自己手动提交事务,这是我没想到的。正常都是可视化界面操作之后,需要手动提交一下事务。
这个问题解决之后,又遇到了新的问题。不论执行代码是否能成功,task表的记录都不会自动变为FISHIED的状态。我还以为我哪里又搞错了,估计是建表时候出的问题。没办法,方便起见,之间自己手动改状态吧。然后又改celery的tasks的代码,任务执行完之后我去帮它修改状态。
当我觉得真的搞定了的时候,发现深度学习的代码还是不能用,报路径错误。我把代码搜索遍了也没有看到“H:”这个路径。搞了好久,才想起来,之前存模型的时候有个模版配置文件,那里把路径写的绝对路径。没办法了,不想改了,直接全都给改成新的绝对路径算了。后来明明都改了,还是不行。又把配置文件信息打印出来,发现还是改之前了。我彻底懵逼了。最后,竟然可能是因为缓存了的问题?反正重新启动项目就好了,热启动就不行。
最后的最后,运行,又报错了。这次我学聪明了,(也受到了下午强哥的提醒),想着脱离程序,单独运行网络,看看能不能跑起来。后来发现报错了,一个关于h5py的问题。百度一下说,h5py版本太高了,我就按他说的降版本。降了版本之后Error提示tensflow需要高版本的h5py,慌得一批。但是没管它,直接跑项目。然后竟然,终于成功了!
成功了就行,至此,总算是成功把这个屎山给部署好了。真的太艰辛了。我这周的工作量又在我一晚上的努力后搞定了。真的是,ddl是第一生产力啊!可以安心的下班了!