Ниже примеры типичных конфигураций GPU. Для работы требуется установленный драйвер NVIDIA и NVIDIA Container Toolkit (вручную или через NodeGroupConfiguration). При наличии spec.gpu этот модуль настраивает containerd c default_runtime = "nvidia" (через NodeGroupConfiguration) и разворачивает NFD/GFD/Device Plugin/MIG/DCGM на таких узлах.

Обычно GPU-узлы помечены taint (например, node-role=gpu:NoSchedule), чтобы обычные нагрузки туда не попадали. Под, которому нужен GPU, добавляет соответствующие tolerations и nodeSelector.

Exclusive (один Pod — один GPU)

Каждому Pod выделяется целый физический GPU; в кластере появляется ресурс nvidia.com/gpu.

apiVersion: deckhouse.io/v1
kind: NodeGroup
metadata:
  name: gpu-exclusive
spec:
  nodeType: Static # или CloudStatic/CloudEphemeral при необходимости
  gpu:
    sharing: Exclusive
  nodeTemplate:
    labels:
      node-role/gpu: ""
    taints:
    - key: node-role
      value: gpu
      effect: NoSchedule

TimeSlicing (4 раздела)

До четырёх Pod могут по очереди использовать одну карту. Pod по-прежнему запрашивает nvidia.com/gpu.

spec:
  gpu:
    sharing: TimeSlicing
    timeSlicing:
      partitionCount: 4

MIG (профиль all-1g.5gb)

Аппаратное разбиение MIG-совместимого GPU; появляются ресурсы nvidia.com/mig-1g.5gb.

spec:
  gpu:
    sharing: MIG
    mig:
      partedConfig: all-1g.5gb

Для кастомного разбиения по индексам GPU используйте partedConfig: custom и customConfigs (см. FAQ).

Smoke-тест (CUDA vectoradd)

apiVersion: batch/v1
kind: Job
metadata:
  name: cuda-vectoradd
spec:
  template:
    spec:
      restartPolicy: OnFailure
      nodeSelector:
        node-role/gpu: ""
      tolerations:
      - key: node-role
        value: gpu
        effect: NoSchedule
      containers:
      - name: cuda-vectoradd
        image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda11.7.1-ubuntu20.04
        resources:
          limits:
            nvidia.com/gpu: 1

Если Pod завершился со статусом Succeeded, GPU присутствует и настроен корректно.