Top.Mail.Ru
NVIDIA MIG — как разделить GPU в Proxmox? | Блог Serverflow Скачать
прайс-лист
Бесплатная
доставка по РФ
Бонус за
обратную связь
Из-за праздников в Китае с 6 по 7 апреля срок уточнения цен может быть увеличен. Спасибо за понимание!
Интернет-магазин
Серверного оборудования
8 (800) 222-70-01 Консультация IT-специалиста Сравнение

NVIDIA MIG — как разделить GPU в Proxmox?

~ 15 мин
42
Средний
Гайды
NVIDIA MIG — как разделить GPU в Proxmox?

Введение

Графические ускорители корпоративного уровня — это очень дорогое удовольствие, поэтому покупка отдельных GPU для каждого рабочего места обошлась бы в кругленькую сумму. Вместо этого, существуют технологии, такие как Nvidia MIG, которая позволяет разделить ресурсы ИИ-ускорителя на несколько частей, после чего выделить их сразу нескольким пользователям. В этом руководстве специалисты компании ServerFlow расскажут вам, как использовать технологию MIG в Proxmox для эффективного использования вашего ИИ-ускорителя.

Что такое Nvidia MIG?

Nvidia MIG позволяет на аппаратном уровне разделять вычислительные мощности профессионального ИИ-ускорителя на несколько полностью изолированных экземпляров — MIG-инстансы. Каждый инстанс получает определенное количество потоковых мультипроцессоров (SMs), определенный объем видеопамяти, пропускную способность памяти и кэш, аппаратные планировщики задач и движки копирования данных, в зависимости от выбранного профиля разделения ресурсов. Для каждой видеокарты доступен свой набор инстансов — например, у H100 80 ГБ доступно до 7 MIG-инстансов, в зависимости от выбранного профиля. Nvidia MIG, в отличие от технологии vGPU, не требует дополнительных лицензий — она доступна через стандартные LTS-драйверы корпоративного уровня (начиная с версии R450) для поддерживаемых GPU. Кроме того, MIG и vGPU используются в разных сценариях — первая подойдет для жесткого аппаратного разделение ресурсов, а вторая делит GPU между виртуальными машинами на программном уровне. При этом, Nvidia MIG также может работать совместно с vGPU поверх поддерживаемых гипервизоров, вроде Proxmox, обеспечивая максимальную гибкость при работе в высоконагруженной вычислительной инфраструктуре. Важно отметить, что технология MIG доступна именно на полноценных ИИ-ускорителях, таких как A100, H200 или B200, единственным исключением является профессиональная видеокарта RTX Pro 6000 Blackwell, но она поддерживает не все профили MIG. 

Nvidia MIG
Как работает технология Nvidia MIG. Источник: Nvidia.

Использование Nvidia MIG в Proxmox

Итак, приступим к практике!

Активация MIG

Для начала запустите в Proxmox и перейдите в раздел Shell, после чего пропишите команду, чтобы определить, какие физические GPU видны системе до аппаратного разделения:

nvidia-smi -L

Затем введите команду, чтобы убедиться, что функция MIG отключена:

nvidia-smi --query-gpu=index,name,uuid,mig.mode.current --format=csv

Если в поле mig.mode.current прописано текущее состояние как Disabled, то можно включить функцию MIG командой:

sudo nvidia-smi -i 0 -mig 1

Индекс видеокарты в системе — 0. GPU можно выбирать как по индексу, так и по PCI Bus ID или UUID. В параметре MIG необходимо поставить 1.

Важно: если вы используете ИИ-ускоритель поколения Ampere, то при включении MIG драйвер выполнит reset GPU, чтобы режим вступил в силу. Если reset недоступен, например, в некоторых ВМ Pass-through сценариях, может потребоваться перезагрузка системы или виртуальной машины. Но на поколениях Hopper и Blackwell GPU reset уже не требуется.

Теперь снова введите команду для проверки активации MIG:

nvidia-smi --query-gpu=index,name,uuid,mig.mode.current --format=csv

Если поле mig.mode.current показывать текущее состояние как Enabled, значит MIG включился.

Выбор профилей MIG

Теперь переходим к выбору профилей MIG нашего GPU — H100 80 ГБ.

Для просмотра доступных профилей введите команду:

sudo nvidia-smi mig -lgip

После этого система предложит вам несколько доступных профилей. В нашем случае нам доступны:
  • 1g.10gb;
  • 1g.20gb;
  • 2g.20gb;
  • 3g.40gb;
  • 4g.40gb;
  • 7g.80gb.
Первая часть профиля — это количество compute-срезов, которые получает MIG-инстанс. Вторая часть — объем памяти, которые получает инстанс. Например, 3g.40gb — это большой инстанс на 40 ГБ памяти, то есть на ускорителе H100 таких можно сделать два таких профиля. А 1g.10gb — маленький инстанс на 10 ГБ, на H100 можно развернуть до семи таких профилей.

Профили NVIDIA MIG ИИ-ускорителя H100
Профили NVIDIA MIG ИИ-ускорителя H100.

Теперь введем следующую команду:

sudo nvidia-smi mig -lgipp

Эта команда показывает не новые профили, а варианты их размещения внутри GPU. Система покажет вам текстовую версию раскладки MIG-инстансов по срезу ресурсов. 

Варианты размещения профилей внутри GPU
Варианты размещения профилей внутри GPU.

Чтобы вам было проще, предоставим вам эту же раскладку доступных комбинаций профилей и срезов ресурсов на H100 в виде таблицы:

Профили Nvidia MIG H100
Профили Nvidia MIG H100. Источник: Nvidia.

Например, если у 3g.40gb написано {0,4}:4, это значит, что такой инстанс занимает блок размером 4 и может начинаться либо с позиции 0, либо с позиции 4 — то есть при выборе комбинации 4+3 или 3+4, большой блок будет занимать сразу 4 среза подряд. Ввиду этого крупных инстансов на H100 может быть не более двух.

Разделение видеокарты на инстансы

Чтобы лучше разобраться с тонкостями настройки MIG, рекомендуем разбивать видеокарту не на 2 больших одинаковых инстанса, а на 4 инстанса разного размера. Это позволит разделить ускоритель под разные задачи с конкретными требованиями к ресурсам — от инференса тяжелой LLM до развертывания легких сервисов. Для этого введите команду:

sudo nvidia-smi mig -cgi 3g.40gb,2g.20gb,1g.10gb,1g.10gb -C

Мы поделили ИИ-ускоритель следующим образом: 40 ГБ ушло под инференс LLM, 20 ГБ под систему обучения нейронки, оставшиеся два инстанса по 10 ГБ выделили под прикладные сервисы, один под Whisper, второй под embeddings.

После этого введите команду для проверки появления инстансов:

nvidia-smi -L

Также посмотрим на объем памяти каждого инстанса командой:

nvidia-smi

Теперь еще раз введем команду, чтобы увидеть доступные профили для разбиения,  на всех профилях доступное количество разбиений должно быть равно 0:

sudo nvidia-smi mig -lgipp

Создание LXC контейнера

Теперь созданные инстансы нужно передать LXC-контейнерам. Это не просто всем известные Docker-контейнеры с одним приложением, а практически отдельное легкое Linux-окружение внутри Proxmox — у LXC-контейнеров есть своя сеть, автозапуск, снапшоты, лимиты и более привычная серверная логика. LXC Контейнеры значительно легче виртуальных машин, они быстрее стартуют, их проще обслуживать — в них каждый инстанс получает отдельные ресурсы GPU и при этом изолирован от соседних инстансов. Такая упаковка инстансов немного напоминает vGPU, но в LXC-контейнерах меньше гибкости и слабее изоляция, чем у виртуальных машин с vGPU.

Чтобы создать LXC-контейнер, необходимо скачать шаблоны виртуальных машин (templates). Для этого перейдите в раздел storage, затем перейдите в ct templates, и в конце в раздел templates. Перед вами откроется большой список из различных шаблонов под разные ОС и их версии. В нашем случае необходимо скачать шаблон Ubuntu версии 25.04 — находим его через поиск и нажимаем кнопку download. Шаблоны весят немного, около 150 МБ, поэтому скачивание не займет много времени.

После скачивания шаблона нажмите кнопку create ct и перейдите в окно создания LXC-контейнера. Перед вами откроются поля настройки контейнера.

Мы выберем одну node и не будем менять ID, но поменяем hostname для удобства. В поле unprivileged container ставим галочку, это позволит запускать контейнер без root-прав, то есть контейнер будет работать под другим пользователь и ограничивает доступ контейнера к системным ресурсам хоста. Также ставим галочку в поле nesting, что позволит создавать дополнительную среду виртуализации, например, Docker-контейнер. В конце укажите пароль для входа и перейдите к следующему разделу настройки — template, в котором вы укажете ранее скачанный шаблон. Теперь в разделе disks укажите размер диска внутри контейнера (у нас 100 ГБ), в разделе CPU укажите количество ядер, выделенных контейнеру (у нас 32), и в разделе memory укажите количество оперативной памяти в мегабайтах (у нас 64 ГБ, 65536 МБ). Теперь перейдите в раздел network, укажите static ip, в поле ipv4 указываю тот же IP-адрес сети, в котором находится Proxmox (у нас 192.168.90.180), и выберите маску подсети (24). В качестве шлюза ipv4 укажите 192.168.90.1, чтобы устройство могло выходить в интернет. Этап настройки DNS-сервера мы решили опустить. Затем перейдите в раздел confirm и нажмите finish. После успешной установки перейдите в GPU-инстанс, введите логин и пароль, и ваш LXC-контейнер будет запущен.

Добавление GPU в LXC-контейнер

Чтобы добавить GPU в LXC-контейнер, вернитесь в shell хоста и пропишите команду:

nvidia-smi

Вы увидите ID ваших инстансов — GI ID и CI ID. Их нужно запомнить, так как они пригодятся нам следующем шаге. Теперь введите команду:

cat /proc/driver/nvidia-caps/mig-minors | grep 'gpu0/'

Система выведет все возможные инстансы, однако нам нужны только инстансы с GI ID от от 0 до 4 и CI ID равный нулю. Ищем среди инстансов gpu0/gi0/ci2/access21 и  gpu0/gi0/ci2/access22 — первый инстанс на 40 ГБ. Эта информация нужна для того, чтобы прокинуть инстансы через device passthrough в контейнеры.

Теперь вернитесь в Proxmox, выберите созданный LXC-контейнер, зайдите во вкладку resources, нажмите add и выберите device passthrough. Для 1 инстанса нужно добавить следующие 6 путей:
  •  /dev/nvidia0
  •  /dev/nvidiactl
  •  /dev/nvidia-uvm
  •  /dev/nvidia-uvm-tools
  •  /dev/nvidia-caps/nvidia-cap21
  •  /dev/nvidia-caps/nvidia-cap22
Для остальных девайсов первые 4 пути не меняются, а у последних двух меняются лишь две последние цифры, на те, что мы увидели на прошлом шаге — например, для 3 инстанса будут цифры 84 и 85.

После этого перейдите контейнер — вы увидите, что ИИ-ускоритель прокинут в контейнер успешно, однако в нем не установлены драйверы, поэтому команда nvidia-smi работать не будет. Для установки драйверов, введите команду:

 cd /root
 wget https://us.download.nvidia.com/XFree86/Linux-x86_64/590.48.01/NVIDIA-Linux-x86_64-590.48.01.run
 chmod +x NVIDIA-Linux-x86_64-590.48.01.run
 sh ./NVIDIA-Linux-x86_64-590.48.01.run --no-kernel-module

Затем перезагрузите контейнер и пропишите команду nvidia-smi — инстанс будет в вашем контейнере. Поздравляем! Вы научились прокидывать GPU в LXC-контейнер, теперь вы можете выполнять любые задачи на отдельных, изолированных инстансах вашего ИИ-ускорителя.

Выводы

Если у вас есть один ИИ-ускоритель, но необходимо выполнять несколько параллельных GPU-задач, то технология Nvidia MIG станет идеальным решением, которое позволит эффективно разделить и утилизировать ресурсы, выделяя их под разные сервисы. А если вы хотите приобрести GPU корпоративного класса от Nvidia или другого бренда, обращайтесь в компанию ServerFlow. Мы не только подберем идеальный ИИ-ускоритель и другое оборудование для вашей IT-инфраструктуры, но и поможем с развертыванием всего необходимого софта, чтобы ваша система могла выполнять прикладные задачи с первого дня.
Автор: Serverflow Serverflow
Поделиться

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

Написать комментарий
Сейчас тут ничего нет. Ваш комментарий может стать первым.
Написать отзыв
До 6 фото, размером до 12Мб каждое
Мы получили ваш отзыв!

Он появится на сайте после модерации.

Написать комментарий

Комментарий появится на сайте после предварительной модерации

До 6 фото, размером до 12Мб каждое
Мы получили ваш отзыв!

Он появится на сайте после модерации.

Мы свяжемся с вами утром

График работы: Пн-Пт 10:00-18:30 (по МСК)

Обработаем вашу заявку
в ближайший рабочий день

График работы: Пн-Пт 10:00-18:30 (по МСК)