Поддержка MIG
Функция Multi-Instance GPU (MIG) позволяет безопасно разделять GPU, такие как NVIDIA A100, на несколько отдельных экземпляров GPU для CUDA-приложений. Например, NVIDIA A100 поддерживает до семи отдельных экземпляров GPU.
MIG предоставляет нескольким пользователям отдельные ресурсы GPU для оптимального использования GPU. Эта функция особенно полезна для рабочих нагрузок, которые не полностью загружают вычислительные возможности GPU, и поэтому пользователи могут запускать разные рабочие нагрузки параллельно для максимизации использования.
В этом документе представлен обзор необходимых шагов для включения поддержки MIG в Alauda Build of NVIDIA GPU Device Plugin. Для получения дополнительной информации о технических концепциях, настройке MIG и NVIDIA Container Toolkit для запуска контейнеров с MIG обратитесь к MIG User Guide.
Требования
- Alauda Build of GPU Device Plugin: v0.18.0+
- GPU NVIDIA Blackwell, Hopper™, и Ampere (см. Supported GPUs)
Тестирование с различными стратегиями MIG
Стратегия none
Стратегия none предназначена для того, чтобы Alauda Build of GPU Device Plugin работал так же, как и раньше. Плагин не делает различий между GPU с включенным MIG или без него и перечисляет все GPU на узле, делая их доступными с использованием ресурса типа nvidia.com/gpu.
Процедура
Для тестирования этой стратегии проверяем перечисление GPU с включенным и выключенным MIG и убеждаемся, что он виден в обоих случаях. Тест предполагает один GPU на одном узле кластера.
-
Убедитесь, что MIG отключен на GPU:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.80.02 Driver Version: 450.80.02 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 A100-SXM4-40GB Off | 00000000:36:00.0 Off | 0 |
| N/A 29C P0 62W / 400W | 0MiB / 40537MiB | 6% Default |
| | | Disabled |
+-------------------------------+----------------------+----------------------+
-
Перейдите на страницу Administrator -> Marketplace -> Cluster Plugin, выберите целевой кластер и разверните или обновите кластерный плагин Alauda Build of GPU Device Plugin:
Установите стратегию MIG в значение none в форме конфигурации.
-
Убедитесь, что на узле доступен 1 GPU с типом ресурса nvidia.com/gpu:
kubectl describe node {node-id}
...
Capacity:
nvidia.com/gpu: 1
...
Allocatable:
nvidia.com/gpu: 1
...
-
Разверните pod для использования GPU и выполните nvidia-smi
kubectl run -it --rm \
--image=nvidia/cuda:12.4.1-base-ubuntu20.04 \
--restart=Never \
--limits=nvidia.com/gpu=1 \
mig-none-example -- nvidia-smi -L
GPU 0: A100-SXM4-40GB (UUID: GPU-15f0798d-c807-231d-6525-a7827081f0f1)
Стратегия single
Стратегия single предназначена для сохранения привычного пользовательского опыта работы с GPU в Kubernetes. Устройства MIG перечисляются с использованием ресурса типа nvidia.com/gpu, как и раньше. Однако свойства, связанные с этим типом ресурса, теперь соответствуют MIG-устройствам, доступным на узле, а не полным GPU.
Процедура
Для тестирования этой стратегии проверяем, что MIG-устройства одного типа перечисляются с использованием традиционного ресурса nvidia.com/gpu. Тест предполагает один GPU на одном узле кластера с уже включенным MIG.
-
Включите MIG на GPU (требуется остановить всех клиентов GPU):
На управляющем узле:
kubectl label node {node-id} nvidia-device-enable-
На узле с GPU:
Enabled MIG Mode for GPU 00000000:36:00.0
All done.
nvidia-smi --query-gpu=mig.mode.current --format=csv,noheader
На управляющем узле:
kubectl label node {node-id} nvidia-device-enable=pgpu
-
Создайте 7 MIG-устройств с одним срезом на GPU:
INFO
Следующий пример приведён для модели Nvidia A100. Для других моделей можно проверить поддерживаемые типы разделения, выполнив команду nvidia-smi mig -lgip.
Например, для модели Nvidia A30 после выполнения команды:
+-----------------------------------------------------------------------------+
| GPU instance profiles: |
| GPU Name ID Instances Memory P2P SM DEC ENC |
| Free/Total GiB CE JPEG OFA |
|=============================================================================|
| 0 MIG 1g.6gb 14 4/4 5.81 No 14 1 0 |
| 1 0 0 |
+-----------------------------------------------------------------------------+
| 0 MIG 1g.6gb+me 21 1/1 5.81 No 14 1 0 |
| 1 1 1 |
+-----------------------------------------------------------------------------+
| 0 MIG 2g.12gb 5 2/2 11.75 No 28 2 0 |
| 2 0 0 |
+-----------------------------------------------------------------------------+
| 0 MIG 2g.12gb+me 6 1/1 11.75 No 28 2 0 |
| 2 1 1 |
+-----------------------------------------------------------------------------+
| 0 MIG 4g.24gb 0 1/1 23.56 No 56 4 0 |
| 4 1 1 |
+-----------------------------------------------------------------------------+
Вы можете выполнить nvidia-smi mig -cgi 14,14,14,14 -C для создания 4 MIG-устройств с одним срезом, или nvidia-smi mig -cgi 14,14,5 -C для создания 2 MIG-устройств с одним срезом и 1 с двумя срезами.
См. Supported MIG Profiles
# Они должны быть одного типа MIG-устройства, присутствующего на узле для стратегии single
nvidia-smi mig -cgi 19,19,19,19,19,19,19 -C
GPU 0: A100-SXM4-40GB (UUID: GPU-4200ccc0-2667-d4cb-9137-f932c716232a)
MIG 1g.5gb Device 0: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/7/0)
MIG 1g.5gb Device 1: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/8/0)
MIG 1g.5gb Device 2: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/9/0)
MIG 1g.5gb Device 3: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/10/0)
MIG 1g.5gb Device 4: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/11/0)
MIG 1g.5gb Device 5: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/12/0)
MIG 1g.5gb Device 6: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/13/0)
-
Перейдите на страницу Administrator -> Marketplace -> Cluster Plugin, выберите целевой кластер и разверните или обновите кластерный плагин Alauda Build of GPU Device Plugin:
Установите стратегию MIG в значение single в форме конфигурации.
-
Убедитесь, что на узле доступно 7 MIG-устройств с типом ресурса nvidia.com/gpu:
kubectl describe node {node-id}
...
Capacity:
nvidia.com/gpu: 7
...
Allocatable:
nvidia.com/gpu: 7
...
-
Разверните 7 pod-ов, каждый использующий одно MIG-устройство (затем прочитайте их логи и удалите их)
for i in $(seq 7); do
kubectl run \
--image=nvidia/cuda:12.4.1-base-ubuntu20.04 \
--restart=Never \
--limits=nvidia.com/gpu=1 \
mig-single-example-${i} -- bash -c "nvidia-smi -L; sleep infinity"
done
pod/mig-single-example-1 created
pod/mig-single-example-2 created
pod/mig-single-example-3 created
pod/mig-single-example-4 created
pod/mig-single-example-5 created
pod/mig-single-example-6 created
pod/mig-single-example-7 created
for i in $(seq 7); do
echo "mig-single-example-${i}";
kubectl logs mig-single-example-${i}
echo "";
done
mig-single-example-1
GPU 0: A100-SXM4-40GB (UUID: GPU-4200ccc0-2667-d4cb-9137-f932c716232a)
MIG 1g.5gb Device 0: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/7/0)
mig-single-example-2
GPU 0: A100-SXM4-40GB (UUID: GPU-4200ccc0-2667-d4cb-9137-f932c716232a)
MIG 1g.5gb Device 0: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/9/0)
...
for i in $(seq 7); do
kubectl delete pod mig-single-example-${i};
done
pod "mig-single-example-1" deleted
pod "mig-single-example-2" deleted
...
Стратегия mixed
Стратегия mixed предназначена для перечисления разных типов ресурсов для каждой конфигурации MIG-устройств, доступных в кластере.
Процедура
Для тестирования этой стратегии проверяем, что все MIG-устройства перечисляются с использованием их полного квалифицированного имени вида nvidia.com/mig-<slice_count>g.<memory_size>gb. Тест предполагает один GPU на одном узле кластера с уже включенным MIG.
-
Убедитесь, что MIG включен на GPU и отсутствуют MIG-устройства:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.80.02 Driver Version: 450.80.02 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 A100-SXM4-40GB On | 00000000:00:04.0 Off | On |
| N/A 32C P0 43W / 400W | 0MiB / 40537MiB | N/A Default |
| | | Enabled |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| MIG devices: |
+------------------+----------------------+-----------+-----------------------+
| GPU GI CI MIG | Memory-Usage | Vol| Shared |
| ID ID Dev | BAR1-Usage | SM Unc| CE ENC DEC OFA JPG|
| | | ECC| |
|==================+======================+===========+=======================|
| No MIG devices found |
+-----------------------------------------------------------------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
-
Создайте 3 разных MIG-устройства разных размеров на GPU (Nvidia A100):
nvidia-smi mig -cgi 9,14,19 -C
GPU 0: A100-SXM4-40GB (UUID: GPU-4200ccc0-2667-d4cb-9137-f932c716232a)
MIG 3g.20gb Device 0: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/2/0)
MIG 2g.10gb Device 1: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/3/0)
MIG 1g.5gb Device 2: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/9/0)
-
Перейдите на страницу Administrator -> Marketplace -> Cluster Plugin, выберите целевой кластер и разверните или обновите кластерный плагин Alauda Build of GPU Device Plugin:
Установите стратегию MIG в значение mixed в форме конфигурации.
-
Убедитесь, что на узле доступны 3 MIG-устройства с типами ресурсов nvidia.com/gpu:
kubectl describe node {node-id}
...
Capacity:
nvidia.com/mig-1g.5gb: 1
nvidia.com/mig-2g.10gb: 1
nvidia.com/mig-3g.20gb: 1
...
Allocatable:
nvidia.com/mig-1g.5gb: 1
nvidia.com/mig-2g.10gb: 1
nvidia.com/mig-3g.20gb: 1
...
-
Разверните 3 pod-а, каждый использующий одно из доступных MIG-устройств
kubectl run -it --rm \
--image=nvidia/cuda:12.4.1-base-ubuntu20.04 \
--restart=Never \
--limits=nvidia.com/mig-1g.5gb=1 \
mig-mixed-example -- nvidia-smi -L
GPU 0: A100-SXM4-40GB (UUID: GPU-4200ccc0-2667-d4cb-9137-f932c716232a)
MIG 1g.5gb Device 0: (UUID: MIG-GPU-4200ccc0-2667-d4cb-9137-f932c716232a/9/0)
pod "mig-mixed-example" deleted