COMRAD404 / HOWTO

Как подобрать модель под свою видеокарту (VRAM)

Пошагово разберём, как подобрать локальную модель под объём VRAM: замерить реальную память, учесть KV cache, activations и overhead, выбрать quantization/offload и проверить fit без OOM.

Понадобится

Зависит от уже установленного runtime; в официальных источниках точная оценка не указана
  • Машина с GPU и доступом к терминалу
  • Для NVIDIA — установленный инструмент nvidia-smi
  • Выбранный runtime: Ollama, llama.cpp, vLLM, TGI или Transformers + Accelerate
  • Понимание целевого сценария: длина контекста, batch size и нужна ли параллельная обработка

После выполнения этой инструкции вы сможете подбирать локальную модель под свою видеокарту не по слухам, а по воспроизводимой схеме: сначала измерять реальную доступную VRAM, затем учитывать веса, KV cache, activations и накладные расходы runtime, а после этого проверять фактическую загрузку на вашей машине.

Короткий вывод: безопасный выбор модели начинается не с названия и не с числа параметров, а с вопроса: помещаются ли веса модели, KV cache и контекст, activations и runtime overhead в вашу VRAM при вашем сценарии работы. Если считать только веса, модель может загрузиться и всё равно упасть по OOM на длинном контексте, большом batch size или при параллельных запросах.

  • ⏱️ Время: зависит от уже установленного runtime; в официальных источниках точная оценка не указана.
  • 🎯 Сложность: средний.
  • 💰 Стоимость: зависит от выбранного runtime и вашего железа; единой официальной цены в источниках нет.
  • 🛠️ Что потребуется: доступ к машине с GPU; терминал; для NVIDIA — nvidia-smi; установленный или выбранный runtime: Ollama, llama.cpp, vLLM, Text Generation Inference либо Transformers + Accelerate.
  • 📌 Актуальность: инструкция опирается на официальные документы NVIDIA, Hugging Face, Ollama, llama.cpp, vLLM и TGI, сверенные по состоянию на 2026-08-14. Единой версии продукта здесь нет, потому что это общий workflow подбора модели под VRAM для разных runtime.

Редакционное ограничение: в официальных источниках нет универсальной таблицы вида «8 GB VRAM = такая-то модель» или «24 GB VRAM = такой-то размер модели». Итоговый fit зависит от архитектуры модели, precision и quantization, длины контекста, batch size, параллельных запросов, KV-cache и накладных расходов конкретного runtime. Поэтому ниже — не таблица-угадайка, а практический способ проверить совместимость на вашей карте.

Что именно занимает VRAM

Компонент Почему важен Что делать на практике
Веса модели Это первый обязательный слой расчёта: модель должна хотя бы загрузиться. Сначала оценивайте, помещаются ли веса, а уже потом считайте остальную память.
KV cache и контекст Официальные источники сходятся в том, что после весов нужно закладывать память под KV cache и длину контекста. Если памяти мало, уменьшайте контекст или выбирайте runtime с явным контролем KV cache.
Activations В Transformers память активаций зависит от batch size и sequence length. Модель может помещаться по весам и всё равно падать по OOM. Не проверяйте fit только на коротком тесте. Сразу учитывайте реальную длину запроса и batch.
Накладные расходы runtime По документации Accelerate первая CUDA-аллоцкация обычно забирает около 1–2 GB под kernels, поэтому полезная VRAM меньше паспортной. Оставляйте консервативный запас и не считайте весь номинальный объём памяти доступным под модель.
Параллельность В Ollama параллельные запросы увеличивают эффективный context и потребление памяти. Если модель держится только на одном запросе, не считайте это подтверждением fit для многопользовательского сценария.

Какой runtime выбирать, если памяти впритык

Runtime Когда выбирать Чем управлять Главное ограничение
Ollama Если вам нужен самый простой локальный старт без глубокого тюнинга. Выбирайте только такую модель, которая полностью помещается в VRAM для GPU inference; при необходимости сразу выгружайте её командой ollama stop. Для GPU inference модель должна полностью помещаться в VRAM; параллельные запросы и context увеличивают память.
llama.cpp Если нужен явный контроль над тем, сколько слоёв держать в VRAM. Используйте --n-gpu-layers; для автоподгонки unset-аргументов под память устройства доступен --fit. Нужен совместимый формат модели; реальный fit зависит от контекста, batch, KV cache и backend overhead.
vLLM Если вы поднимаете серверный inference и хотите отдельно управлять KV cache, quantization и offload. Уменьшайте memory footprint через поддерживаемые схемы quantization; при необходимости задавайте kv_cache_memory_bytes и kv_offloading_size. Совместимость конкретных quantization-режимов зависит от версии и модели; это нужно проверять в официальных docs.
Text Generation Inference (TGI) Если нужен Hugging Face-совместимый serving с шардированием и несколькими вариантами quantization. Используйте tensor parallelism, sharding и поддерживаемые режимы quantization. Поддержка режимов зависит от модели и окружения; для CUDA и ROCm нужны соответствующие контейнеры и драйверы.
Transformers + Accelerate Если вы строите кастомный Python-пайплайн и хотите точный контроль над загрузкой модели и лимитами по памяти. Создавайте модель через init_empty_weights() и ограничивайте память по GPU через max_memory. Даже при аккуратной загрузке длинный контекст или большой batch всё равно могут вызвать OOM.

Пошагово: как подобрать модель под свою видеокарту (VRAM)

  1. Шаг 1. Измерьте базовую загрузку вашей GPU.

    На NVIDIA-закарте начните с nvidia-smi. Документация показывает отчёт по frame-buffer memory usage и рекомендует идентифицировать GPU по UUID или PCI bus ID, потому что порядок устройств может меняться после перезагрузки.

    nvidia-smi

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

  2. Шаг 2. Сразу вычтите служебный запас из паспортной VRAM.

    Не планируйте модель впритык к номинальному объёму памяти. По документации Hugging Face Accelerate первая CUDA-аллоцкация обычно забирает около 1–2 GB под kernels, поэтому фактическая полезная VRAM меньше, чем кажется по характеристикам карты.

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

  3. Шаг 3. Оцените fit сначала по весам, а не по контексту.

    Официальные документы сходятся на одном правиле: сначала должны поместиться веса модели, затем вы закладываете память под KV cache, activations и runtime overhead. Это важнее, чем искать готовую таблицу соответствий по гигабайтам.

    Если модель уже на уровне весов выглядит пограничной, заранее планируйте один из обходных путей: quantization, частичное размещение слоёв в VRAM, шардирование или offload.

    Ожидаемый результат: вы понимаете, помещается ли модель хотя бы в базовом виде или сразу нужен режим экономии памяти.

  4. Шаг 4. Зафиксируйте реальный сценарий инференса: контекст, batch и параллельность.

    В документации Transformers указано, что activations зависят от batch size и sequence length. В документации Ollama отмечено, что параллельные запросы увеличивают эффективный context и потребление памяти. Поэтому проверять fit на коротком одиночном промпте недостаточно.

    Если вы планируете длинный контекст или несколько одновременных запросов, считайте именно этот сценарий целевым, а не минимальный тест «модель ответила один раз».

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

  5. Шаг 5. Выберите стратегию размещения для своего runtime.

    Если вам нужен простой локальный запуск, в Ollama берите только ту модель, которая целиком помещается в VRAM для GPU inference. Если модель чуть не влезает и нужен более ручной контроль, в llama.cpp server используйте --n-gpu-layers и, при необходимости, --fit.

    Для серверного inference в vLLM уменьшайте memory footprint через поддерживаемое quantization и при необходимости задавайте kv_cache_memory_bytes; это значение переопределяет gpu_memory_utilization. Если KV cache нужно частично выносить, для этого есть kv_offloading_size. В TGI используйте tensor parallelism, sharding и поддерживаемые режимы quantization. В кастомных Python-сценариях с Transformers + Accelerate создавайте модель через init_empty_weights() и задавайте per-GPU лимит через max_memory.

    Ожидаемый результат: вы выбираете не «любую модель», а конкретный способ уложить её в память вашего runtime.

  6. Шаг 6. Загрузите модель и подтвердите fit фактическим мониторингом.

    После выбора quantization, offload или числа GPU-слоёв загружайте модель на целевой машине и снова проверяйте VRAM. На NVIDIA это удобно делать через nvidia-smi, а для других ускорителей — через аналогичный мониторинг. Смотрите не только на момент загрузки, но и на запросы с тем контекстом и той параллельностью, которые вы реально будете использовать.

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

Как проверить, что всё работает

  1. Запустите выбранный runtime и загрузите модель на целевой GPU.

  2. В отдельном терминале откройте nvidia-smi и сверяйте карту по UUID или PCI bus ID, а не по случайному порядку устройств.

  3. Сначала отправьте короткий тестовый запрос, чтобы убедиться, что веса действительно загрузились.

  4. Затем повторите запрос с тем реальным контекстом, который вы планируете использовать в работе.

  5. Если у вас будет параллельная нагрузка, проверьте и её: в Ollama параллельные запросы увеличивают эффективный context и расход памяти.

  6. Считайте fit подтверждённым только если модель не падает по OOM, а потребление памяти остаётся в пределах вашей VRAM и не требует аварийной выгрузки.

Для чистого повторного теста в Ollama можно выгрузить модель сразу, не дожидаясь стандартного периода удержания в памяти, командой ollama stop. По FAQ модель по умолчанию удерживается в памяти 5 минут.

Частые ошибки и исправления

  • Ошибка: вы ориентируетесь только на «объём VRAM на коробке».

    Решение: сначала смотрите фактическую загрузку через nvidia-smi. Учитывайте, что первая CUDA-аллоцкация обычно забирает около 1–2 GB под kernels, поэтому полезной памяти меньше паспортной.

  • Ошибка: модель загружается, но падает на длинном контексте.

    Решение: проблема может быть не в весах, а в activations и KV cache. В Transformers память активаций зависит от batch size и sequence length, поэтому уменьшайте контекст или batch и проверяйте повторно.

  • Ошибка: в Ollama всё было нормально на одном запросе, но начались OOM при параллельной работе.

    Решение: учитывайте, что параллельные запросы увеличивают эффективный context и потребление памяти. Для GPU inference модель должна полностью помещаться в VRAM, а саму параллельность нужно тестировать отдельно.

  • Ошибка: вы потеряли нужную GPU после перезагрузки и смотрите не на тот адаптер.

    Решение: идентифицируйте карту по UUID или PCI bus ID. Документация NVIDIA прямо рекомендует это, потому что порядок устройств может меняться.

  • Ошибка: вы ищете универсальную таблицу «N GB VRAM = строго такой-то размер модели».

    Решение: такой официальной таблицы нет. Подбирайте модель только через измерение на целевой машине и с учётом выбранного runtime, quantization, контекста, batch и KV cache.

Безопасность и ограничения

  • Нет универсальной таблицы совместимости. Это не недостаток статьи, а ограничение официальных данных: итоговый fit зависит от архитектуры модели, precision или quantization, контекста, batch size, параллельных запросов, KV-cache dtype и runtime overhead.
  • Фактическая VRAM может отличаться от номинальной. В источниках отдельно отмечены драйверные и runtime-накладные расходы; дополнительно на расхождение могут влиять ECC, MIG, ОС и особенности отчётности.
  • Поддержка quantization меняется по версиям. Для vLLM и TGI проверяйте актуальные docs и release notes выбранного runtime перед развёртыванием.
  • Для TGI важна совместимость окружения. В официальном репозитории указаны отдельные замечания для CUDA-сборки, NVIDIA Container Toolkit и ROCm-образа для AMD.
  • Практический вердикт: если модель влезает только «в теории» и без запаса, считайте, что она не подходит. Для рабочей системы безопаснее сразу брать quantization, offload, меньше контекст или другой runtime с явным управлением памятью.

Что делать дальше

  • Если вы ещё уточняете, какая именно генеративная модель нужна под задачу, сначала определите формат входа и допустимый контекст, а уже потом считайте VRAM.
  • Если вам нужен не только текст, но и мультимодальная модель, закладывайте память ещё консервативнее и перепроверяйте fit после загрузки на том же runtime.
  • Когда модель уже стабильно помещается в память, переходите к следующему этапу: как файн-тюнить модель: с чего начать.
  • Если локальный запуск не обязателен, сравните лучшие бесплатные аналоги ChatGPT и проверьте, не проще ли решить задачу без собственной GPU-инфраструктуры.

Источники

Вопросы и ответы

Можно ли выбирать модель только по объёму VRAM в характеристиках видеокарты?

Нет. Полезная память меньше номинальной из-за накладных расходов runtime, а итоговый fit зависит не только от весов, но и от KV cache, activations, контекста, batch и параллельности.

Почему модель загружается, но падает на длинном запросе?

Потому что fit по весам не гарантирует fit по activations и KV cache. Документация Transformers отдельно указывает зависимость памяти от batch size и sequence length.

Что делать, если модель чуть-чуть не помещается в VRAM?

Не увеличивайте карту вслепую. Сначала попробуйте quantization, ограничение KV cache, offload, шардирование или частичное размещение слоёв в VRAM, в зависимости от runtime.

Подходит ли Ollama для пограничных сценариев по памяти?

Только если модель полностью помещается в VRAM для GPU inference. Если вам нужен более тонкий контроль памяти, удобнее смотреть на llama.cpp, vLLM, TGI или Transformers + Accelerate.

Как понять, что модель действительно подходит под мою карту?

Только по фактической проверке на целевой машине: загрузите модель, следите за VRAM через nvidia-smi или аналогичный мониторинг и прогоните именно тот контекст и ту параллельность, которые будут в работе.

Шаги

HOW-TO
  1. Измерьте базовую загрузку GPU

    | Запустите nvidia-smi, зафиксируйте frame-buffer memory usage и идентифицируйте нужную карту по UUID или PCI bus ID.

  2. Вычтите служебный запас VRAM

    | Не считайте всю паспортную память доступной: по документации Accelerate первая CUDA-аллоцкация обычно забирает около 1–2 GB под kernels.

  3. Оцените fit сначала по весам модели

    | Сначала проверьте, помещаются ли веса, а затем закладывайте память под KV cache, activations и runtime overhead.

  4. Зафиксируйте реальный сценарий инференса

    | Определите контекст, batch size и параллельность, потому что activations и эффективный context заметно влияют на память.

  5. Выберите стратегию размещения под свой runtime

    | Используйте quantization, offload, шардирование, max_memory, kv_cache_memory_bytes или n-gpu-layers — в зависимости от выбранного runtime.

  6. Загрузите модель и подтвердите fit мониторингом

    | Проверьте фактическую загрузку памяти после загрузки модели и на реальных запросах, а не только на коротком тесте.

Источники

SOURCES

Вопросы и ответы

FAQ
Можно ли выбирать модель только по объёму VRAM в характеристиках видеокарты?

Нет. Полезная память меньше номинальной из-за накладных расходов runtime, а итоговый fit зависит не только от весов, но и от KV cache, activations, контекста, batch и параллельности.

Почему модель загружается, но падает на длинном запросе?

Потому что fit по весам не гарантирует fit по activations и KV cache. В документации Transformers память зависит от batch size и sequence length.

Что делать, если модель чуть-чуть не помещается в VRAM?

Сначала попробуйте quantization, ограничение KV cache, offload, шардирование или частичное размещение слоёв в VRAM — выбор зависит от runtime.

Подходит ли Ollama для пограничных сценариев по памяти?

Только если модель полностью помещается в VRAM для GPU inference. Для более тонкого контроля памяти лучше смотреть на llama.cpp, vLLM, TGI или Transformers + Accelerate.

Как понять, что модель действительно подходит под мою карту?

Нужно проверить это на целевой машине: загрузить модель, следить за VRAM через nvidia-smi или аналогичный мониторинг и прогнать реальный контекст и параллельность.

Читайте также

LINKS