Комментарии 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
Делим неделимое в Kubernetes: шеринг GPU с помощью MIG и TimeSlicing