Оптимизация локальной LLM для программирования
Ключевые тезисы:
- Локальные LLM (например, QwQ 27B) приблизились по качеству к платным аналогам (Claude).
- Для эффективной работы критически важна правильная настройка параметров модели.
- Оптимизация должна балансировать скорость, качество, стабильность и удобство.
- Для задач программирования (кодинг, рефакторинг) нужны специфичные настройки, отличающиеся от креативных задач.
Выбор модели и платформы
Рекомендуемая модель: QwQ 27B (плотная модель, показывает лучшие результаты для кодинга, чем Mixture of Experts модели 35B).
Рекомендуемый софт для запуска: Llamacpp (предпочтительнее LM Studio или Ollama).
Квантизация: Q8 – хороший баланс между качеством и размером модели.
Важно: Скорость в токенах в секунду (t/s) – не абсолютный показатель. На неё влияют квантизация, размер контекста, железо и другие параметры. Сравнивать «голые» цифры бессмысленно.
Ключевые параметры и их настройка
Размер контекста (Context Size)
Что это: Максимальная длина «памяти» диалога с моделью.
Рекомендация: Устанавливать максимально возможный (для QwQ 27B – 262144).
Зачем: Обеспечивает удобство – можно вести длинные диалоги, модель помнит историю. Уменьшение контекста ускоряет генерацию, но снижает практическую полезность.
Температура (Temperature)
Что это: Параметр «креативности» модели (от 0 до 1).
Рекомендация для программирования: 0.6 (ниже стандартной 1.0).
Зачем: Для написания кода нужна строгая, детерминированная модель, а не креативная. Высокая температура увеличивает риск ошибок.
Топ-K (Top-K) и Топ-P (Top-P)
Что это: Параметры, ограничивающие выбор следующего токена из самых вероятных вариантов.
Рекомендации для программирования:
- Top-K: 20 – модель выбирает следующий токен из 20 наиболее вероятных кандидатов.
- Top-P: 0.95 – модель выбирает из минимального набора токенов, суммарная вероятность которых ≥ 95%.
Штрафы за повторения (Penalties)
Presence Penalty & Repetition Penalty: Штрафуют модель за повторное использование токенов.
Рекомендация для программирования: Установить в 0 (по умолчанию часто 1.5).
Зачем: В коде повторения – норма, а эти штрафы могут мешать генерации корректного синтаксиса.
Batch Size и Ubatch Size
Что это: Параметры, управляющие тем, как модель упаковывает и обрабатывает токены внутри GPU.
По умолчанию: Batch Size = 512, Ubatch Size = 256.
Совет: На мощной карте с большим объёмом VRAM можно увеличивать для ускорения. Если модель крашится – первым делом пробуйте уменьшать эти значения.
Параметры для ускорения (MTP, Flash Attention)
Multi-Token Prediction (MTP)
Что это: Технология, позволяющая предсказывать несколько токенов за раз.
Ключевая метрика: Draft Acceptance Rate (процент принимаемых «черновых» токенов).
- < 50% – плохо, MTP неэффективен.
- 60-75% – нормально.
- > 80% – отлично.
Параметры:spec_draft_nmax(например, 2 или 4). Увеличивайте, если Draft Acceptance высокий.
Важно:* Для работы MTP нужна CUDA версии 13.3 (избегайте 13.2, так как может выдавать мусор).
Flash Attention
Что это: Оптимизированный алгоритм внимания, сильно ускоряющий генерацию.
Совет: Убедитесь, что параметр flash_attn включён в вашей конфигурации.
Аппаратные настройки
Распределение по видеокартам (Tensor Split, -ts)
Зачем: Если у вас несколько видеокарт (особенно разного объёма VRAM), нужно явно указать, как распределять слои модели.
Как: Командой nvidia-smi -L узнайте порядок карт в системе (GPU 0, 1, 2...). Затем задайте пропорцию, например:
-ts 1 1для двух одинаковых карт.-ts 24 12 8 16для четырёх карт с разным объёмом памяти.-ts 0 0для автоматического распределения (может работать неоптимально).
Параллелизм (-parallel)
Рекомендация: Если вы работаете с моделью в одном экземпляре, устанавливайте -parallel 1. Большие значения могут не давать прироста.
Два типа скорости
- Prompt Processing (PP): Скорость обработки входного промпта. Зависит от количества активных ядер GPU. На видеокарте происходит почти мгновенно.
- Token Generation (TG): Скорость генерации ответа. Главный параметр для пользовательского восприятия. Зависит от пропускной способности памяти (VRAM), размера модели и квантизации. Всегда медленнее PP, так как токены генерируются последовательно.
Выводы
- Контекст и температура – базовые параметры для удобства и качества кода.
- Top-K, Top-P и Penalties требуют специфичной настройки под программирование.
- Для ускорения используйте MTP (следите за Draft Acceptance) и Flash Attention.
- При использовании нескольких GPU настраивайте Tensor Split.
- Всегда обновляйте драйверы (CUDA) для поддержки новых оптимизаций.
- Тестируйте настройки комплексно, оценивая не только скорость (t/s), но и итоговое качество кода и стабильность работы.
Важно: Скорость в токенах в секунду (t/s) – не абсолютный показатель. На неё влияют квантизация, размер контекста, железо и другие параметры. Сравнивать «голые» цифры бессмысленно.