#docker #deep-learning #cluster-computing #slurm #nvidia-docker
#docker #глубокое обучение #кластерные вычисления #slurm #nvidia-docker
Вопрос:
В настоящее время мы настроили вычислительный кластер 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..] amp;
Мы обнаружили проблему, из-за которой, если задание slurm отменяется с помощью команды scancel, процесс docker на узле отменяется, но любые сценарии экспериментов, которые были запущены в docker, все еще продолжаются. Насколько мы понимаем, это не ошибка в SLURM, скорее, это тот случай, когда завершение процесса docker не приводит к уничтожению его порожденных процессов, они будут уничтожены только с помощью команды docker kill. Хотя, возможно, существует какой-то способ выполнить команду docker kill в скрипте SLURM prologue, нам было интересно, сталкивался ли кто-нибудь еще с этой проблемой и решили ли они ее каким-либо образом. Для обобщения мы хотели бы знать:
Как мы можем гарантировать, что процессы, запущенные в контейнере nvidia-docker, который, в свою очередь, был запущен SLURM SRUN, будут уничтожены с помощью SCANCEL?
Комментарии:
1. Возможно, вам нужен более высокий уровень абстракции поверх slurm. atrio.io например, это сервис, который может быть полезен для управления рабочими нагрузками hpc.
Ответ №1:
Здесь может помочь настройка Slurm на использование cgroups. При cgroups
включенной функции любой процесс, принадлежащий заданию, присоединяется к cgroup
и уничтожается по завершении задания. Об уничтожении заботится ядро, поэтому обычный процесс никак не может избежать этого.
Комментарии:
1. Вы имеете в виду включить отслеживание процессов с помощью
ProctrackType=proctrack/cgroup
в конфигурации slurm? Если да, то у нас это уже включено.