В настоящее время мы настроили вычислительный кластер 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?