我正在使用一个群集来训练使用PyTorch开发的递归神经网络。 PyTorch自动进行线程化,从而可以并行使用机器的所有内核,而无需对其进行显式编程。太好了!
现在,当我尝试使用像这样的脚本同时使用多个节点时:
#$ -S /bin/bash
#$ -N comparison_of_architecture
#$ -pe mvapich2-rostam 32
#4 -tc 4
#$ -o /scratch04.local/cnelias/Deep-Jazz/logs/out_comparison_training.txt
#$ -e /scratch04.local/cnelias/Deep-Jazz/logs/err_comparison_training.txt
#$ -t 1
#$ -cwd
我看到正在使用4个节点,但实际上只有一个正在工作,因此“仅”使用了32个内核。
我对并行编程一无所知,而且我对PyTorch网站上提供的教程一无所知,恐怕这完全超出了我的范围。
您是否知道让PyTorch程序在多台计算机上运行而无需显式编程这些计算机之间的消息交换和计算的简单方法吗?
PS:不幸的是,我没有GPU,而我正在使用的群集也没有,否则我会尝试过。
答案 0 :(得分:1)
tl; dr 没有简单的解决方案。
有两种方法可以并行化深度学习模型的训练。最常用的是数据并行性(与模型并行性相反)。在这种情况下,您在每个设备上都有一个模型副本,可以在每个设备上独立运行模型和反向传播,并获得权重梯度。现在,棘手的部分开始了。您需要在一个位置上收集所有梯度,将它们求和(微分是线性加总),然后执行优化程序步骤。优化程序会计算权重更新,您需要告诉模型的每个副本如何更新权重。
PyTorch可以通过某种方式在一台计算机上为多个GPU进行此操作,但据我所知,尚无现成的解决方案可在多台计算机上进行此操作。