我正在使用名为darknet/YOLO的CNN来通过NVIDIA图形卡在远程共享群集上进行深度学习。远程集群是带有PBS作业计划系统的linux。
我正在提交工作,以便在GPU上训练神经网络,效果很好。
在训练过程中,处理器消耗了大量的问题。我通常会提交具有8个处理器的工作,像这样
qsub -q gpu select=1:ncpus=8:ngpus=1:mem=15gb:gpu_cap=cuda61
,但是由于处理器数量过多,它总是被杀死。即使我将数字增加到20,也仍然超过了。
我不知道为什么Darknet会在服务器上消耗如此多的处理器,即使我可能会在笔记本电脑上使用Intel i5处理器(速度慢且效率低)运行该工作。
我尝试过的事情:
1)设置cgroups=cpuacct
,这将迫使该作业不要使用随后分配的更多处理器,但是它根本不起作用。似乎类似的限制有效,以防万一服务器没有其他资源。在有免费处理器的情况下,限制不起作用(https://drill.apache.org/docs/configuring-cgroups-to-control-cpu-usage/#cpu-limits)
2)设置place=excelhost
,如果它超出了分配的资源,它不会终止该作业。另一方面,用这个标志开始工作大约需要7天,我每天都必须训练网络。
问题:
我不需要这些处理器,我也不明白为什么Darknet使用这么多处理器。我怎么能迫使这项工作不超过给定的处理器数量?或其他想法,我该如何解决这类问题?
答案 0 :(得分:0)
该队列的管理员设置限制与您的请求之间很可能不匹配。因此,对您的管理员执行ping操作,并获取队列的详细信息。 (例如queue1 ppm,gpu)
答案 1 :(得分:0)
Darknet神经网络实际上在共享群集上使用了这么多线程的原因是,甚至没有考虑到Darknet可能在共享群集上运行的可能性。
正如您在darknet的源代码中看到的那样-src/detector.c
,行111
(Link),darknet使用64个线程来准备训练和计算的输入。如果您没有64核,它将尽可能多地使用。
要减少线程数,请在以下行上替换线程数。对我来说8条线是合适的。
detector.c
111
,393
,602
classifier.c
91