【问题标题】:SLURM+Docker: How to kill docker-created processes using SLURMs scancelSLURM+Docker:如何使用 SLURM 杀死 docker 创建的进程 scancel
【发布时间】:2019-08-05 14:42:18
【问题描述】:

我们目前已经建立了一个使用 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 杀死?

【问题讨论】:

  • 也许您需要在 slurm 之上进行更高级别的抽象。例如atrio.io,它是一项可用于控制 hpc 工作负载的服务。

标签: docker deep-learning cluster-computing slurm nvidia-docker


【解决方案1】:

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

【讨论】:

  • 您的意思是在 slurm 配置中使用 ProctrackType=proctrack/cgroup 启用进程跟踪吗?如果是这样,我们已经启用了此功能。
猜你喜欢
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 2021-09-06
  • 2015-03-01
相关资源
最近更新 更多