VK Cloud logo

Cloud Containers сервисінде GPU ресурстарын басқару

GPU Operator пайдалану

Cloud Containers машиналық оқытуды орындау немесе үлкен деректерді өңдеу үшін GPU (графикалық процессорлары) бар кластерлерді жасауға мүмкіндік береді.

GPU кластерде келесі тәсілдермен пайдаланылуы мүмкін:

  • Бір pod бір немесе бірнеше GPU пайдаланады. Бұл жағдайда әрбір пайдаланылған GPU бір уақытта бір процесті орындайды.
  • GPU ресурстары бірнеше pod арасында MPS стратегиясы бойынша бөлінеді. Әрбір процесс GPU ресурстарының бөлінген жиынтығын алады және олар бір-бірімен процестер арасындағы өзара әрекеттесу (IPC) арқылы әрекеттеседі.
  • GPU ресурстары бірнеше pod арасында MIG стратегиясы бойынша бөлінеді. Бұл ретте әрбір бөлік өз ресурстарына (жадына, есептеу блоктарына) ие болады және басқаларынан оқшау жұмыс істей алады.

Мақалада GPU түйіні бар кластерді қалай жасау және оның жұмысын тексеру, MPS немесе MIG технологиялары бойынша GPU пайдалануды жекелеген pod-тар арасында қалай бөлу және бөлудің бір нұсқасынан екіншісіне қалай ауысу көрсетілген.

Дайындық қадамдары

  1. Cloud GPU сервисін қосыңыз, егер ол әлі қосылмаған болса.

  2. GPU бар кластер жасаңыз, егер ол әлі жасалмаған болса. Келесі параметрлерді көрсетіңіз:

    • Интернетке қолжетімділігі бар желіні таңдаңыз.
    • Сыртқы IP тағайындау опциясын қосулы күйде қалдырыңыз.
    • Worker түйіні үшін Node-түйіндерінің түрі параметрінде GPU бар шаблонды таңдаңыз.
    • Node-түйіндерінің саны параметрінде 1 мәнін қалдырыңыз.
    • Қалған параметрлерді өз таңдауыңыз бойынша көрсетіңіз немесе әдепкі мәндерді қалдырыңыз.

    Бұдан әрі мысал ретінде GPU бар шаблондағы my-kubernetes-cluster-gpu-group-0 түйінімен my-kubernetes-cluster кластері жасалады. Басқа атауларды пайдалансаңыз, командаларда тиісті ауыстыруларды жасаңыз.

  3. Кластерге kubectl арқылы қосылыңыз.

1. GPU-operator аддонын орнатыңыз

Орнату жөніндегі нұсқаулықты пайдаланыңыз.

2. Кластердің жұмысын тексеріңіз

GPU түйінінің жұмысын тексеру үшін екі векторды қосатын CUDA үлгісі іске қосылады.

  1. cuda-vectoradd.yaml файлын жасаңыз және оған келесі мазмұнды қосыңыз:

    apiVersion: v1kind: Podmetadata:   name: cuda-vectoraddspec:   restartPolicy: OnFailure   containers:   - name: cuda-vectoradd     image: "nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda11.7.1-ubuntu20.04"     resources:       limits:         nvidia.com/gpu: 1

    Мұнда nvidia.com/gpu: 1 параметрі тиісті вендордан (бұл жағдайда — nvidia.com) сұралатын GPU ресурстарының санын көрсетеді. Ресурстар мен лимиттер туралы толығырақ Kubernetes ресми құжаттамасында.

  2. Файлды кластерге жүктеп, pod-ты іске қосыңыз:

    kubectl apply -f cuda-vectoradd.yaml

    Жауап мысалы:

    pod/cuda-vectoradd created

    Pod іске қосылады, vectoradd командасын орындайды да, кейін жұмысын аяқтайды.

  3. Келесі команданы орындап, контейнер логтарын қараңыз:

    kubectl logs pod/cuda-vectoradd

    Жауап мысалы:

    [Vector addition of 50000 elements]Copy input data from the host memory to the CUDA deviceCUDA kernel launch with 196 blocks of 256 threadsCopy output data from the CUDA device to the host memoryTest PASSEDDone
  4. Тоқтатылған pod-ты жойыңыз:

    kubectl delete -f cuda-vectoradd.yaml

    Жауап мысалы:

    pod "cuda-vectoradd" deleted

3. GPU-ді MPS технологиясы бойынша бөліңіз

  1. NVIDIA device plugin конфигурациясын GPU Operator аддонының кодының ішіне қосыңыз:

    config:     name: device-plugin-config     create: true     default: "default"     data:       default: |-         version: v1         flags:           migStrategy: none       mig-single: |-         version: v1         flags:           migStrategy: single       mig-mixed: |-         version: v1         flags:           migStrategy: mixed       mps-on: |-         version: v1         flags:           migStrategy: none         sharing:           mps:             renameByDefault: false             resources:             - name: nvidia.com/gpu               replicas: 4

    Мұнда:

    • default — GPU-ді бөліктерге бөлмей пайдалану режимі. Әдепкі бойынша пайдаланылады.
    • mps-on — GPU-ді MPS технологиясы бойынша бөліктерге бөліп пайдалану режимі.
    • replicasmps-on режимі қосылған кезде GPU бөлінетін бөліктер саны.
  2. Түйіндегі GPU бөлінбегеніне көз жеткізіңіз:

    kubectl describe node my-kubernetes-cluster-gpu-group-0

    Жауаптың бір бөлігінің мысалы:

    Capacity:  cpu:                8  ephemeral-storage:  19650540Ki  hugepages-1Gi:      0  hugepages-2Mi:      0  memory:             32604248Ki  nvidia.com/gpu:     1  pods:               110

    Мұнда nvidia.com/gpu: 1 параметрі GPU бөлінбегенін көрсетеді.

  3. Аддон конфигурациясына қосылған mps-on режимін қосатын GPU бар түйін үшін метканы (label) қосыңыз:

    kubectl label node my-kubernetes-cluster-gpu-group-0 nvidia.com/device-plugin.config=mps-on
  4. Баптаулар қолданылғанша бірнеше минут күтіңіз, содан кейін оларды тексеріңіз:

    kubectl describe node my-kubernetes-cluster-gpu-group-0

    Жауаптың бір бөлігінің мысалы:

    Capacity:  cpu:                8  ephemeral-storage:  19650540Ki  hugepages-1Gi:      0  hugepages-2Mi:      0  memory:             32604248Ki  nvidia.com/gpu:     4  pods:               110

    Мұнда nvidia.com/gpu: 4 параметрі GPU 4 бөлікке бөлінгенін көрсетеді.

4. GPU-ді MIG технологиясы бойынша бөліңіз

  1. GPU-ді MPS технологиясы бойынша бөліктерге бөлуді болдырмайтын GPU бар түйін үшін метканы (label) қосыңыз:

    kubectl label node my-kubernetes-cluster-gpu-group-0 nvidia.com/device-plugin.config=default --overwrite

    MPS пен MIG-ті бір уақытта пайдалану мүмкін емес.

  2. Түйіндегі GPU бөлінбегеніне көз жеткізіңіз:

    kubectl describe node my-kubernetes-cluster-gpu-group-0

    Жауаптың бір бөлігінің мысалы:

    Capacity:  cpu:                8  ephemeral-storage:  19650540Ki  hugepages-1Gi:      0  hugepages-2Mi:      0  memory:             32604248Ki  nvidia.com/gpu:     1  pods:               110

    Мұнда nvidia.com/gpu: 1 параметрі GPU бөлінбегенін көрсетеді.

  3. GPU бөліктерін бөлу нұсқалары сипатталған MIG технологиясы бойынша ConfigMap алыңыз:

    kubectl get configmaps default-mig-parted-config -o yaml

    Сіздің GPU үшін қолжетімді және міндеттеріңізге сай келетін конфигурацияны таңдаңыз.

    Бұл мысалда all-1g.10gb конфигурациясы пайдаланылады, ол мысалдағы кластер GPU-сін 10 ГБ болатын 7 бірдей бөлікке бөледі.

    GPU-ді бөліктерге бөлу нұсқалары туралы толығырақ NVIDIA ресми құжаттамасында.

  4. GPU бар түйін үшін метканы (label) қосыңыз:

    kubectl label nodes my-kubernetes-cluster-gpu-group-0 nvidia.com/mig.config=all-1g.10gb --overwrite

    Мұнда all-1g.10gb — ConfigMap ішінен таңдалған конфигурация атауы.

  5. Таңдалған конфигурацияның қолданылғанын тексеріңіз:

    kubectl describe node my-kubernetes-cluster-gpu-group-0

    Жауаптың бір бөлігінің мысалы:

    Capacity:  cpu:                8  ephemeral-storage:  19650540Ki  hugepages-1Gi:      0  hugepages-2Mi:      0  memory:             32604248Ki  nvidia.com/gpu:     7  pods:               110

    Мұнда nvidia.com/gpu: 7 параметрі GPU 7 бөлікке бөлінгенін көрсетеді.

  6. (Опционалды түрде) GPU-ді бөліктерге бөлуді болдырмау үшін all-disabled конфигурациясын қолданыңыз:

    kubectl label nodes my-kubernetes-cluster-gpu-group-0 nvidia.com/mig.config=all-disabled --overwrite

Қолданылмайтын ресурстарды жойыңыз

Жұмыс істеп тұрған кластер тарификацияланады және есептеу ресурстарын тұтынады. Егер сіз кластерді тестілеу мақсатында жасап, ол енді қажет болмаса: