Skip to content

Latest commit

 

History

History
84 lines (69 loc) · 6.09 KB

File metadata and controls

84 lines (69 loc) · 6.09 KB

Плагин Time-Slicing GPUs в Kubernetes

Введение

NVIDIA GPU Operator позволяет чередовать рабочие нагрузки на GPU с избыточной подпиской с помощью набора расширенных опций для NVIDIA Kubernetes Device Plugin. Внутри системы используется механизм шеринга GPU — Time-Slicing, который позволяет нагрузкам, работающим на GPU с избыточной подпиской, выполняться параллельно. В этой статье рассматриваются способы активации этой функции в Managed Service for Kubernetes с использованием GPU Operator.

Этот механизм тайм-шеринга GPU в Kubernetes позволяет системному администратору определить набор реплик для GPU, которые могут быть назначены отдельным подам для выполнения рабочих нагрузок. В отличие от MIG (Multi-Instance GPU) между репликами отсутствует изоляция памяти и защита от сбоев, однако для некоторых рабочих нагрузок это может быть более эффективным решением, чем отсутствие возможности разделения вовсе. Шеринг GPU с помощью Time-Slicing используется для мультиплексирования задач с разных реплик одного и того же базового GPU.

Подробнее см. в официальной документации.

Начало работы

Добавьте группу узлов с GPU NVIDIA T4.

Передайте конфигурацию Time-Slicing для NVIDIA Kubernetes Device Plugin через ConfigMap:

kubectl create -f time-slicing-config.yaml

Установите GPU Operator:

helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
   && helm repo update \
   && helm install gpu-operator nvidia/gpu-operator \
     -n gpu-operator \
     --set devicePlugin.config.name=time-slicing-config

Конфигурацию Time-Slicing можно применить как на уровне кластера, так и на уровне узла. По умолчанию GPU Operator не применяет конфигурацию Time-Slicing к узлам GPU в кластере. Значение по умолчанию можно использовать с параметром devicePlugin.config.default=<config-name> для каждой ClusterPolicy:

kubectl patch clusterpolicies.nvidia.com/cluster-policy \
   -n gpu-operator --type merge \
   -p '{"spec": {"devicePlugin": {"config": {"name": "time-slicing-config", "default": "tesla-t4"}}}}'

Или (для отдельных узлов с меткой узла):

yc managed-kubernetes node-group add-labels <NODE-GROUP-NAME>|<NODE-GROUP-ID> --labels nvidia.com/device-plugin.config=tesla-t4

Тестирование функции Time-Slicing GPU с помощью NVIDIA GPU Operator

Выполните развертывание с несколькими репликами:

kubectl apply -f nvidia-plugin-test.yml

Убедитесь, что все 5 реплик работают:

kubectl get pods

Выполните проверку через nvidia-smi:

kubectl exec <nvidia-container-toolkit-name> -n gpu-operator -- nvidia-smi

Ожидаемый результат:


Defaulted container "nvidia-container-toolkit-ctr" out of: nvidia-container-toolkit-ctr, driver-validation (init)
Thu Jan 26 09:42:51 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.65.01    Driver Version: 515.65.01    CUDA Version: N/A      |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:8B:00.0 Off |                    0 |
| N/A   72C    P0    70W /  70W |   1579MiB / 15360MiB |    100%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A     43108      C   /usr/bin/dcgmproftester11         315MiB |
|    0   N/A  N/A     43211      C   /usr/bin/dcgmproftester11         315MiB |
|    0   N/A  N/A     44583      C   /usr/bin/dcgmproftester11         315MiB |
|    0   N/A  N/A     44589      C   /usr/bin/dcgmproftester11         315MiB |
|    0   N/A  N/A     44595      C   /usr/bin/dcgmproftester11         315MiB |
+-----------------------------------------------------------------------------+