GPU Operator пайдалану
Cloud Containers машиналық оқытуды орындау немесе үлкен деректерді өңдеу үшін GPU (графикалық процессорлары) бар кластерлерді жасауға мүмкіндік береді.
GPU кластерде келесі тәсілдермен пайдаланылуы мүмкін:
- Бір pod бір немесе бірнеше GPU пайдаланады. Бұл жағдайда әрбір пайдаланылған GPU бір уақытта бір процесті орындайды.
- GPU ресурстары бірнеше pod арасында MPS стратегиясы бойынша бөлінеді. Әрбір процесс GPU ресурстарының бөлінген жиынтығын алады және олар бір-бірімен процестер арасындағы өзара әрекеттесу (IPC) арқылы әрекеттеседі.
- GPU ресурстары бірнеше pod арасында MIG стратегиясы бойынша бөлінеді. Бұл ретте әрбір бөлік өз ресурстарына (жадына, есептеу блоктарына) ие болады және басқаларынан оқшау жұмыс істей алады.
Мақалада GPU түйіні бар кластерді қалай жасау және оның жұмысын тексеру, MPS немесе MIG технологиялары бойынша GPU пайдалануды жекелеген pod-тар арасында қалай бөлу және бөлудің бір нұсқасынан екіншісіне қалай ауысу көрсетілген.
-
Cloud GPU сервисін қосыңыз, егер ол әлі қосылмаған болса.
-
GPU бар кластер жасаңыз, егер ол әлі жасалмаған болса. Келесі параметрлерді көрсетіңіз:
- Интернетке қолжетімділігі бар желіні таңдаңыз.
- Сыртқы IP тағайындау опциясын қосулы күйде қалдырыңыз.
- Worker түйіні үшін Node-түйіндерінің түрі параметрінде GPU бар шаблонды таңдаңыз.
- Node-түйіндерінің саны параметрінде
1мәнін қалдырыңыз. - Қалған параметрлерді өз таңдауыңыз бойынша көрсетіңіз немесе әдепкі мәндерді қалдырыңыз.
Бұдан әрі мысал ретінде GPU бар шаблондағы
my-kubernetes-cluster-gpu-group-0түйініменmy-kubernetes-clusterкластері жасалады. Басқа атауларды пайдалансаңыз, командаларда тиісті ауыстыруларды жасаңыз.
Орнату жөніндегі нұсқаулықты пайдаланыңыз.
GPU түйінінің жұмысын тексеру үшін екі векторды қосатын CUDA үлгісі іске қосылады.
-
cuda-vectoradd.yamlфайлын жасаңыз және оған келесі мазмұнды қосыңыз:apiVersion: v1kind: Podmetadata:name: cuda-vectoraddspec:restartPolicy: OnFailurecontainers:- name: cuda-vectoraddimage: "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 ресми құжаттамасында. -
Файлды кластерге жүктеп, pod-ты іске қосыңыз:
kubectl apply -f cuda-vectoradd.yamlЖауап мысалы:
pod/cuda-vectoradd createdPod іске қосылады,
vectoraddкомандасын орындайды да, кейін жұмысын аяқтайды. -
Келесі команданы орындап, контейнер логтарын қараңыз:
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 -
Тоқтатылған pod-ты жойыңыз:
kubectl delete -f cuda-vectoradd.yamlЖауап мысалы:
pod "cuda-vectoradd" deleted
-
NVIDIA device plugin конфигурациясын GPU Operator аддонының кодының ішіне қосыңыз:
config:name: device-plugin-configcreate: truedefault: "default"data:default: |-version: v1flags:migStrategy: nonemig-single: |-version: v1flags:migStrategy: singlemig-mixed: |-version: v1flags:migStrategy: mixedmps-on: |-version: v1flags:migStrategy: nonesharing:mps:renameByDefault: falseresources:- name: nvidia.com/gpureplicas: 4Мұнда:
default— GPU-ді бөліктерге бөлмей пайдалану режимі. Әдепкі бойынша пайдаланылады.mps-on— GPU-ді MPS технологиясы бойынша бөліктерге бөліп пайдалану режимі.replicas—mps-onрежимі қосылған кезде GPU бөлінетін бөліктер саны.
-
Түйіндегі GPU бөлінбегеніне көз жеткізіңіз:
kubectl describe node my-kubernetes-cluster-gpu-group-0Жауаптың бір бөлігінің мысалы:
Capacity:cpu: 8ephemeral-storage: 19650540Kihugepages-1Gi: 0hugepages-2Mi: 0memory: 32604248Kinvidia.com/gpu: 1pods: 110Мұнда
nvidia.com/gpu: 1параметрі GPU бөлінбегенін көрсетеді. -
Аддон конфигурациясына қосылған
mps-onрежимін қосатын GPU бар түйін үшін метканы (label) қосыңыз:kubectl label node my-kubernetes-cluster-gpu-group-0 nvidia.com/device-plugin.config=mps-on -
Баптаулар қолданылғанша бірнеше минут күтіңіз, содан кейін оларды тексеріңіз:
kubectl describe node my-kubernetes-cluster-gpu-group-0Жауаптың бір бөлігінің мысалы:
Capacity:cpu: 8ephemeral-storage: 19650540Kihugepages-1Gi: 0hugepages-2Mi: 0memory: 32604248Kinvidia.com/gpu: 4pods: 110Мұнда
nvidia.com/gpu: 4параметрі GPU 4 бөлікке бөлінгенін көрсетеді.
-
GPU-ді MPS технологиясы бойынша бөліктерге бөлуді болдырмайтын GPU бар түйін үшін метканы (label) қосыңыз:
kubectl label node my-kubernetes-cluster-gpu-group-0 nvidia.com/device-plugin.config=default --overwriteMPS пен MIG-ті бір уақытта пайдалану мүмкін емес.
-
Түйіндегі GPU бөлінбегеніне көз жеткізіңіз:
kubectl describe node my-kubernetes-cluster-gpu-group-0Жауаптың бір бөлігінің мысалы:
Capacity:cpu: 8ephemeral-storage: 19650540Kihugepages-1Gi: 0hugepages-2Mi: 0memory: 32604248Kinvidia.com/gpu: 1pods: 110Мұнда
nvidia.com/gpu: 1параметрі GPU бөлінбегенін көрсетеді. -
GPU бөліктерін бөлу нұсқалары сипатталған MIG технологиясы бойынша ConfigMap алыңыз:
kubectl get configmaps default-mig-parted-config -o yamlСіздің GPU үшін қолжетімді және міндеттеріңізге сай келетін конфигурацияны таңдаңыз.
Бұл мысалда
all-1g.10gbконфигурациясы пайдаланылады, ол мысалдағы кластер GPU-сін 10 ГБ болатын 7 бірдей бөлікке бөледі.GPU-ді бөліктерге бөлу нұсқалары туралы толығырақ NVIDIA ресми құжаттамасында.
-
GPU бар түйін үшін метканы (label) қосыңыз:
kubectl label nodes my-kubernetes-cluster-gpu-group-0 nvidia.com/mig.config=all-1g.10gb --overwriteМұнда
all-1g.10gb— ConfigMap ішінен таңдалған конфигурация атауы. -
Таңдалған конфигурацияның қолданылғанын тексеріңіз:
kubectl describe node my-kubernetes-cluster-gpu-group-0Жауаптың бір бөлігінің мысалы:
Capacity:cpu: 8ephemeral-storage: 19650540Kihugepages-1Gi: 0hugepages-2Mi: 0memory: 32604248Kinvidia.com/gpu: 7pods: 110Мұнда
nvidia.com/gpu: 7параметрі GPU 7 бөлікке бөлінгенін көрсетеді. -
(Опционалды түрде) GPU-ді бөліктерге бөлуді болдырмау үшін
all-disabledконфигурациясын қолданыңыз:kubectl label nodes my-kubernetes-cluster-gpu-group-0 nvidia.com/mig.config=all-disabled --overwrite
Жұмыс істеп тұрған кластер тарификацияланады және есептеу ресурстарын тұтынады. Егер сіз кластерді тестілеу мақсатында жасап, ол енді қажет болмаса:
- тоқтатыңыз оны кейінірек пайдалану үшін;
- жойыңыз оны біржола.