«CUDA error: out of memory», «model requires more memory than is available», или просто вылет без объяснений на середине загрузки. Симптом один: модель, которую вы хотите запустить, не помещается в имеющуюся память.
Первый инстинкт — взять модель поменьше. Это правильное решение, но оно должно быть последним, а не первым: между ним и вашей текущей ситуацией есть пять ступеней, каждая из которых стоит меньше по качеству.
#Быстрая проверка
Прежде чем что-либо менять, выясните, чего именно и насколько не хватает.
nvidia-smi --query-gpu=memory.used,memory.total --format=csv
Часто оказывается, что полтора гигабайта видеопамяти заняты браузером, а модели не хватало восьмисот мегабайт. Тогда решение — закрыть браузер, а не менять модель.
Вторая команда показывает, что уже загружено движком:
ollama ps
Модель, оставшаяся в памяти с прошлого сеанса, — типичная причина того, что вторая модель не запускается.
#Лестница из шести ступеней
Ступени идут по возрастанию потери качества. Спускаться по ней нужно сверху вниз и останавливаться на первой, которая решила проблему.
#Ступень 1: освободить занятое. Потеря качества — нулевая
Закройте браузер, выгрузите ранее загруженную модель, проверьте, не осталось ли процессов после аварийного завершения. На Windows видеопамять расходуется рабочим столом и аппаратным ускорением в приложениях: пара браузерных окон с видео легко съедает гигабайт.
Выигрыш: от 0,5 до 2 ГБ. Стоимость: закрытые вкладки.
#Ступень 2: сократить контекст. Потеря — длина памяти диалога
Самый недооценённый ход. Память под контекст растёт линейно, и для модели класса 8B каждые восемь тысяч токенов стоят примерно гигабайт. Переход с 32k на 8k освобождает три гигабайта.
./build/bin/llama-cli -m model.gguf -ngl 99 -c 8192
Выигрыш: до нескольких гигабайт. Стоимость: модель будет помнить более короткий отрезок разговора. Механику разбирает материал о том, почему большой контекст съедает видеопамять.
#Ступень 3: Flash Attention и квантизация KV-кэша. Потеря — почти нулевая
Восьмибитное хранение кэша вдвое сокращает расход на контекст при разнице в качестве, которую в обычной работе не видно.
./build/bin/llama-cli -m model.gguf -ngl 99 -c 32768 -fa -ctk q8_0 -ctv q8_0
В Ollama то же самое включается переменными окружения службы. Выигрыш: половина того, что занимал контекст, — на длинном контексте это 2–4 ГБ. Стоимость: минимальная. Подробности и расчёт — в материале о Flash Attention и квантизации KV-кэша.
Первые три ступени — «бесплатные». Если после них модель влезла, дальше идти не нужно.
#Ступень 4: более жёсткая квантизация весов. Потеря — заметная, но ограниченная
Переход с Q6_K на Q5_K_M или с Q5_K_M на Q4_K_M экономит примерно гигабайт на каждые восемь миллиардов параметров.
Важное ограничение: ниже Q4_K_M спускаться почти всегда невыгодно. Экономия становится небольшой, а деградация ускоряется. Модель класса 7B в честном Q4 обычно полезнее модели 14B в Q2 того же размера на диске. Разбор уровней и точки перелома — в материале о квантизации LLM.
Выигрыш: 1–3 ГБ. Стоимость: заметная на сложных задачах, особенно на русском языке.
#Ступень 5: выгрузить часть слоёв на процессор. Потеря — в скорости, не в качестве
Качество ответов не меняется вовсе. Меняется скорость, и сильнее, чем ожидается: уже десятая часть слоёв на процессоре стоит около трети скорости.
./build/bin/llama-cli -m model.gguf -ngl 24 -c 8192
Значение подбирается сверху вниз до того, при котором модель загружается. Выигрыш: любой нужный объём. Стоимость: скорость, и нелинейно — подробности в материале о выгрузке слоёв в оперативную память.
#Ступень 6: взять модель классом ниже. Потеря — качество, но предсказуемо
Последняя ступень, и она честнее пятой. Модель класса 8B, работающая целиком на видеокарте с комфортной скоростью, в повседневной работе почти всегда полезнее модели 14B, половина которой считается процессором и которая отвечает по слову в секунду.
Выигрыш: гарантированный. Стоимость: модель будет слабее в рассуждениях. Подборка рабочих вариантов для ограниченной памяти — в таблице моделей для слабого железа.
#Таблица: симптом, причина, проверка
| Симптом | Вероятная причина | Проверка |
|---|---|---|
| Ошибка сразу при запуске | не хватает на веса плюс контекст | nvidia-smi до и после запуска |
| Ошибка через несколько сообщений | кэш контекста растёт по мере диалога | уменьшить -c и повторить |
| Ошибка при достаточной свободной памяти | память занята другим процессом | nvidia-smi со списком процессов |
| Загрузилось, но всё резко замедлилось | вытеснение данных в системную память | занятость памяти близка к 100% |
| Упоминание system memory в тексте ошибки | не хватает оперативной, а не видеопамяти | free -g |
| На карте с 8 ГБ не идёт модель на 6 ГБ | контекст и накладные расходы | посчитать по формуле |
Что здесь смотреть: вторая и четвёртая строки. Ошибка не при запуске, а посреди работы почти всегда означает контекст, а не веса. А отсутствие ошибки при внезапном падении скорости — признак того, что вы заняли память под завязку, и драйвер начал вытеснять данные: это хуже честной ошибки, потому что не выглядит как сбой.
#Если ничего не помогло
Посчитайте требуемый объём по формуле, вместо того чтобы подбирать. Вес модели плюс KV-кэш плюс примерно гигабайт накладных расходов — методика в материале о том, сколько нужно VRAM для локальной LLM. Расхождение расчёта с реальностью само по себе диагностично: если по расчёту должно влезать, а не влезает, ищите постороннего потребителя памяти.
Проверьте, не резервирует ли движок память под несколько параллельных слотов: при нескольких слотах заявленный контекст делится между ними, а память резервируется на все.
И отдельно: убедитесь, что вы вообще пытаетесь загрузить то, что думаете. Тег модели в каталоге может указывать не на тот уровень квантизации, который вы ожидали, а разница между Q4 и Q8 — двукратная.
#Частые вопросы
#Что делать в первую очередь при ошибке нехватки памяти?
Посмотреть, чем занята память, командой nvidia-smi. В заметной доле случаев проблема не в модели, а в браузере или в модели, оставшейся загруженной с прошлого раза.
#Что сокращать первым — контекст или квантизацию?
Контекст, а перед ним — включить квантизацию KV-кэша. Эти два действия почти не стоят качества ответов, тогда как более жёсткая квантизация весов стоит.
#Почему модель на 6 ГБ не влезает в карту на 8 ГБ?
Потому что кроме весов нужны память под контекст и накладные расходы, а часть видеопамяти занята выводом изображения. Практическое правило: планируйте исходя из объёма карты минус полтора гигабайта.
#Можно ли использовать оперативную память вместо видеопамяти?
Можно, выгрузив часть слоёв на процессор. Качество не пострадает, скорость — заметно, причём сильнее всего от первых же выгруженных слоёв.
#Стоит ли брать сильно квантованную большую модель вместо маленькой?
До уровня Q4 — обычно да, большая модель в Q4 лучше маленькой в Q8. Ниже Q4 — обычно нет: деградация становится непредсказуемой, а на русском языке проявляется раньше, чем на английском.
#Модель загрузилась, но система стала тормозить целиком
Вы заняли почти всю видеопамять, и системе не хватает её для интерфейса. Освободите гигабайт-полтора: работать с заполненной под завязку памятью и медленно, и нестабильно.