我的资源(例如 GPU)一次只能使用一次。在执行实验时,我总是需要知道批处理文件创建的时间,以及我将来想要执行哪些实验。但我是一个喜欢改变主意的人,但我讨厌辞职。
是否有像 Slurm 这样的东西,只在一台机器上运行,我可以将作业传递到队列并在必要时删除它们?
我正在寻找既可以在 GPU 负载上工作(与在 CPU 负载上工作的批处理/at 相比)也可以按顺序执行作业的应用程序。这意味着一次只能在一个资源 (GPU) 上运行一个作业,下一个作业将在上一个作业执行完成后开始。我还希望能够管理队列,以便为作业提供更高的优先级或删除它们。
答案1
我找到了一个完全适合我的需求的解决方案。我遇到的问题是,我只有一个 GPU,但想要一个队列来添加作业,查看它们的状态,如果需要,再次从队列中删除它。
经过一番谷歌研究后,我发现任务假脱机程序 (tsp)。使用这个命令行工具,将作业添加到队列并跟踪其结果是相当容易的。到目前为止,我只使用了一个队列,但它也可以扩展到更多。
答案2
如果您是计算机上的唯一用户,则hyper-shell
(https://hyper-shell.readthedocs.io) 具有您需要的功能。您可以将其hyper-shell cluster
作为登录项运行(或将其保留在后台)并使用 PostgreSQL 作为后端数据库。对于单台机器(尤其是单个资源 - 一次 1 个作业),这是 SLURM 的轻松替代品,并且是跨平台的。
您可以使用,一次提交一个作业(例如sbatch
)。hyper-shell task submit
squeue
hyper-shell task search --remaining
配置、日志记录等方面有很多选择。但是调度服务的基本启动类似于:
hyper-shell cluster -N1 --forever --max-retries=2 --capture
免责声明:我是 的作者hyper-shell
。
答案3
让作业通过您自己的简单队列管理器运行是否可以接受?
#!/bin/bash
while ! mkdir /tmp/my_gpu_lockdir; do
sleep $((RANDOM))
done
trap 'rmdir /tmp/my_gnu_lockdir' ERR EXIT
.... your actual task here ...