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