• Русский
  • Поддержка 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 на одном узле кластера.

    1. Убедитесь, что MIG отключен на GPU:

      nvidia-smi
      +-----------------------------------------------------------------------------+
      | 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 |
      +-------------------------------+----------------------+----------------------+
    2. Перейдите на страницу Administrator -> Marketplace -> Cluster Plugin, выберите целевой кластер и разверните или обновите кластерный плагин Alauda Build of GPU Device Plugin: Установите стратегию MIG в значение none в форме конфигурации.

    3. Убедитесь, что на узле доступен 1 GPU с типом ресурса nvidia.com/gpu:

      kubectl describe node {node-id}
      ...
      Capacity:
      nvidia.com/gpu:          1
      ...
      Allocatable:
      nvidia.com/gpu:          1
      ...
    4. Разверните 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.

    1. Включите MIG на GPU (требуется остановить всех клиентов GPU): На управляющем узле:

      kubectl label node {node-id} nvidia-device-enable-

      На узле с GPU:

      systemctl stop kubelet
      nvidia-smi -mig 1
      Enabled MIG Mode for GPU 00000000:36:00.0
      All done.
      nvidia-smi --query-gpu=mig.mode.current --format=csv,noheader
      Enabled
      systemctl start kubelet

      На управляющем узле:

      kubectl label node {node-id} nvidia-device-enable=pgpu
    2. Создайте 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
      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/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)
    3. Перейдите на страницу Administrator -> Marketplace -> Cluster Plugin, выберите целевой кластер и разверните или обновите кластерный плагин Alauda Build of GPU Device Plugin: Установите стратегию MIG в значение single в форме конфигурации.

    4. Убедитесь, что на узле доступно 7 MIG-устройств с типом ресурса nvidia.com/gpu:

      kubectl describe node {node-id}
      ...
      Capacity:
      nvidia.com/gpu:          7
      ...
      Allocatable:
      nvidia.com/gpu:          7
      ...
    5. Разверните 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.

    1. Убедитесь, что MIG включен на GPU и отсутствуют MIG-устройства:

      nvidia-smi
      +-----------------------------------------------------------------------------+
      | 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                                                 |
      +-----------------------------------------------------------------------------+
    2. Создайте 3 разных MIG-устройства разных размеров на GPU (Nvidia A100):

      nvidia-smi mig -cgi 9,14,19 -C
      nvidia-smi -L
      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)
    3. Перейдите на страницу Administrator -> Marketplace -> Cluster Plugin, выберите целевой кластер и разверните или обновите кластерный плагин Alauda Build of GPU Device Plugin: Установите стратегию MIG в значение mixed в форме конфигурации.

    4. Убедитесь, что на узле доступны 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
      ...
    5. Разверните 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