• Русский
  • ⚠️ Эта функция все еще находится в экспериментальном статусе. Используйте ее с осторожностью.

    Включение динамической функции MIG

    HAMi теперь поддерживает динамический MIG с использованием mig-parted для динамической настройки устройств MIG, включая:

    • Динамическое управление MIG Instance: больше не нужно выполнять операции непосредственно на GPU-узлах или использовать команды вроде nvidia-smi -i 0 -mig 1 для управления MIG instances. HAMi-device-plugin будет делать это автоматически.

    • Динамическая настройка MIG: каждое устройство MIG, управляемое HAMi, будет динамически подстраивать свой MIG template в соответствии с отправленными jobs по мере необходимости.

    • Наблюдение за MIG devices: каждый MIG instance, созданный HAMi, будет отображаться в scheduler monitor вместе с информацией о job, обеспечивая наглядный обзор MIG nodes.

    • Совместимость с HAMi-Core Nodes: HAMi может управлять единым пулом GPU как на HAMi-core nodes, так и на MIG nodes. Job может быть назначен на любой из узлов, если иное не указано вручную с помощью аннотации nvidia.com/vgpu-mode.

    • Единый API с HAMi-Core: для обеспечения совместимости jobs с функцией dynamic MIG не требуется выполнять дополнительных действий.

    Предварительные требования

    • NVIDIA Blackwell, Hopper™, и Ampere GPUs
    • Установлена сборка Alauda Build of Hami

    Включение поддержки dynamic MIG

    1. Установите operatingmode в mig в ConfigMap hami-device-plugin для каждого MIG node
      kubectl edit configmap hami-device-plugin -n kube-system
      apiVersion: v1
      data:
        config.json: |
          {
              "nodeconfig": [
                  {
                      "name": "MIG-NODE-A",
                      "operatingmode": "mig",
                      "migstrategy":"mixed",
                      "filterdevices": {
                        "uuid": [],
                        "index": []
                      }
                  }
              ]
          }
      kind: ConfigMap
      Замените имя узла в массиве nodeconfig на имя целевого узла. Чтобы охватить несколько узлов, добавьте в массив дополнительные записи.
    2. Перезапустите следующие pods, чтобы изменения вступили в силу:
    • hami-scheduler
    • hami-device-plugin на node 'MIG-NODE-A'

    Примечание: приведенная выше конфигурация будет потеряна при обновлении chart; в будущих версиях Hami это будет улучшено.

    Пользовательская конфигурация MIG (необязательно)

    HAMi поставляется с конфигурацией MIG по умолчанию.

    Вы можете настроить конфигурацию MIG, выполнив следующие шаги:

    kubectl -n kube-system edit configmap hami-scheduler-device
    apiVersion: v1
    data:
      device-config.yaml: >-
          knownMigGeometries:
          - models: [ "A30" ]
            allowedGeometries:
              -
                - name: 1g.6gb
                  memory: 6144
                  count: 4
              -
                - name: 2g.12gb
                  memory: 12288
                  count: 2
              -
                - name: 4g.24gb
                  memory: 24576
                  count: 1
          - models: [ "A100-SXM4-40GB", "A100-40GB-PCIe", "A100-PCIE-40GB", "A100-SXM4-40GB" ]
            allowedGeometries:
              -
                - name: 1g.5gb
                  memory: 5120
                  count: 7
              -
                - name: 2g.10gb
                  memory: 10240
                  count: 3
                - name: 1g.5gb
                  memory: 5120
                  count: 1
              -
                - name: 3g.20gb
                  memory: 20480
                  count: 2
              -
                - name: 7g.40gb
                  memory: 40960
                  count: 1
          - models: [ "A100-SXM4-80GB", "A100-80GB-PCIe", "A100-PCIE-80GB"]
            allowedGeometries:
              -
                - name: 1g.10gb
                  memory: 10240
                  count: 7
              -
                - name: 2g.20gb
                  memory: 20480
                  count: 3
                - name: 1g.10gb
                  memory: 10240
                  count: 1
              -
                - name: 3g.40gb
                  memory: 40960
                  count: 2
              -
                - name: 7g.79gb
                  memory: 80896
                  count: 1

    Затем перезапустите компоненты hami-scheduler. HAMi определяет и использует первый MIG template, который соответствует job, в порядке, заданном в этом ConfigMap.

    Примечание: приведенная выше конфигурация будет потеряна при обновлении chart; в будущих версиях Hami это будет улучшено.

    Запуск MIG jobs

    Теперь контейнер может запрашивать MIG instance так же, как и hami-core, просто указав типы ресурсов nvidia.com/gpualloc и nvidia.com/gpumem.

    apiVersion: v1
    kind: Pod
    metadata:
      name: gpu-pod
      annotations:
        nvidia.com/vgpu-mode: "mig" #(Optional), if not set, this pod can be assigned to a MIG instance or a hami-core instance
    spec:
      containers:
        - name: ubuntu-container
          image: ubuntu:18.04
          command: ["bash", "-c", "sleep 86400"]
          resources:
            limits:
              nvidia.com/gpualloc: 1
              nvidia.com/gpumem: 8000

    Примечания:

    • Запрос nvidia.com/gpualloc не может превышать фактическое количество физических GPUs. Например, на одной GPU в режиме MIG можно запросить только 1. Это текущее ограничение Hami, и в будущих версиях оно будет улучшено.
    • На MIG nodes не требуется выполнять никаких действий — всем управляет mig-parted в hami-device-plugin.
    • Устройства NVIDIA, более старые, чем архитектура Ampere, не поддерживают режим MIG.
    • Ресурсы MIG (например: nvidia.com/mig-1g.10gb) не будут видны на node. HAMi использует единое имя ресурса и для MIG nodes, и для hami-core nodes.
    • Компонент DCGM-exporter, развернутый на MIG nodes, необходимо остановить при выполнении partitioning MIG, поскольку partitioning MIG требует сброса GPU. После создания первой workload с включенным MIG выполняется автоматический partitioning MIG. Последующие workload не будут запускать дополнительный partitioning. Когда все workload остановятся, запуск первой workload снова вызовет partitioning MIG.