NVIDIA Green Contexts у CUDA 13.1 ізолюють SM і знижують затримки у 20 разів
NVIDIA додала підтримку Green Contexts у CUDA 13.1 Runtime API, дозволяючи програмам виділяти потокові мультипроцесори (SM) і черги завдань в одному процесі. На архітектурі Blackwell ізоляція ресурсів для критичних кернелів зменшила затримку з 0.140 мс до 0.007 мс.

Чому це важливо
Тепер можна запускати фоновий пакетний інференс чи препроцесинг паралельно з чутливими до затримок кернелами, уникаючи блокування пріоритетних запитів.
TL;DR
- 01Green Contexts з'явилися в CUDA 13.1 Runtime API для апаратного розділення SM в межах процесу.
- 02Запобігають затримкам критичних завдань інференсу через блокування фоновими пакетними задачами.
- 03Скорочують час очікування кернела з 0.140 мс до 0.007 мс на архітектурі Blackwell.
Ключові факти
- Підтримка у Runtime API
- CUDA 13.1 (у Driver API з CUDA 12.4)
- Зниження затримки кернела
- З 0.140 мс до 0.007 мс на Blackwell (за даними вендора)
- Тестова конфігурація
- NVIDIA Blackwell GPU зі 148 SM
Проблема хвостових затримок на спільному GPU
Сучасні сервери інференсу часто поєднують різні типи обчислень: попередню обробку даних поруч із прогоном моделі або комунікаційні операції поруч із матричним множенням (GEMM). Пріоритети стрімів у CUDA визначають порядок у черзі, але не можуть витіснити блоки, які вже зайняли ресурси SM. Якщо фонова задача забиває весь чип, пріоритетний кернел зависає в очікуванні вільних блоків.
Явне розділення ресурсів у CUDA 13.1
Якщо в CUDA 12.4 функціонал існував тільки у низькорівневому Driver API, то версія CUDA 13.1 переносить Green Contexts безпосередньо в Runtime API за допомогою викликів cudaGreenCtxCreate() та cudaExecutionCtxStreamCreate(). Програми отримують повний контроль:
- Партиціювання SM: Виділяє точну кількість обчислювальних блоків під окремий контекст, гарантуючи ізоляцію від фонового навантаження.
- Ізоляція черг завдань: Надає незалежні апаратні черги через
cudaDevResourceTypeWorkqueueConfig, що прибирає випадкову серіалізацію між паралельними стрімами.
Тести на відеокарті Blackwell із 148 SM показали падіння часу очікування критичного кернела з 0.140 мс до 0.007 мс за умов одночасного запуску фонових пакетних задач.
Спробуй за 2 хвилини
cudaGreenCtxCreate(&greenCtx, desc, device, 0);
cudaExecutionCtxStreamCreate(&s, greenCtx, 0, 0);cpp
✓ Коли використовувати
- Сервери інференсу, де паралельно виконується відповідь користувачам і важка фонова обробка даних.
- Поєднання комунікаційних операцій та матричних обчислень у розподілених кластерах.
✕ Коли НЕ варто
- Прості однозадачні застосунки, які виконують обчислення послідовно на всьому GPU.
- Старі системи на версіях CUDA нижче 13.1 без доступу до низькорівневого Driver API.
Що зробити сьогодні
- Оновіть локальні інструменти розробки до CUDA Toolkit 13.1 або новішої версії.
- Замініть створення стрімів на зв'язку cudaGreenCtxCreate та cudaExecutionCtxStreamCreate.
- Ізолюйте черги інференсу в реальному часі від фонової пакетної обробки даних.