Pull to refresh

Comments 10

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

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

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

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

И вот у вас есть разделенная карта, но пока на карте есть обращения к cuda, перерезать вы ее не сможете, занавес

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

Если рассматривать 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

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

Sign up to leave a comment.