Как стать автором
Обновить

Делим неделимое в Kubernetes: шеринг GPU с помощью MIG и TimeSlicing

Уровень сложностиСложный
Время на прочтение21 мин
Количество просмотров11K
Всего голосов 40: ↑40 и ↓0+56
Комментарии10

Комментарии 10

Спасибо за обратную связь, это очень приятно)
Действительно в русскоязычном сегменте материалов по шерингу GPU почти нет (в основном я опирался на англоязычные статьи).

И хочу вас обрадовать, у нас есть еще о чем рассказать - а именно как мы имплементировали шеринг GPU в нашу ML-платформу (с GitOps и IaC делами). Расскажем как это работает на примерах с Jupyterhub и ClearML! Так что следите за нашими публикациями)

Очень актуальная статья, спасибо!

Спасибо! Тема действительно набирает обороты, поэтому стараемся шарить наши результаты с сообществом)

Не до конца понял что значит перерезать, но постараюсь дать небольшое разъяснение)

Если рассматривать MIG, то разделение происходит на уровне железа, для уровня приложений по сути каждая партиция - это отдельная видеокарта.

Если рассматривать Timeslicing - это чистая обманка kubernetes, так как нет ограничения по видеопамяти (по сути каждый сервис может сожрать всю память видеокарты и другие просто выпадут в ошибку). Но я приводил примеры, как можно с этим побороться. Если будет на это запрос, постараемся включить в следующие статьи разбор того же ONNX в связке с Timesclicing)

что значит перерезать

Вешаете лейбл на ноду и говорите, хочу чтобы все карты были нарезаны например на 1g.5gb, ок, на карту заезжает ворклоад, рабоатет, потом процентов 80% освобождается, пока оставшийся ворклоад не доработает, с этой нодой вы ничего сделать не сможете, в итоге у вас просто 80% сервака стоит и ждет остальные 20%, те вы автоматически получаете проблему упаковки.

Если рассматривать MIG, то разделение происходит на уровне железа, для уровня приложений по сути каждая партиция - это отдельная видеокарта.

Отчасти это профанация, тк вы имеете общий хостовый драйвер на N карт, в итоге, динамически нарезать mig вы не можете, пока хоть какой то процесс, будет использовать любую из карт или других mig(имеется ввиду любые запросы к cuda,метрики,etc).

Timesclicing

С тем же успехом можно использовать NVIDIA_VISIBLE_DEVICES=all при этом не запрашивать ни одной карты а просто заехать на ноду где эти карты собственно есть и получить их вообще все... а дальше уже на уровне фреймворка заниматься scheduling нагрузки...

Статья Огонь!! Большое спасибо!

Классная статья. Спасибо!

Кстати, можно ведь и обычные карты "шарить".

NVIDIA vGPU on Proxmox https://gitlab.com/polloloco/vgpu-proxmox

vGPU Split Passthrough (Nvidia) https://3os.org/infrastructure/proxmox/gpu-passthrough/vgpu-split-passthrough/
FastAPI-DLS - Minimal Delegated License Service (DLS) https://git.collinwebdesigns.de/oscar.krause/fastapi-dls

Спасибо) интересные ссылки, обязательно посмотрим)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий