Настройка Time-Slicing GPU
NVIDIA GPU Operator поддерживает возможность настройки Time-Slicing — механизма виртуального разделения одной физической GPU между несколькими подами на уровне рабочего узла.
Например, если на узле установлена одна GPU V100, а в кластере есть пять подов, каждый из которых запрашивает всю GPU, то без использования Time-Slicing на узел будет назначен только один под. Остальные останутся в статусе «Pending» из-за нехватки ресурсов. При включении Time-Slicing ресурсы одной физической GPU делятся между пятью подами.
Таким образом, все пять подов смогут быть запущены на одном узле одновременно, несмотря на то, что физически доступна только одна GPU.
В сценарии настроим Time-Slicing, развернем пять реплик приложения, которое требует для своей работы GPU-ресурсов, проверим состояние подов и логи.
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
В кластере создайте группу узлов с параметрами для GPU:
Графический процессор (GPU) — активно.
Модель GPU — GPU NVIDIA Tesla V100.
GPU — 1.
По умолчанию в Managed Kubernetes установлена нулевая квота на создание узлов с GPU. Чтобы запросить увеличение квоты, обратитесь в техническую поддержку.
Шаг 1. Настройте Time-Slicing
Создайте пространство имен gpu-operator:
kubectl create ns gpu-operatorПерезапишите метку:
kubectl label --overwrite ns gpu-operator pod-security.kubernetes.io/enforce=privilegedСоздайте файл cloudru-time-slicing.yaml со следующим содержимым:
apiVersion: v1kind: ConfigMapmetadata:name: time-slicing-confignamespace: gpu-operatordata:tesla-v100: |-version: v1sharing:timeSlicing:resources:- name: nvidia.com/gpureplicas: 5Выполните команду:
kubectl apply -f cloudru-time-slicing.yamlРезультат:
configmap/time-slicing-config createdПроверьте статус:
kubectl get cm time-slicing-config -n gpu-operatorРезультат:
NAME DATA AGEtime-slicing-config 1 114s
В дополнение к стандартным меткам, которые применяются к узлам после настройки Time-Slicing, для узла применяется метка:
nvidia.com/gpu.replicas = <replicas-count>
Здесь <replicas-count> указывает, сколько раз выделенный ресурс gpu может быть переподписан на узле.
Также по умолчанию модифицируется метка nvidia.com/gpu.product:
nvidia.com/gpu.product = <product-name>-SHARED
Суффикс -SHARED помогает отличать узлы с поддержкой Time-Slicing.
Шаг 2. Установите NVIDIA GPU Operator
В личном кабинете перейдите в кластер, для которого создали группу узлов с GPU.
Перейдите в раздел Плагины и справа над списком установленных плагинов нажмите Добавить плагин.
Выберите NVIDIA GPU Operator.
Нажмите Установить.
В разделе Расширенная конфигурация → YAML укажите параметры:
devicePlugin:config:name: time-slicing-configdefault: tesla-v100Нажмите Установить.
Дождитесь, когда состояние плагина изменится на «Установлен».
Шаг 3. Протестируйте настройку Time-Slicing
Создайте файл cloudru-time-slicing-check.yaml со следующим содержимым:
apiVersion: apps/v1kind: Deploymentmetadata:name: cloudru-time-slicing-checklabels:app: cloudru-time-slicing-checkspec:replicas: 5selector:matchLabels:app: cloudru-time-slicing-checktemplate:metadata:labels:app: cloudru-time-slicing-checkspec:tolerations:- key: nvidia.com/gpuoperator: Existseffect: NoSchedulehostPID: truecontainers:- name: cuda-sample-vector-addimage: "nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda11.7.1-ubuntu20.04"command: ["/bin/bash", "-c", "--"]args:- while true; do /cuda-samples/vectorAdd; doneresources:limits:nvidia.com/gpu: 1Выполните команду:
kubectl apply -f cloudru-time-slicing-check.yamlРезультат:
deployment.apps/cloudru-time-slicing-check createdПроверьте, что все пять реплик в статусе «Running»:
kubectl get podsПримерный результат:
NAME READY STATUS RESTARTS AGEcloudru-time-slicing-check-6dcc7495bc-6dt4k 1/1 Running 0 6m25scloudru-time-slicing-check-6dcc7495bc-7vdvw 1/1 Running 0 6m25scloudru-time-slicing-check-6dcc7495bc-g5xdr 1/1 Running 0 6m25scloudru-time-slicing-check-6dcc7495bc-txbd9 1/1 Running 0 6m25scloudru-time-slicing-check-6dcc7495bc-zxdx8 1/1 Running 0 6m25sПосмотрите логи одного из подов:
kubectl logs deploy/cloudru-time-slicing-checkПримерный результат:
Found 5 pods, using pod/cloudru-time-slicing-check-6dcc7495bc-7vdvw[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 PASSED...
- Перед началом работы
- Шаг 1. Настройте Time-Slicing
- Шаг 2. Установите NVIDIA GPU Operator
- Шаг 3. Протестируйте настройку Time-Slicing