Проблема неэффективного использования GPU
Многие AI-нагрузки требуют лишь части вычислительных ресурсов графического процессора. Выделение целого GPU для таких задач приводит к простаиванию мощностей. NVIDIA решает эту проблему через интеграцию новых функций CUDA 13.4 с инструментами оркестрации, позволяя безопасно разделять ресурсы без потери производительности.
Ключевые возможности CUDA 13.4
Версия CUDA 13.4 вводит принудительное ограничение памяти (memory boundary enforcement), которое прозрачно для приложений. Это позволяет задавать точные объемы памяти, гарантированные минимумы и максимальные пределы с возможностью «всплеска» (bursting) при наличии свободных ресурсов. Поддерживаются два режима вычислений:
- Time-slicing (по умолчанию): Рабочие нагрузки используют GPU по очереди. Обеспечивается полная изоляция ошибок.
- SM-sharing: Потоковые мультипроцессоры (SM) распределяются между задачами параллельно, позволяя им работать одновременно.
Роль GPU Fractioning Operator
Сама по себе CUDA не управляет Kubernetes. Для этого создан открытый оператор gpu-fractioning (в репозитории KAI Scheduler). Он работает вместе с NVIDIA GPU Operator и выполняет три задачи:
- Запускает и контролирует Multi-Process Service (MPS) на каждом узле с GPU.
- Применяет лимиты памяти и режимы вычислений к каждому контейнеру перед запуском.
- Измеряет потребление ресурсов не для целой карты, а для каждой ее доли (fraction).
Интеграция с KAI Scheduler v0.18.0
Первым планировщиком, интегрированным с этой системой, стал KAI Scheduler версии 0.18.0. Он использует режим NvFractions, который записывает аннотации в Pod, указывая требования к памяти, режим вычислений и назначенные устройства. Оператор считывает эти аннотации и применяет их на уровне узла.
Технические детали и аннотации
Администраторы могут включить поддержку через Helm-флаг --set global.nvFractions.set=true. Задачи описываются через следующие аннотации:
| Аннотация | Значение |
|---|---|
nvidia.com/container. |
Гарантированный объем GPU-памяти |
nvidia.com/container. |
Максимальный объем, в который может вырасти задача |
nvidia.com/container. |
Режим вычислений: time-slicing (по умолч.) или sm-sharing |
nvidia.com/container. |
Конкретные GPU, назначенные контейнеру |
Память можно запрашивать как в абсолютных значениях (например, «80Gi»), так и в долях от GPU (например, gpu-fraction: "0.5"). Если лимит не указан, он приравнивается к запросу, и задача жестко ограничена запрошенным объемом.
Источник: NVIDIA dev blog ↗
