Rita最近在单重态子这里做ML相关的研究。使用的是Keras框架。这一过程中发现最耗费时间的并不是真正的机器学习过程,而是各种奇怪的与运行环境相关的debug。
明明Rita一直很嫌弃ML的 真香
由于Rita不是也无意为了训练一个神经网络而成为机器学习框架使用细节的专家,以下观点可能存在错误,欢迎讨论。
Tensorflow在密集计算时可能存在内存分配问题
Keras可以使用Tensorflow或Theano作为后端。两者都是经典的机器学习框架,但需要在一个CPU计算节点上同时运行28个机器学习脚本,每个脚本进行12万轮训练和在CV上的测试的Rita发现使用Tensorflow时很容易发生中途退出的现象,且没有任何报错信息。同时会生成大量大小为几十个GB的core文件。虽然未能找到确切的原因,但由于这种情况仅在计算量大时出现,Rita怀疑是Tensorflow的evaluate存在内存分配的bug。在改用Theano后这一问题不再出现。
2. Theano的硬盘占用问题
改用Theano后在集群上运行时出现了任务不稳定的问题。问题之一是在提交任务达到一定数量后,继续提交时即使已经开始运行,输出文件却没有内容写入;排队系统的e文件中给出了硬盘空间告罄的信息。发现是由于使用theano时会在/home/bishoujo/.theano下写入大量临时文件,而集群上/home下文件总量有限制。手动设定临时文件存放地点的方法是
os.environ["THEANO_FLAGS"]="base_compiledir=/wife/bishoujo/.theano"
3. Theano不允许多个任务完全同时运行
另一种问题是任务提交后输出了最初的几步,随后就开始陷入与八月同样漫长的等待时间,同时会提示存在compiler lock。Rita对这种问题的解决方法是每个Python脚本前写入
import random
os.system('sleep '+str(random.randint(1,10)))
避免两个脚本完全同时开始运行,即可部分解决这一问题。
未尽之处之后补充。
领取专属 10元无门槛券
私享最新 技术干货