2

我们目前已经建立了一个以 SLURM 作为资源管理器的 GPU 计算集群。由于这是一个用于深度学习的集群,我们通过使用 nvidia-docker 图像来管理依赖项,以促进不同的框架和 CUDA 版本。

我们的典型用例是使用 srun 分配资源并给出一个命令来运行 nvidia-docker,该命令按照以下方式运行实验脚本:

srun --gres=gpu:[num gpus required] nvidia-docker run --rm -u $(id -u):$(id -g) /bin/bash -c [python scripts etc..] &

我们发现了一个问题,如果使用scancel命令取消 slurm 作业,节点上的 docker 进程将被取消,但在 docker 中启动的任何实验脚本仍会继续。据我们了解,这不是 SLURM 的错误,而是杀死 docker 进程并不会杀死其衍生的进程,它们只会被docker kill命令杀死。虽然可能有一些方法可以在 SLURM 序言脚本中执行 docker kill 命令,但我们想知道是否有其他人遇到过这个问题,以及他们是否以某种方式解决了这个问题。总结一下,我们想知道:

我们如何确保在 nvidia-docker 容器中启动的进程(又由 SLURM SRUN 启动)被 SCANCEL 杀死?

4

1 回答 1

0

将 Slurm 配置为使用cgroup可能会有所帮助。cgroups启用后,属于作业的任何进程都附加到 a 并在cgroup作业结束时销毁。销毁由内核负责,因此常规进程无法逃脱。

于 2019-03-29T12:28:50.630 回答