Настройка многопользовательского планировщика заданий для задач Data Science / ML
Фон
Недавно моя лаборатория инвестировала в вычислительную инфраструктуру на GPU. Более конкретно: два TitanV установлены на стандартном серверном компьютере. В настоящее время на машине запущен ненастроенный Windows Server. Каждый из моей лаборатории может войти в систему и делать все, что захочет. Время от времени случается, что машина совершенно бесполезна для окружающих, потому что кто-то случайно занял всю доступную память.
С тех пор ML здесь растет. Я ищу лучший способ использовать нашу инфраструктуру.
Requierments
- Многопользовательский. Кандидаты и студенты должны иметь возможность выполнять свои задачи.
- Очередь заданий или планирование (желательно что-то вроде временного планирования)
- Динамическое распределение ресурсов. Если выполняется одна задача, можно использовать всю память, но как только запускается вторая, они должны совместно использовать ресурсы.
- Простое / удаленное предоставление работы: может быть, веб-страница?
Что я пробовал до сих пор
У меня есть небольшая тестовая установка (потребительский ПК с GTX 1070) для экспериментов. Мои интернет-исследования указали мне на SLURM и Kubernetes.
Прежде всего мне нравится идея системы управления кластером, поскольку она предлагает возможность расширения инфраструктуры в будущем.
SLURM был довольно прост в настройке, но я не смог настроить что-то вроде удаленной отправки или планирования временных интервалов.
В то же время я также пытался работать с Kubernetes. Для меня это предлагает более интересные функции, прежде всего контейнеризацию. Однако все эти функции усложняют настройку и понимание. И снова я не смог построить что-то вроде удаленной регистрации.
Мой вопрос
Кто-нибудь сталкивался с такой же проблемой и может сообщить о своем решении? У меня такое чувство, что Кубернетес лучше подготовлен к будущему.
Если вам нужна дополнительная информация, дайте мне знать.
Спасибо, Тим!
1 ответ
Насколько мне известно, Kubernetes не поддерживает совместное использование GPU, о котором здесь спрашивали.
Продолжается дискуссия. Возможно ли совместное использование GPU для нескольких контейнеров? # 52757
Мне удалось найти образ докера с примерами, которые "неофициально поддерживают совместное использование графических процессоров", доступный здесь https://hub.docker.com/r/cvaldit/nvidia-k8s-device-plugin/.
Это можно использовать следующим образом:
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
containers:
- name: cuda-container
image: nvidia/cuda:9.0-devel
resources:
limits:
nvidia.com/gpu: 2 # requesting 2 GPUs
- name: digits-container
image: nvidia/digits:6.0
resources:
limits:
nvidia.com/gpu: 2 # requesting 2 GPUs
Это позволит выставить 2 графических процессора внутри контейнера для выполнения вашей работы, а также заблокировать эти 2 графических процессора от дальнейшего использования до завершения задания.
Я не уверен, как вы масштабируете их для нескольких пользователей, иначе как ограничите их максимальным количеством используемых графических процессоров на задание.
Также вы можете прочитать о расписании графических процессоров, которые все еще являются экспериментальными.