SLURM + Docker: как убить процессы, созданные докером, используя SLURMs scancel - PullRequest
2 голосов
/ 14 марта 2019

В настоящее время мы настроили вычислительный кластер на GPU с SLURM в качестве менеджера ресурсов. Поскольку это кластер для глубокого изучения, мы управляем зависимостями, используя образы 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..] &

Мы обнаружили проблему, из-за которой при отмене задания «slurm» с помощью команды scancel процесс докера на узле отменяется, но все сценарии эксперимента, запущенные в докере, все равно продолжаются. Насколько мы понимаем, это не ошибка в SLURM, а, скорее, случай, когда уничтожение процесса докера не убивает его порожденные процессы, они будут уничтожены только командой docker kill . Хотя мог бы быть какой-то способ выполнить команду docker kill в скрипте пролога SLURM, нам было интересно, если у кого-то еще была эта проблема, и решили ли они ее как-нибудь. Подводя итог, хотелось бы знать:

Как мы можем гарантировать, что процессы, запущенные в контейнере nvidia-docker, который, в свою очередь, был запущен SLURM SRUN, будут убиты с помощью SCANCEL?

1 Ответ

0 голосов
/ 29 марта 2019

Настройка Slurm для использования cgroups может помочь здесь. При включенном cgroups любой процесс, принадлежащий заданию, присоединяется к cgroup и уничтожается по окончании задания. Об уничтожении заботится ядро, поэтому обычный процесс не может избежать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...