Nova AI. Пользовательские сценарии
1. MIG
MIG (Multi-Instance GPU) позволяет аппаратно разделить один физический графический процессор (GPU) на несколько изолированных экземпляров с гарантированными ресурсами памяти и вычислительной мощности. Этот подход позволяет одновременно запускать несколько моделей или сервисов на одном ускорителе.
Для H100 доступно несколько профилей. В качестве примера в данной статье рассмотрен профиль all-3g.40gb (2 GPU-юнита, 40 ГБ памяти на каждый экземпляр MIG).
-
Настройте конфигурацию MIG в GPU Operator. Отредактируйте ConfigMap
mig.configв namespacenova-nvidia-gpu-operator, добавив следующий блок в полеdataфайла config.yaml:all-3g.40gb: - devices: all mig-enabled: true mig-devices: "3g.40gb": 2 -
Откройте Nova Console. В меню выберите Узлы кластера → Nodes.
-
Перейдите на целевой узел с H100 и откройте раздел YAML.
-
Установите метку
nvidia.com/mig.config: all-3g.40gb. Сохраните изменения и подождите 1-2 минуты. -
Откройте раздел Терминал и введите в консоли команду:
chroot /host nvidia-smiВ результате выполнения команды отобразится информация о видеокарте: существующие профили MIG, текущая загрузка и запущенные процессы.
-
Проверьте значение аннотации у целевого узла H100. Значение
nvidia.com/gpu.replicasдолжно быть равно 2. -
Если вы хотите выключить ранее примененное разделение GPU, то необходимо установить значение метки
nvidia.com/mig.configна этом узле наall-disabled. Подождите несколько минут, пока изменения вступят в силу.
Для более детальной настройки MIG обратитесь к официальной документации.
2. Time-Slicing
Time-Slicing — это технология, которая позволяет нескольким процессам использовать один графический процессор (GPU) посредством быстрого переключения контекстов между ними. Каждому процессу отводится фиксированный квант времени, который распределяется между процессами по циклическому алгоритму. Память графического процессора при этом остается общей для всех процессов.
-
Настройте конфигурацию Time-Slicing в GPU Operator. Отредактируйте ConfigMap
time-slicing-configв namespacenova-nvidia-gpu-operator, добавив следующий блок в полеdataфайла config.yaml:h100-80gb: |- version: v1 flags: migStrategy: none sharing: timeSlicing: resources: - name: nvidia.com/gpu replicas: 2 -
Откройте Nova Console. В меню выберите Узлы кластера → Nodes.
-
Перейдите на целевой узел с H100 и откройте раздел YAML.
-
Установите метку
nvidia.com/device-plugin.config: h100-80gb. Сохраните изменения и подождите 1-2 минуты. -
Проверьте значение аннотации у целевого узла с H100. Значение
nvidia.com/gpu.replicasдолжно быть равно 2. -
Если вы хотите выключить ранее примененное разделение GPU, то необходимо установить значение метки
nvidia.com/device-plugin.configна этом узле наdefault. Подождите несколько минут, пока изменения вступят в силу.
Для более детальной настройки Time-Slicing обратитесь к официальной документации.
3. MPS
MPS (Multi-Process Service) — механизм совместного использования GPU, позволяющий нескольким процессам одновременно использовать один ускоритель за счет общего CUDA-контекста. Этот подход обеспечивает лучшую изоляцию памяти по сравнению с Time-Slicing, но не дает такой строгой изоляции ресурсов, как MIG.
-
В режиме MPS количество одновременных реплик GPU ограничено 48. Отредактируйте ConfigMap
time-slicing-configв namespacenova-nvidia-gpu-operator, добавив следующий блок в полеdataфайла config.yaml:2-slices-mps-config: |- version: v1 flags: migStrategy: none sharing: mps: renameByDefault: false resources: - name: nvidia.com/gpu replicas: 2 -
Откройте Nova Console. В меню выберите Узлы кластера → Nodes.
-
Перейдите на целевой узел с H100 и откройте раздел YAML.
-
Установите метку
nvidia.com/device-plugin.config: 2-slices-mps-config. Сохраните изменения и подождите 1-2 минуты. В namespacenova-nvidia-gpu-operatorбудет создан под.nvidia-device-plugin-mps-control-daemon, который размещается на целевом узле. -
Проверьте значение аннотации у целевого узла с H100. Значение
nvidia.com/gpu.replicasдолжно быть равно 2. -
Если вы хотите выключить ранее примененное разделение GPU, то необходимо установить значение метки
nvidia.com/device-plugin.configна этом узле наdefault. Подождите несколько минут, пока изменения вступят в силу.
Для более детальной настройки MPS обратитесь к официальной документации.
4. Пример запуска модели через KServe
В качестве примера для быстрого запуска модели через KServe используйте следующий манифест InferenceService:
apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
name: qwen25-32b
namespace: nova-ml-kserve
spec:
predictor:
model:
modelFormat:
name: huggingface
storageUri: <URL_модели>
args:
- "--model_name=qwen25-32b"
resources:
requests:
cpu: "4"
memory: 24Gi
nvidia.com/gpu: "1"
limits:
cpu: "8"
memory: 26Gi
nvidia.com/gpu: "1"
Для более детальной настройки обратитесь к официальной документации KServe.
5. Пример запуска модели через KubeRay
В качестве примера для быстрого запуска модели через KubeRay с использованием библиотеки Ray Serve используйте следующий манифест KubeRay:
apiVersion: ray.io/v1
kind: RayService
metadata:
name: qwen
namespace: nova-ml-kuberay
spec:
rayClusterConfig:
headGroupSpec:
rayStartParams:
dashboard-host: 0.0.0.0
include-dashboard: 'true'
num-cpus: '2'
num-gpus: '0'
template:
spec:
containers:
- image: 'rayproject/ray-llm:2.52.0-py311-cu128'
name: ray-head
ports:
- containerPort: 8000
name: serve
protocol: TCP
- containerPort: 8080
name: metrics
protocol: TCP
- containerPort: 6379
name: gcs
protocol: TCP
- containerPort: 8265
name: dashboard
protocol: TCP
- containerPort: 10001
name: client
protocol: TCP
resources:
limits:
cpu: '2'
memory: 5Gi
requests:
cpu: '2'
memory: 4Gi
rayVersion: 2.52.0
workerGroupSpecs:
- groupName: gpu-group
maxReplicas: 1
minReplicas: 1
numOfHosts: 1
rayStartParams:
num-cpus: '4'
num-gpus: '1'
replicas: 1
template:
spec:
containers:
- env:
- name: HUGGING_FACE_HUB_TOKEN
valueFrom:
secretKeyRef:
key: hf_token
name: hf-token
image: 'rayproject/ray-llm:2.52.0-py311-cu128'
name: ray-worker
resources:
limits:
cpu: '8'
memory: 16Gi
nvidia.com/gpu: '1'
requests:
cpu: '4'
memory: 8Gi
nvidia.com/gpu: '1'
serveConfigV2: |
applications:
- name: llms
import_path: ray.serve.llm:build_openai_app
route_prefix: "/"
args:
llm_configs:
- model_loading_config:
model_id: <id_модели>
model_source: <название_модели>
engine_kwargs:
dtype: bfloat16
max_model_len: 1024
gpu_memory_utilization: 0.45
deployment_config:
autoscaling_config:
min_replicas: 1
max_replicas: 4
target_ongoing_requests: 64
max_ongoing_requests: 128
Для более детальной настройки обратитесь к официальной документации Ray Serve.