Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Nova AI. Пользовательские сценарии

1. MIG

MIG (Multi-Instance GPU) позволяет аппаратно разделить один физический графический процессор (GPU) на несколько изолированных экземпляров с гарантированными ресурсами памяти и вычислительной мощности. Этот подход позволяет одновременно запускать несколько моделей или сервисов на одном ускорителе.

Для H100 доступно несколько профилей. В качестве примера в данной статье рассмотрен профиль all-3g.40gb (2 GPU-юнита, 40 ГБ памяти на каждый экземпляр MIG).

  1. Настройте конфигурацию MIG в GPU Operator. Отредактируйте ConfigMap mig.config в namespace nova-nvidia-gpu-operator, добавив следующий блок в поле data файла config.yaml:

      all-3g.40gb:
        - devices: all
          mig-enabled: true
          mig-devices:
            "3g.40gb": 2
  2. Откройте Nova Console. В меню выберите Узлы кластераNodes.

  3. Перейдите на целевой узел с H100 и откройте раздел YAML.

  4. Установите метку nvidia.com/mig.config: all-3g.40gb. Сохраните изменения и подождите 1-2 минуты.

  5. Откройте раздел Терминал и введите в консоли команду:

    chroot /host
    nvidia-smi

    В результате выполнения команды отобразится информация о видеокарте: существующие профили MIG, текущая загрузка и запущенные процессы.

    ai scenario 1
  6. Проверьте значение аннотации у целевого узла H100. Значение nvidia.com/gpu.replicas должно быть равно 2.

  7. Если вы хотите выключить ранее примененное разделение GPU, то необходимо установить значение метки nvidia.com/mig.config на этом узле на all-disabled. Подождите несколько минут, пока изменения вступят в силу.

Для более детальной настройки MIG обратитесь к официальной документации.

2. Time-Slicing

Time-Slicing — это технология, которая позволяет нескольким процессам использовать один графический процессор (GPU) посредством быстрого переключения контекстов между ними. Каждому процессу отводится фиксированный квант времени, который распределяется между процессами по циклическому алгоритму. Память графического процессора при этом остается общей для всех процессов.

  1. Настройте конфигурацию Time-Slicing в GPU Operator. Отредактируйте ConfigMap time-slicing-config в namespace nova-nvidia-gpu-operator, добавив следующий блок в поле data файла config.yaml:

      h100-80gb: |-
        version: v1
        flags:
          migStrategy: none
        sharing:
          timeSlicing:
            resources:
            - name: nvidia.com/gpu
              replicas: 2
  2. Откройте Nova Console. В меню выберите Узлы кластераNodes.

  3. Перейдите на целевой узел с H100 и откройте раздел YAML.

  4. Установите метку nvidia.com/device-plugin.config: h100-80gb. Сохраните изменения и подождите 1-2 минуты.

  5. Проверьте значение аннотации у целевого узла с H100. Значение nvidia.com/gpu.replicas должно быть равно 2.

  6. Если вы хотите выключить ранее примененное разделение GPU, то необходимо установить значение метки nvidia.com/device-plugin.config на этом узле на default. Подождите несколько минут, пока изменения вступят в силу.

Для более детальной настройки Time-Slicing обратитесь к официальной документации.

3. MPS

MPS (Multi-Process Service) — механизм совместного использования GPU, позволяющий нескольким процессам одновременно использовать один ускоритель за счет общего CUDA-контекста. Этот подход обеспечивает лучшую изоляцию памяти по сравнению с Time-Slicing, но не дает такой строгой изоляции ресурсов, как MIG.

  1. В режиме MPS количество одновременных реплик GPU ограничено 48. Отредактируйте ConfigMap time-slicing-config в namespace nova-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
  2. Откройте Nova Console. В меню выберите Узлы кластераNodes.

  3. Перейдите на целевой узел с H100 и откройте раздел YAML.

  4. Установите метку nvidia.com/device-plugin.config: 2-slices-mps-config. Сохраните изменения и подождите 1-2 минуты. В namespace nova-nvidia-gpu-operator будет создан под. nvidia-device-plugin-mps-control-daemon, который размещается на целевом узле.

  5. Проверьте значение аннотации у целевого узла с H100. Значение nvidia.com/gpu.replicas должно быть равно 2.

  6. Если вы хотите выключить ранее примененное разделение 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.