PCIe Passthrough: прямой доступ к GPU
PCIe Passthrough — это режим, при котором физический GPU напрямую подключается к одной виртуальной машине (ВМ) как PCIe-устройство. Этот режим опирается на аппаратную поддержку виртуализации ввода-вывода на хосте (Intel VT-d или AMD-Vi). Гипервизор только закрепляет ускоритель за ВМ, а работой GPU управляет драйвер NVIDIA внутри нее. При этом процессор, оперативная память, шина PCIe и сеть хоста остаются общими с другими ВМ.
За прямой доступ к GPU приходится платить частью функций виртуализации. Гипервизор не управляет ускорителем, поэтому не может сохранить содержимое его видеопамяти и выполняемые задачи. По этой причине ВМ с PCIe Passthrough нельзя приостановить с сохранением состояния, сделать ее снапшот или выполнить живую миграцию, то есть перенести на другой сервер, не прерывая работу. Эти ограничения указаны, например, в документации VMware vSphere.
MIG: аппаратное разделение ускорителя
MIG (Multi-Instance GPU) — это технология NVIDIA, которая делит физический GPU на изолированные инстансы. Каждый из них получает фиксированную долю вычислительных ресурсов, видеопамяти и кэша. Размер и количество экземпляров определяются MIG-профилями конкретного ускорителя. Такой подход используют в сценариях, где важны изоляция и предсказуемая производительность.
Аппаратное разделение доступно на ускорителях NVIDIA, включая A100/A800, H200 и RTX PRO 6000 Blackwell Server Edition.
Time-sliced vGPU и MIG-backed vGPU: режимы NVIDIA vGPU
Time-sliced vGPU — это режим, при котором каждая ВМ получает выделенный объем видеопамяти, а вычислительные ресурсы карты использует поочередно, в пределах квантов времени. Кванты распределяет планировщик vGPU по одной из трех политик:
Best Effort (режим по умолчанию): если ВМ в данный момент не нагружает GPU, ее квант передается соседним ВМ, поэтому производительность меняется вместе с их нагрузкой;
Equal Share: циклы ускорителя делятся поровну между запущенными ВМ независимо от их нагрузки, и доля каждой уменьшается при запуске новых ВМ;
Fixed Share: каждой ВМ выделяется фиксированная доля времени GPU. Она не увеличивается даже при простое соседних ВМ.
MIG-backed vGPU — это режим, при котором vGPU создается на базе MIG-партиции. Если она целиком выделена одной vGPU, виртуальная машина получает эксклюзивный доступ к ее вычислительным ресурсам и не делит их по времени с другими vGPU. На RTX PRO 6000 Blackwell Server Edition в одной такой части GPU можно разместить до трех time-sliced vGPU по 8 ГБ. Они получают кванты времени инстанса по тем же политикам. Профиль на 24 ГБ занимает такой инстанс целиком.
Источники потерь: гипервизор и разделение ускорителя
Основные причины снижения производительности ВМ с GPU — накладные расходы виртуализации и конкуренция нескольких ВМ за ресурсы одного ускорителя. Конкуренция возникает при разделении GPU. Дополнительно на результат могут влиять общие ресурсы хоста и самого ускорителя, например CPU, PCIe и общий лимит мощности GPU.
Накладные расходы гипервизора (оверхед)
Разделение ускорителя: тест Colfax Research
Разницу между режимами vGPU измерили исследователи Colfax Research в мае 2024 года на NVIDIA A30. Ускоритель разделили на четыре vGPU, сначала в режиме time-sliced, затем в режиме MIG-backed. В каждом режиме измерили производительность одной ВМ на умножении матриц (GEMM), базовой операции нейросетей.
Замер провели на двух задачах. Небольшая — умножение двух матриц размером 1024 × 1024 (не загружает ускоритель полностью). Крупная — умножение матриц 8192 × 16 400 и 16 400 × 8192 (загружает весь ускоритель). Каждую задачу запускали дважды: при простое соседей и при работе всех четырех ВМ.
При простое соседей ВМ в режиме time-sliced vGPU получила доступ практически ко всему вычислительному ресурсу ускорителя. Когда заработали все четыре ВМ, производительность упала в 4,7 раза. При этом клиент не видит нагрузку соседей и не может на нее повлиять, поэтому скорость его задачи становится непредсказуемой.
В режиме MIG-backed vGPU производительность на небольшой задаче не изменилась: соседние инстансы не отнимают у ВМ вычислительные ресурсы.
Профили vGPU: одинаковый объем, разная производительность
Одинаковый объем видеопамяти не гарантирует одинаковой производительности. В тесте Colfax два профиля A30 по 6 ГБ при загруженных соседях различались по производительности на небольшой задаче в 4,6 раза: MIG-backed профиль A30-1-6C сохранил скорость, а time-sliced профиль A30-6C ее потерял.
Дело в том, что профиль vGPU задает больше, чем объем памяти. Это готовая конфигурация, которая определяет объем видеопамяти ВМ и режим разделения ускорителя. При аренде ВМ с vGPU клиент выбирает именно профиль. Объем виден в названии сразу, а режим обозначен его служебной частью. Например, у RTX PRO 6000 Blackwell Server Edition профиль DC-24C на 24 ГБ относится к time-sliced vGPU, а DC-1-24C с тем же объемом соответствует аппаратно закрепленной четверти ускорителя.
В прайс-листе провайдера оба профиля могут быть обозначены как 24 ГБ. Поэтому при выборе профиля стоит уточнить и объем видеопамяти, и режим разделения.
Где теряет MIG: размер инстанса
MIG-backed vGPU ограничена ресурсами своего MIG-инстанса: ВМ не может использовать свободные вычислительные ресурсы соседних инстансов. Поэтому на нагрузках, способных загрузить весь GPU, производительность упирается в размер выделенной части ускорителя.
Пока соседи простаивают, time-sliced vGPU занимает весь GPU и выполняет крупную задачу примерно в четыре раза быстрее MIG-инстанса, которому доступна четверть ускорителя. Когда соседи активны, time-sliced vGPU тоже получает около четверти квантов времени, и результаты режимов становятся близкими. MIG-backed vGPU в этом случае теряет около 5% из-за общего лимита мощности ускорителя.
Размер матриц в операциях слоя зависит от размера батча, то есть от числа примеров, которые обрабатываются за один проход. Инференс в реальном времени часто обрабатывает запросы малыми батчами, и такие задачи не загружают ускоритель полностью. Обучение обычно идет крупными батчами. Поэтому MIG-backed vGPU подходит для инференса, а на обучении ограничением становится размер инстанса.
Измерение потерь: инструменты и метрики
Провайдер не всегда раскрывает режим разделения GPU. Его влияние на производительность можно оценить на арендованной ВМ с помощью инструментов командной строки:
Профайлер CUTLASS повторяет замер Colfax: измеряет производительность GEMM на одной vGPU. Поставляется отдельным репозиторием NVIDIA. Для измерения пропускной способности PCIe и видеопамяти использовался bandwidthTest из CUDA Samples; сейчас NVIDIA рекомендует для таких замеров NVBandwidth.
Тесты NCCL на ВМ с несколькими ускорителями измеряют производительность коллективных операций, прежде всего all-reduce, широко используемой при распределенном обучении. Сравнение с физическим сервером той же топологии позволяет оценить накладные расходы, связанные с виртуализацией.
CUDA-профилирование (Nsight Systems и CUPTI) позволяет анализировать выполнение CPU- и GPU-операций и искать дополнительные задержки. На NVIDIA vGPU по умолчанию доступна только трассировка GPU-нагрузки; дополнительные возможности CUDA-профилирования необходимо отдельно включать. Профайлеры можно использовать только на одной ВМ одновременно на физическом GPU.
P2P-микробенчмарки измеряют обмен между парами ускорителей: пропускную способность и задержку. Для таких замеров можно использовать NVBandwidth. В NVIDIA vGPU прямой P2P-обмен поддерживается только для отдельных time-sliced профилей через NVLink; для MIG-backed vGPU и через PCIe он не поддерживается.
Выбор режима под тип нагрузки
Режим доступа к GPU выбирается по типу нагрузки и требованиям к предсказуемости сроков.
Длительное обучение. Прогон крупной модели длится часами, и на крупных матрицах производительность MIG-инстанса ограничена его ресурсами. Для таких задач подходят PCIe Passthrough или выделенный сервер.
Нагрузки, чувствительные к накладным расходам гипервизора. По опыту команды ITGLOBAL.COM, к ним относятся:
- инференс в реальном времени с целевой задержкой ответа менее 10 мс, где критичны отдельные задержки запросов;
- задачи, чувствительные ко времени ответа: гипервизор может кратковременно задержать виртуальный процессор, и длительность такой паузы непредсказуема.
Для этих нагрузок подходит выделенный сервер.
Плотный инференс. Поток мелких независимых запросов выигрывает от аппаратной изоляции MIG. На RTX PRO 6000 Blackwell Server Edition аппаратно выделенные ресурсы получают до четырех ВМ с профилем на 24 ГБ. Размещение двенадцати ВМ допустимо на профилях по 8 ГБ, но тогда три ВМ внутри каждого инстанса используют его поочередно.
Стоимость при высокой утилизации. По расчетам ITGLOBAL.COM, при постоянно высокой загрузке выделенный сервер может обходиться дешевле GPU Cloud, и его стоимость предсказуема.
GPU-инфраструктура ITGLOBAL.COM
Заключение
Влияние виртуализации на производительность зависит от способа предоставления GPU. По внутренним замерам ITGLOBAL.COM, накладные расходы виртуализации на вычислительных нагрузках составляют 3–7%. В эксперименте Colfax Research на NVIDIA A30 при time-slicing производительность небольшой GEMM при одновременной работе четырех ВМ снизилась в 4,7 раза.