Ошибки локального запуска LLM: как избежать проблем с VRAM и латентностью | AiManual
AiManual Logo Ai / Manual.
27 Дек 2025 Гайд

Практический гайд: как избежать основных ошибок при локальном запуске больших LLM

Полное руководство по запуску больших языковых моделей локально. Решаем проблемы с VRAM, фрагментацией памяти, латентностью. Llama.cpp, vLLM, квантование, оптим

Почему локальный запуск LLM превращается в кошмар (и как это исправить)

Вы скачали модель на 70 миллиардов параметров, запустили её на своем RTX 3090... и получили ошибку "Out of memory" или скорость генерации 0.5 токена в секунду. Знакомая ситуация? Вы не одиноки. 80% пользователей сталкиваются с теми же проблемами при первом локальном запуске больших LLM.

Проблема не в ваших навыках, а в том, что запуск LLM — это не просто "загрузил и работай". Это комплексная задача, требующая понимания архитектуры модели, ограничений железа и правильных настроек оптимизации.

Ключевая мысль: Успешный локальный запуск LLM — это баланс между размером модели, доступной VRAM, скоростью генерации и качеством ответов. Невозможно максимизировать все параметры одновременно.

Основные ошибки и их решения

Давайте разберем самые частые проблемы, с которыми сталкиваются пользователи, и пошагово их исправим.

1 Ошибка #1: Неправильный выбор размера модели для вашего железа

Самая частая ошибка — попытка запустить модель, которая просто не помещается в вашу VRAM. 70B модель в полной точности требует ~140 ГБ памяти, а у RTX 4090 "всего" 24 ГБ.

Модель (параметры) Память в FP16 (примерно) Минимальная VRAM для запуска Рекомендуемая VRAM
7B (7 миллиардов) 14 ГБ 8 ГБ (с квантованием) 12+ ГБ
13B (13 миллиардов) 26 ГБ 12 ГБ (с квантованием) 16+ ГБ
34B (34 миллиарда) 68 ГБ 20 ГБ (с квантованием) 24+ ГБ
70B (70 миллиардов) 140 ГБ 32 ГБ (с квантованием) 48+ ГБ

Решение: Сначала оцените свои ресурсы, потом выбирайте модель. Для большинства пользователей с 8-24 ГБ VRAM оптимальны модели 7B-13B с квантованием.

2 Ошибка #2: Игнорирование квантования моделей

Квантование — это самый мощный инструмент для запуска больших моделей на ограниченном железе. По сути, это сжатие весов модели с потерей некоторой точности, но с огромной экономией памяти.

💡
Квантование Q4_K_M (4-битное) уменьшает размер модели примерно в 4 раза с минимальной потерей качества. 70B модель из 140 ГБ превращается в 35 ГБ — это уже можно запустить на двух RTX 3090!

Популярные форматы квантования:

  • Q2_K: Сильное сжатие (2 бита), заметная потеря качества
  • Q4_K_M: Оптимальный баланс для большинства задач
  • Q6_K: Высокое качество при хорошем сжатии
  • Q8_0: Почти без потерь, но сжатие только 2x

Практический пример с llama.cpp:

# Конвертация модели в квантованный формат
./quantize models/llama-2-7b.gguf models/llama-2-7b-Q4_K_M.gguf Q4_K_M

# Запуск квантованной модели
./main -m models/llama-2-7b-Q4_K_M.gguf \
  -p "Расскажи о квантовой механике" \
  -n 256 -t 8 -ngl 99

3 Ошибка #3: Фрагментация памяти и неправильная загрузка слоев

Даже если модель теоретически помещается в VRAM, вы можете получить ошибку из-за фрагментации. Особенно это актуально при использовании нескольких GPU или при частичной загрузке слоев в VRAM.

Важно: Современные LLM состоят из десятков слоев. Если вы указали загрузить 80% слоев в VRAM, но они не помещаются из-за фрагментации, модель не запустится, даже если свободной памяти в сумме достаточно.

Решение для llama.cpp:

  • Используйте параметр -ngl (number of GPU layers) осознанно
  • Начинайте с небольшого значения и увеличивайте
  • Мониторьте использование памяти с помощью nvidia-smi
# Постепенное увеличение слоев в VRAM
./main -m model.gguf -p "Привет" -n 128 -t 12 -ngl 20  # Начните с 20 слоев
./main -m model.gguf -p "Привет" -n 128 -t 12 -ngl 40  # Увеличьте до 40
./main -m model.gguf -p "Привет" -n 128 -t 12 -ngl 99  # Все слои в VRAM (если поместятся)

4 Ошибка #4: Неоптимальные настройки контекста и батчей

Размер контекста (context window) напрямую влияет на потребление памяти. Контекст в 4096 токенов требует в 2 раза больше памяти, чем контекст в 2048 токенов.

Оптимальные настройки для разных сценариев:

Сценарий использования Размер контекста Размер батча Потоки CPU
Чат/диалог 2048-4096 1-4 4-8
Анализ документов 8192-16384 1 8-12
Генерация кода 4096-8192 1-2 6-10

Пошаговый план запуска LLM на RTX 3090 (24 ГБ VRAM)

Давайте соберем все знания в практический план для конкретного железа.

1 Шаг 1: Выбор модели и формата

Для RTX 3090 с 24 ГБ VRAM оптимальны:

  • Модель 13B с квантованием Q4_K_M (~8 ГБ)
  • Модель 34B с квантованием Q4_K_M (~20 ГБ)
  • Модель 70B с квантованием Q3_K_M (~30 ГБ, потребуется разбиение на 2 GPU)

2 Шаг 2: Подготовка окружения

# Установка llama.cpp
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j$(nproc) LLAMA_CUBLAS=1

# Скачивание модели (пример для Mistral 7B)
huggingface-cli download TheBloke/Mistral-7B-Instruct-v0.1-GGUF \
  mistral-7b-instruct-v0.1.Q4_K_M.gguf \
  --local-dir ./models --local-dir-use-symlinks False

3 Шаг 3: Оптимальный запуск

# Оптимальные параметры для RTX 3090 с моделью 13B Q4_K_M
./main -m ./models/mistral-7b-instruct-v0.1.Q4_K_M.gguf \
  --color \
  --ctx-size 4096 \
  --threads 10 \
  --temp 0.7 \
  --repeat-penalty 1.1 \
  -n -1 \
  -ngl 99 \
  -p "Напиши Python-функцию для сортировки массива"

4 Шаг 4: Мониторинг и оптимизация

# Мониторинг использования VRAM
watch -n 1 nvidia-smi

# Альтернатива с подробной информацией
nvtop

Альтернативы: когда llama.cpp не подходит

Llama.cpp — отличный инструмент, но не единственный. Рассмотрим альтернативы:

vLLM — для максимальной скорости инференса

Если вам нужна максимальная скорость генерации и поддержка непрерывного батчинга:

# Установка vLLM
pip install vllm

# Запуск модели
from vllm import LLM, SamplingParams

llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.1")
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)

outputs = llm.generate(["Привет, как дела?"], sampling_params)
print(outputs[0].outputs[0].text)
vLLM использует PagedAttention — революционную технику, которая уменьшает фрагментацию памяти и позволяет обрабатывать длинные контексты более эффективно. Скорость может быть в 2-4 раза выше, чем у llama.cpp.

Ollama — самый простой способ для начинающих

Если не хотите разбираться с настройками:

# Установка и запуск одной командой
curl -fsSL https://ollama.com/install.sh | sh
ollama run mistral

# Готово! Модель запущена и готова к работе

Оптимизация производительности: от 0.5 до 20+ токенов/сек

Скорость генерации зависит от десятков факторов. Вот как её повысить:

  1. Используйте GPU слои: Чем больше слоев в VRAM, тем быстрее (но не больше, чем помещается)
  2. Оптимизируйте количество потоков CPU: Обычно это количество физических ядер * 1.5
  3. Используйте квантование: Меньший размер модели = быстрее загрузка в память
  4. Настройте размер батча: Для интерактивного использования — batch 1, для обработки документов можно увеличить
  5. Обновите драйверы CUDA: Новые версии часто дают прирост 5-15%

Распространенные ошибки и их решения (FAQ)

Ошибка: "CUDA out of memory"

Причина: Модель не помещается в VRAM или слишком большой контекст.

Решение:

  • Используйте квантованную версию модели (Q4_K_M или ниже)
  • Уменьшите количество слоев в VRAM (параметр -ngl)
  • Уменьшите размер контекста (--ctx-size)
  • Закройте другие приложения, использующие GPU

Ошибка: Очень медленная генерация (0.5-2 токена/сек)

Причина: Слишком много слоев загружается в RAM вместо VRAM.

Решение:

  • Увеличьте значение -ngl (но следите за памятью)
  • Проверьте, что CUDA/cuBLAS правильно установлены
  • Убедитесь, что модель действительно использует GPU (nvidia-smi показывает загрузку)

Ошибка: Модель "забывает" контекст или генерирует бессмыслицу

Причина: Слишком высокая температура или проблемы с квантованием.

Решение:

  • Уменьшите температуру (--temp 0.7 вместо 1.0)
  • Используйте более качественное квантование (Q6_K вместо Q4_K_M)
  • Добавьте penalty за повторения (--repeat-penalty 1.1)

Чек-лист успешного запуска

  • ✅ Выбрана модель под размер вашей VRAM
  • ✅ Используется квантованная версия (Q4_K_M или аналогичная)
  • ✅ Правильно настроено количество GPU слоев (-ngl)
  • ✅ Оптимальный размер контекста (обычно 2048-4096)
  • ✅ Правильное количество CPU потоков (ядра * 1.5)
  • ✅ Драйверы CUDA обновлены до последней версии
  • ✅ Нет конкурирующих приложений, использующих GPU
  • ✅ Используется мониторинг (nvidia-smi) для проверки загрузки

Заключение: начните с малого, масштабируйтесь постепенно

Локальный запуск LLM — это не магия, а инженерная задача. Начните с небольшой модели (7B), отработайте настройки, поймите, как работает ваше железо, и только потом переходите к более крупным моделям.

Помните: даже 7B модель с правильными настройками может быть невероятно полезной. Не гонитесь за размером — гонитесь за эффективностью использования.

Самый важный навык при работе с локальными LLM — это не умение скачивать самые большие модели, а способность оптимизировать то, что уже работает на вашем железе. 13B модель, работающая на полной скорости, лучше, чем 70B модель, которая еле дышит.