【问题标题】:How to keep all GPU devices running tasks using Bash script?如何使用 Bash 脚本保持所有 GPU 设备运行任务?
【发布时间】:2019-11-01 23:36:27
【问题描述】:

我有一个 8-GPU 服务器,我想同时在每个服务器上训练一个神经网络。我有几十个这样的网络要训练,我想安排训练任务。目前我正在为此调度任务编写自己的 bash 脚本。

for l1 in {1e-4,2e-4,5e-4,1e-3}; do

      python train.py --lr $l1 --attr 0 --device 0 &
      python train.py --lr $l1 --attr 1 --device 1 &
      python train.py --lr $l1 --attr 2 --device 2 &
      python train.py --lr $l1 --attr 3 --device 3 &
      python train.py --lr $l1 --attr 4 --device 4 &
      python train.py --lr $l1 --attr 5 --device 5 &
      python train.py --lr $l1 --attr 6 --device 6 &
      python train.py --lr $l1 --attr 7 --device 7

      sleep 1
      wait 
done 

在上面的脚本中,--device 标志选择要使用的 GPU,而其他标志只是确定我的深度神经网络的超参数。该脚本的作用是,对于 for 循环的每次迭代,它会在每个 GPU 上启动一个训练任务,并等待所有训练任务完成,然后再开始下一次迭代。问题是,每个训练任务可能需要不同的时间来运行,因此我会同时使用少于 8 个 GPU 的大量时间,这会延长整个任务完成的时间。

我想知道是否有某种方法可以让我检测到哪个 GPU 已完成其任务并在其上启动一个新任务,这样我就可以始终运行 8 个 GPU。

非常感谢!

【问题讨论】:

    标签: bash deep-learning scheduled-tasks


    【解决方案1】:

    我看到您没有使用集群,这意味着 GPU 在您的本地计算机上。

    在这种情况下,你可以使用这个库:https://pypi.org/project/simple-gpu-scheduler/

    希望这会有所帮助。

    【讨论】:

    • 刚试了下,效果不错!
    【解决方案2】:

    刚刚发现 Ray 是一个非常适合管理您的实验的软件包。 (https://github.com/ray-project/ray)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 2023-03-07
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 2022-01-05
      相关资源
      最近更新 更多