Разблокировка BF16 на RTX 30 ускоряет ComfyUI до 60%
Открытый модуль ядра Linux возвращает скорость выдачи FP/BF16 на картах RTX 30. На 3090 Ti ComfyUI в BF16 ускоряется до 60%, INT8 почти не меняется.
Это семейство карточек годами несёт программное ограничение: потребительские чипы GA102, GA103, GA104 и GA106 выполняют слитное умножение-сложение FP/BF16 с накоплением в FP32 вдвое медленнее, чем их профессиональные собратья на том же кремнии. gpu-unlock записывает селекторы скорости, снимающие этот потолок, до загрузки nvidia, поэтому остальная часть стека работает без изменений.
Что меняет модуль
Проект объединяет два более ранних подхода: технику V67/PLM из разблокировщика CMP и предзагрузочную по времени методику UEFI. Конкретно, до того как драйвер NVIDIA захватит карточку, модуль записывает селектор скорости SS0 0x88888888, который выбирает полную скорость BF16, и 4-битный SS1 0x8 для IMLA4, затем выполняет FLR и завершается. Это ни приложение UEFI, ни пропатченный драйвер, и именно это подчёркивает автор: нет патча, который пришлось бы повторять при каждом выпуске новой версии драйвера NVIDIA.
В README эффект описан прямо: он удваивает скорость выдачи инструкций FMA FP/BF16 с накоплением в FP32 на этих четырёх семействах чипов. Модуль ничего не делает, если в командной строке ядра нет явного включения через gpu_unlock.targets=, будь то all или список PCI-адресов, причём карточки разблокируются параллельно примерно за секунду, сколько бы их ни было.
Как выглядят цифры
Собственное эталонное измерение проекта это плотный GEMM 8192³ на RTX 3090 Ti при 450 Вт, медианы по пяти прогонам с накоплением FP32:
BF16 вырастает с 87,5 до 157,4 TFLOP/s, а TF32 с 42,6 до 82,6, то есть почти вдвое, тогда как FP16 прибавляет меньше: с 87,5 до 118,4. В README изменение описано как удвоение скорости выдачи FMA FP/BF16 с накоплением в FP32 без разбивки по типам данных, поэтому опубликованная таблица это единственное измерение такого разделения.
Отчёты пользователей о совместимости, собранные в README репозитория, охватывают остальной стек:
| Карточка | Результат | Прирост BF16 GEMM |
|---|---|---|
| RTX 3090 Ti | Разблокирована | +68–80% |
| RTX 3090 | Разблокирована | +25–67% |
| RTX 3080 10 ГБ | Разблокирована | +70–73% |
| RTX 3080 20 ГБ | Разблокирована | +56–59% |
| RTX 3070 | Разблокирована | +73–81% |
| RTX 3060 12 ГБ | Разблокирована | около +80% |
| RTX 3080 Ti 20 ГБ (OEM) | Разблокировка проходит, BF16 остаётся на половинной скорости | нет |
| RTX 3070 Ti | Не тестировалась с этим модулем | нет |
В README прямо сказано, что эти цифры взяты из собственных бенчмарков каждого отчёта и напрямую несопоставимы. Главный мешающий фактор это лимит мощности: самая низкая цифра, +25% на 3090, получена на карточке с ограничением 225 Вт.
Измерения в ComfyUI
Полезный для этого сайта тест это не GEMM, а генерация. Независимый владелец RTX 3090 Ti, u/under-_-null, прогнал одни и те же графы на стоковом и разблокированном драйверах и опубликовал медианное время на изображение или клип: до 60% быстрее на BF16-пайплайнах и почти без изменений на INT8.
| Модель и точность | Сток | Разблокировано | Прирост |
|---|---|---|---|
| MOSS-Image SFT BF16 | 71,98 с | 45,40 с | +58,6% |
| Qwen-Image 2.1 Turbo BF16 | 8,51 с | 5,41 с | +57,2% |
| Z-Image Turbo BF16 | 6,79 с | 4,35 с | +56,1% |
| Чекпойнт FLUX.1 dev FP8 | 31,96 с | 20,66 с | +54,6% |
| Krea 2 Turbo BF16 | 15,65 с | 10,70 с | +46,3% |
| MiniMax H3 BF16 (видео и аудио) | 253,27 с | 158,05 с | +60,2% |
| LTX-2.5 distilled BF16 (видео и аудио) | 70,81 с | 60,63 с | +16,8% |
| MOSS-Image SFT INT8 | 27,31 с | 27,23 с | +0,3% |
| Qwen-Image 2.1 Turbo INT8 | 3,92 с | 3,75 с | +4,6% |
| MiniMax H3 INT8 ConvRot | 155,07 с | 118,21 с | +31,2% |
Бросаются в глаза две вещи. Прирост сосредоточен в работе BF16, где скорость выдачи инструкций и важна; пути квантования INT8 почти не затронуты, поэтому пользователь, который уже работает с чекпойнтами INT8 ConvRot, получит несколько процентов, а не 60. MiniMax H3 в INT8 ConvRot это исключение с 31%, намного выше остальных строк INT8 в том же отчёте.
Точность вывода сохранилась: в том же отчёте сопоставили 150 прогонов неподвижных изображений на разблокированной и стоковой конфигурациях и обнаружили идентичные декодированные пиксели RGB. Другие отчёты о совместимости в репозитории говорят то же самое, что согласуется с изменением скорости выдачи инструкций, а не точности.
Требования и риски
Детали, которые важны до попытки, все из документации проекта:
- Только Linux. Модуль собирается против установленных заголовков ядра и ставится через mkinitcpio, initramfs-tools или dracut, с пакетными целями для Arch, Debian и Fedora.
- Включение по карточке.
gpu_unlock.targets=allразблокирует каждую несвязанную карточку GA10x; иначе перечислите PCI-адреса так, как их печатаетlspci -D. Карточки, уже инициализированные драйвером, отклоняются. - Холодная загрузка. Ручная загрузка модуля после старта ничего не даёт карточке, которую
nvidiaуже захватил. - Обработка приостановки. Селекторы скорости сбрасываются при потере питания, поэтому модуль повторно разблокирует карточку при возобновлении через уведомление о приостановке, если это не отключено через
gpu_unlock.resume=0. Гибернация не покрывается. - Карточки дисплея работают, при этом консоль остаётся погашенной с момента сброса до тех пор, пока её не перехватит
nvidia-drm. - Не каждая карточка отвечает. OEM RTX 3080 Ti 20 ГБ завершает разблокировку, но сохраняет BF16 на половинной скорости, а по GA103 отчётов пока нет.
Отдельный проект сообщества, impacifist/Windows-GPU-UNLOCK, переносит эту технику на путь UEFI для пользователей Windows. Он не является частью оригинального проекта и здесь не тестировался.
Доступность
- Модуль: Zagitta/gpu-unlock, версия 1.0.0 в репозитории, с таблицей совместимости и кодом извлечения прошивки.
- Обсуждения бенчмарков: обсуждение разблокировки RTX 30-й серии и отчёт по ComfyUI на RTX 3090 Ti.
- Порт для Windows: impacifist/Windows-GPU-UNLOCK.
Комментарии
Войдите через GitHub, чтобы участвовать в обсуждении.