Настройка многопользовательского планировщика заданий для задач Data Science/ML

Фон

Недавно моя лаборатория вложила средства в инфраструктуру вычислений на GPU. Более конкретно: два TitanV, установленных на стандартной серверной машине. В настоящее время на машине работает совсем не настроенный Windows Server. Каждый из моей лаборатории может войти в систему и делать все, что захочет. Время от времени случается, что машина совершенно бесполезна для других, потому что кто-то случайно занял всю доступную память.

Так как ML растет здесь. Я ищу лучший способ использовать нашу инфраструктуру.

Требования

  • Многопользовательский. Доктора наук и студенты должны иметь возможность выполнять свои задачи.
  • Очередь заданий или планирование (предпочтительно что-то вроде планирования с разделением по времени)
  • Динамическое распределение ресурсов. Если выполняется одна задача, можно использовать всю память, но как только запускается вторая, они должны совместно использовать ресурсы.
  • Простая / удаленная отправка вакансий: может быть, веб-страница?

Что я уже пробовал

У меня есть небольшая тестовая установка (бытовой ПК с GTX 1070) для экспериментов. Мои интернет-исследования указали мне на SLURM и Kubernetes.

В первую очередь мне нравится идея системы управления кластером, так как она дает возможность расширять инфраструктуру в будущем.

SLURM было довольно легко настроить, но я не смог настроить что-то вроде удаленной отправки или планирования временных интервалов.

Тем временем я также пытался работать с Kubernetes. Для меня он предлагает гораздо более интересные функции, прежде всего контейнеризацию. Однако все эти функции усложняют настройку и понимание. И снова я не смог построить что-то вроде удаленной подачи.

Мой вопрос

Кто-нибудь сталкивался с такой же проблемой и может сообщить о своем решении? У меня такое ощущение, что Kubernetes лучше подготовлен к будущему.

Если вам нужна дополнительная информация, дайте мне знать.

Спасибо Тим!


person Tim J.    schedule 23.11.2018    source источник
comment
Можете ли вы уточнить, что именно ваши пользователи обычно делают с машиной? Используют ли они в основном фреймворки машинного обучения, такие как Tensorflow? Проводят ли они эксперименты в блокнотах Jupyter или в основном запускают стабильные сценарии Python, где заранее имеют приблизительное представление о продолжительности каждого запуска? По каким причинам вы рассматриваете возможность добавления K8 в качестве дополнительного слоя?   -  person Dmitri Chubarov    schedule 28.11.2018
comment
Привет Дмитрий, они будут использовать только фреймворки машинного обучения. Блокнот Jupyter — это хорошая функция. Может быть, я неправильно понял идею K8?   -  person Tim J.    schedule 03.12.2018


Ответы (1)


Насколько мне известно, Kubernetes не поддерживает совместное использование графического процессора, о чем был задан вопрос здесь.

Продолжается обсуждение Возможно ли совместное использование GPU несколькими контейнерами? #52757

Мне удалось найти образ докера с примерами, которые "неофициально поддерживают совместное использование графических процессоров", доступные здесь 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 графических процессора от дальнейшего использования до завершения задания.

Я не уверен, как бы вы масштабировали их для нескольких пользователей, иначе ограничивая их максимальное количество используемых графических процессоров на задание.

Также вы можете прочитать об графических процессорах по расписанию, которые все еще находятся на экспериментальной стадии.

person Crou    schedule 23.11.2018