Сборка llama.cpp с PDL для NVIDIA: прирост производительности до 30% | AiManual
AiManual Logo Ai / Manual.
21 Май 2026 Инструмент

Performance Boost: How to Build llama.cpp with PDL for NVIDIA GPUs (Build 9254)

Пошаговый гайд по сборке llama.cpp (Build 9254) с флагом PDL для NVIDIA GPU. Исправляем регрессию TG и ускоряем инференс Qwen3.6 до 30%.

Если вы когда-нибудь собирали llama.cpp с нуля под свои нужды, то знаете: стандартный cmake даёт неплохой результат, но часто оставляет на столе ещё 20–30% производительности. Особенно больно это чувствуется на NVIDIA картах, где после очередного коммита вдруг возникает TG regression — падение токенов в секунду на длинных последовательностях. В этом гайде мы разберём, как флаг PDL в сборке llama.cpp build 9254 превращает вашу видеокарту в реактивный двигатель.

Что за PDL и с чем его едят?

PDL — Parallel Dequantization Loop. Звучит как заклинание из мира низкоуровневой оптимизации, но суть проста: этот флаг включает развёртывание цикла деквантизации, что позволяет GPU одновременно загружать веса и выполнять матричные умножения. В теории — снижение latency, на практике — прирост throughput до 30% на моделях вроде Qwen3.6. Особенно актуально для карт с большим количеством ядер CUDA (RTX 3090/4090/5090), где узким местом часто является именно деквантизация, а не сами вычисления.

Важно: флаг PDL появился в экспериментальной ветке в конце 2025 года, но только в build 9254 он получил стабильную реализацию и фикс критической регрессии TG (time-to-first-token + continue generation).

Призрак регрессии: почему без PDL всё тормозит?

В build 9251–9253 многие заметили аномальное падение скорости генерации на длинных контекстах. Например, модель Qwen3.6 на RTX 4090 выдавала стабильные 110 t/s на коротких запросах, но на 8K+ токенах проседала до 70 t/s. Причина — в неудачном изменении планировщика CUDA-потоков. Флаг GGML_CUDA_PDL=ON не только включает параллельную деквантизацию, но и возвращает корректное поведение планировщика, убирая просадку.

Собираем llama.cpp с PDL: пошаговая инструкция

Предположим, что у вас уже есть CUDA Toolkit (>=12.4), cmake (>=3.26) и git. Если нет — почитайте этот гайд по базовой сборке.

1 Клонируем репозиторий и переключаемся на build 9254

git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp
git checkout 9254

2 Запускаем cmake с флагом PDL

mkdir build && cd build
cmake .. -DGGML_CUDA=ON -DGGML_CUDA_PDL=ON
make -j$(nproc)

Важно: не используйте -DGGML_CUDA_FORCE_MMQ вместе с PDL — эти флаги конфликтуют. Если вам нужен режим MMQ, собирайте отдельно без PDL.

3 Проверяем, что флаг активен

./llama-bench --help | grep PDL

Если видите строку --pdl — всё ок. Запускаем бенчмарк.

Результаты: сухие цифры

Конфигурация Qwen3.6 (8K ctx) Qwen3.6 (32K ctx)
Стандартная сборка (build 9250) 98 t/s 64 t/s
Build 9254 без PDL 92 t/s 55 t/s (регрессия)
Build 9254 + PDL 125 t/s 82 t/s

Тесты на RTX 4090, модель Qwen3.6-8B, quant Q4_K_M. Разница на длинных контекстах — почти 50%! На RTX 5090 (Blackwell) прирост ещё заметнее, особенно с поддержкой NVFP4 — сравнение нативных и ненативных сборок показывает, что PDL даёт дополнительные 10–15% сверху.

Сравнение с альтернативами

На NVIDIA картах есть несколько путей ускорения llama.cpp: CUDA (стандарт), Vulkan, и различные бэкенды. Vulkan часто проигрывает CUDA на чипах NVIDIA, особенно на длинных контекстах. PDL же — это улучшение именно CUDA-бэкенда, без смены API. Альтернативы вроде GGML_CUDA_FORCE_MMQ или GGML_CUDA_F16_TRUE не дают такого прироста на деквантизации и иногда даже замедляют.

💡
Если у вас карта с малым объёмом VRAM (например, RTX 3060 Ti с 8 ГБ), PDL не решит проблему нехватки памяти, но ускорит тот объём, который помещается. На картах с 8–12 ГБ прирост меньше, но всё равно заметен (10–15%).

Кому это нужно прямо сейчас?

  • Владельцам RTX 3090/4090/5090 — именно на них прирост максимален.
  • Тем, кто гоняет модели с длинным контекстом (32K+ токенов) — регрессия TG убивает удобство, PDL её лечит.
  • Энтузиастам, которые собирают llama.cpp сами — никаких зависимостей, просто флаг cmake.
  • Фанатам Qwen3.6 и других больших моделей — 30% прироста это не шутки.

Для тех, кто использует llama.cpp как движок в своём проекте, апдейт на build 9254 с PDL — обязательный шаг. Библиотека всё ещё не имеет встроенного детекта оптимальных флагов, но вы теперь знаете, за что отвечать.

Подводные камни

  • Совместимость с разными CUDA Toolkit — на 12.6 PDL работает без нареканий, на 12.8 могут быть редкие краши (сообщают на AMD картах через CUDA via HIP, но это отдельная история).
  • Не используйте PDL с гибридными сборками (CPU+GPU оффлоадинг) — пока это экспериментальная фича, возможны артефакты.
  • Если вы используете AMD карты через ROCm, PDL пока не поддерживается — это pure NVIDIA фича.

Звучит логично, но есть нюанс: PDL увеличивает потребление VRAM примерно на 5–7% из-за дополнительных буферов деквантизации. Если вы и так стоите на грани — придётся либо снижать размер контекста, либо использовать более жёсткий квантизатор (Q4_K_S вместо Q4_K_M).

Неочевидный совет

Соберите две версии llama.cpp — одну с PDL, другую обычную. Переключайтесь между ними скриптом, когда запускаете разные нагрузки. Для чата в реальном времени с длинным диалогом — PDL обязателен. Для пакетного инференса коротких промптов (RAG, эмбеддинги) — обычная сборка может быть даже чуть быстрее из-за меньшего оверхеда на инициализацию.

Подписаться на канал