Назад в блог

Решение проблемИнструкция

Локальной модели не хватает VRAM? Веса и KV-кэш в gputaskman

Узнайте, что занимает память GPU, когда модель в Ollama или llama.cpp не грузится или тормозит, что подкрутить и когда проще взять API.

Автор: CheapTokens TeamОпубликовано 5 мин чтения

Терминал с памятью GPU, разделённой на веса, KV-кэш и рабочие буферы
Содержание
  1. Что на самом деле занимает VRAM
  2. Ставим gputaskman и смотрим по процессам
  3. Веса, KV-кэш, буферы: откуда цифры
  4. Какой рычаг крутить
  5. Если не работает
  6. Когда проще взять облачную модель

Вчера локальная модель загружалась нормально, сегодня падает при старте или еле ползёт, а поменяли вы только длину контекста. Частый виновник — KV-кэш, и бесплатная терминальная утилита gputaskman покажет это, а не заставит гадать.

Обычный монитор GPU говорит, насколько память заполнена. Это «сколько», а не «почему». В README gputaskman (проверено 5 ноября 2026) он назван так: «An htop for what's inside your GPU, not just how full it is». Проект ранний, экспериментальный, с лицензией MIT — считайте его удобной лупой, а не приговором.

Что на самом деле занимает VRAM#

Представьте VRAM как чемодан. Внутри три вещи:

  • Веса — сама модель. Размер фиксирован для данной модели и квантизации.
  • KV-кэш — «краткосрочная память» модели о вашем разговоре. Растёт вместе с контекстом.
  • Рабочие буферы — черновое место, которое нужно рантайму по ходу работы.

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

Выберите свой случай

Что вы видите?

Падает сразу при загрузке

Одни веса или веса плюс кэш под вашу длину контекста больше свободной VRAM. Возьмите меньшую квантизацию или модель поменьше, либо сократите контекст.

Загружается, но тормозит после увеличения контекста

Скорее всего, KV-кэш вырос и часть работы больше не помещается в VRAM — вид процессов и разбивка это подтвердят. Сначала уменьшите длину контекста — это самый дешёвый рычаг.

Раньше работало, теперь нет

Память заняли другие: игра, браузер с аппаратным ускорением, второй сервер моделей. Откройте вид по процессам, прежде чем трогать модель.

Ставим gputaskman и смотрим по процессам#

README предлагает три способа: портативный ZIP для Windows, запуск из клона через uv run --locked gputaskman или pip в виртуальном окружении Python 3.11+. Платформы, по README:

  • Windows 10/11 64-bit с видеокартой NVIDIA или AMD (ZIP для x64 и ARM64 на странице Releases);
  • Linux и WSL с NVIDIA (glibc 2.35+; WSL умеет читать счётчики хоста Windows);
  • macOS на Apple Silicon — только из клона исходников, портативной сборки нет.

ZIP для Windows без подписи. Скачивайте их только со страницы Releases официального репозитория, github.com/shanselman/gputaskman. Точные команды берите из README: проект молодой, параметры могут измениться.

Когда запустили, для нашей задачи важны два вида:

  1. Вид устройства: занятая VRAM, загрузка GPU, PCIe, температура, питание, частоты и графики истории. Годится для вопроса «что-то подскочило?».
  2. Вид процессов: локальная память GPU по процессам, системная RAM, доступная GPU, активность движков и найденный рантайм (CUDA, HIP, Vulkan, Direct3D, ggml, ONNX Runtime).

В списке процессов найдите сервер модели (в Ollama — его встроенный раннер). Потом посмотрите остальных. Если браузер или игра держат пару гигабайт, ответ уже есть, и модель трогать не надо.

Веса, KV-кэш, буферы: откуда цифры#

Инспектор модели показывает архитектуру, квантизацию и размеры буферов, где они доступны. Важная оговорка: по README, веса, KV-кэш и рабочие буферы берутся из логов загрузки рантайма, если включено совместимое логирование. Для llama.cpp запустите свой llama-server с логом (--log-file server.log -lv 4; по README, для размеров буферов нужен уровень 4). Для Ollama gputaskman использует server.log Ollama, если он доступен. Иначе это оценка по метаданным GGUF и размеру контекста в расчёте на размещение как в llama.cpp. Учёт KV по отдельным моделям внутри одного процесса пока не поддерживается.

Запуск llama-server с файлом лога
Так gputaskman получает размеры буферов из логов, а не из оценки

Оценку читайте как «примерно», разбивку из логов — как «то, что сообщил рантайм». Для Ollama README говорит: встроенные раннеры определяются, GGUF-файлы получают имена из манифестов Ollama, а server.log используется, когда доступен. LM Studio поддержан частично: модели именуются по его папке и опрашиваются через локальный API, но проверено это на заготовленных ответах, а не сквозным тестом.

Можно сохранить два снимка в JSON и сравнить командой diff. Так легко ответить на «что изменилось, когда я перешёл с 4K на 16K контекста?»: снимок, смена настройки, перезагрузка модели, второй снимок.

Быстрая проверка

Модель загружается, но тормозит после увеличения длины контекста. Что проверить первым?

Показать ответ

Ответ: KV-кэш

Веса от длины контекста не зависят, а KV-кэш растёт вместе с ней. Если уменьшить контекст, кэш сразу сожмётся.

Какой рычаг крутить#

Разбивка даёт решение, а не просто картинку.

Большая часть — веса. Берите меньшую квантизацию или модель поменьше: только так уменьшаются веса. Арифметика памяти — в статье Запустится ли модель на 125B на GPU с 16 ГБ?

Большая часть — KV-кэш. Сократите контекст. В Ollama это можно попробовать прямо в сессии:

text
ollama run <your-model>
>>> /set parameter num_ctx 8192

8192 — лишь пример, ставьте столько, сколько нужно задаче (команда по документации Ollama, проверено 5 ноября 2026).

Если потом заметите странную медлительность при обработке промпта с квантизованным кэшем в llama.cpp, следующий шаг — разбор про KV-кэш q5_1. А что вообще помещается в контекстное окно, читайте в статье про контекстное окно.

Большая часть — другой процесс. Закройте его или отдайте встроенной графике. Модель менять не нужно.

Чек-лист

Прежде чем винить модель

Если не работает#

  • Разбивка выглядит странно. Проверьте, не оценка ли это (нет совместимых логов загрузки). В llama.cpp запустите свой llama-server с --log-file server.log -lv 4 и перезагрузите модель. В Ollama gputaskman берёт server.log, если он есть; пометка «оценка» там нормальна.
  • В LM Studio меньше деталей. Поддержка частичная, см. выше.
  • Нет видеокарты NVIDIA или AMD. Инструмент смотрит только локальные нагрузки на GPU; только CPU, только NPU и облако вне его задач.
  • macOS. Запускайте из клона исходников, портативной сборки нет.

Когда проще взять облачную модель#

Допустим, для одной задачи, например резюме большого документа, нужен длинный контекст, а карта тянет модель только с коротким. Можно продолжать подкручивать, а можно вынести VRAM из уравнения. Для таких задач в CheapTokens есть DeepSeek-V4-Flash: контекст 380K, до 32 768 токенов в ответе, одна цена в любое время суток, API в формате OpenAI. У GLM-5.3-Flash контекст 390K и до 8 192 токенов в ответе.

Запрос — обычный, в формате OpenAI (ключ держите в переменной окружения):

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-ai/DeepSeek-V4-Flash-0731", "messages": [{"role": "user", "content": "Summarize this document: ..."}]}'

Подробности подключения — в документации. Правило для решения: если задаче постоянно нужно больше контекста или модель крупнее, чем тянет карта, а вид процессов показывает, что VRAM и так занята, отправляйте такую задачу в API, а мелкие быстрые дела оставьте локально. Глубже этот выбор разобран в статье Запускать DeepSeek локально или через API?

Допустим, вы делаете резюме 100 больших документов: по 60 000 токенов на входе и 1 000 на выходе (с запасом в окне 380K). Вот сколько это стоит сейчас:

Модель За запрос 100 запросов OpenRouter, 100 запросов
GLM-5.3-Flash $0.0012 $0.124 $0.209
DeepSeek-V4-Flash $0.001 $0.10 $0.434
MiniMax-M2.7 $0.0032 $0.315 $3.78

60 000 входных и 1 000 выходных токенов на запрос. Цены за 1M токенов актуальны и меняются вместе с нашими тарифами; столбец OpenRouter показывает справочные цены для той же нагрузки.

По этим числам один документ — $0.001 по живой цене, а в сумме, с учётом входа и выхода, это ниже, чем у OpenRouter.

Калькулятор стоимости

Ваша нагрузка: поменяйте токены и число запросов

Входные токены на запрос: 60 000 · Выходные токены на запрос: 1 000 · Запросов в день: 100

МодельВ деньВ месяц
GLM-5.3-Flash$0.124$3.72
DeepSeek-V4-Flash$0.10$3.00
MiniMax-M2.7$0.315$9.45