Почему 9 миллиардов параметров не лезут в 6 гигабайт памяти? (Спойлер: лезут)
Вы смотрите на свою видеокарту с 6 ГБ VRAM и думаете: "Мне бы хоть 7B модель запустить, а тут 9B...". Знакомое чувство. Особенно когда видишь требования к памяти в документации — 18 ГБ для FP16, 9 ГБ для INT8. И кажется, что математика против вас.
Но математику можно обмануть. Или точнее — пересчитать по-другому.
Вспомните нашу статью про запуск 20B модели на 6 ГБ VRAM. Там мы использовали браузер как платформу. Сегодняшний подход другой — мы берем бесплатный Google Colab, натягиваем на него Cloudflare Tunnel и получаем персональный AI-сервер за $0. Звучит как мошенничество? Это просто инженерная хитрость.
Сколько реально нужно памяти для 9B модели?
Давайте посчитаем без маркетинговых обещаний:
- FP16 (полная точность): 9B × 2 байта = 18 ГБ — не вариант
- INT8 (8-битное квантование): 9B × 1 байт = 9 ГБ — почти, но не совсем
- Q4_K_M (4-битное квантование): 9B × 0.5 байта = 4.5 ГБ — вот оно!
4.5 ГБ весов модели плюс примерно 1-1.5 ГБ на активации, контекст и системные нужды. Итого 6 ГБ — впритык, но реально. Главное — не дать Colab'у съесть лишнее на свои нужды.
Важно: Colab T4 на самом деле имеет 15 ГБ GPU RAM, но только если платить за Colab Pro. В бесплатной версии Google искусственно ограничивает доступную VRAM до 6-8 ГБ через свою систему "динамического распределения ресурсов". Поэтому мы и говорим о 6 ГБ — это то, что гарантированно есть даже в бесплатном тарифе на март 2026 года.
1 Готовим Colab: берем то, что дают
Первая ошибка новичков — они пытаются установить всё подряд. Colab живет 12 часов (иногда меньше), поэтому каждый мегабайт на диске и в памяти на счету.
Открываем новый ноутбук Colab, выбираем T4 GPU (Runtime → Change runtime type → T4 GPU). Первая ячейка:
# Проверяем, что нам дали
!nvidia-smi
# Освобождаем память от мусора предыдущих сессий
import gc
import torch
gc.collect()
torch.cuda.empty_cache()
# Смотрим реально доступную память
import subprocess
result = subprocess.run(['nvidia-smi', '--query-gpu=memory.total,memory.free', '--format=csv'],
capture_output=True, text=True)
print(result.stdout)
Если видите что-то вроде "6144 MiB" в memory.total — поздравляю, вы в стандартном пуле. Если больше 8000 — вам повезло, сегодня Google в хорошем настроении.
2 Выбираем модель: что актуально в марте 2026?
На март 2026 года есть несколько отличных 9B-моделей, которые работают в 6 ГБ:
| Модель | Размер (Q4_K_M) | Особенность | Где взять |
|---|---|---|---|
| Qwen2.5-9B-Instruct | 4.8 ГБ | Лучшее качество/размер | Hugging Face |
| Llama 3.2-8B-Instruct | 4.3 ГБ | Стабильная работа | Meta или HF |
| DeepSeek-Coder-9B | 4.9 ГБ | Для кода | HF (если ещё open source) |
Лично я выбираю Qwen2.5-9B — у них отличное квантование и модель реально умная для своих размеров. Помните нашу статью про Qwen3-235B? Младший брат не хуже, просто компактнее.
3 Ставим движок: llama.cpp против transformers
Здесь большинство совершает фатальную ошибку — устанавливают transformers от Hugging Face. Он съедает лишние 2-3 ГБ на overhead. Нам это не по карману.
Вместо этого используем llama.cpp — он написан на C++ и оптимизирован до последнего байта:
# Клонируем и собираем llama.cpp с поддержкой CUDA
!git clone https://github.com/ggerganov/llama.cpp
%cd llama.cpp
!make LLAMA_CUDA=1 -j4
Почему не vLLM? Потому что vLLM требует больше памяти для своей системы paging. Для 120 ГБ VRAM — отлично (как в этой статье), для наших 6 ГБ — смерть.
4 Качаем и конвертируем модель
Не качайте готовые GGUF-файлы с сомнительных сайтов. Лучше конвертировать самим из оригинальной модели:
# Устанавливаем необходимые Python-пакеты
!pip install huggingface-hub>=0.28.0
# Качаем модель с Hugging Face
from huggingface_hub import snapshot_download
model_path = snapshot_download(repo_id="Qwen/Qwen2.5-9B-Instruct")
# Конвертируем в GGUF формат с квантованием Q4_K_M
!python convert.py {model_path} --outtype q4_k_m
Это займет 15-20 минут. Не пугайтесь — конвертация происходит в RAM, не в VRAM.
Предупреждение: Если у вас закончится оперативная память (Colab дает около 12 ГБ RAM), сессия упадет. Следите за прогрессом и не запускайте ничего лишнего в фоне.
5 Запускаем сервер с правильными флагами
Вот где большинство теряет последние мегабайты. Неправильные флаги = "CUDA out of memory".
# Запускаем сервер llama.cpp
!./server -m ./models/qwen2.5-9b-instruct-q4_k_m.gguf \
-c 4096 \ # Контекст 4K токенов (больше не влезет)
-ngl 99 \ # Всё что можно - на GPU
-b 512 \ # Пакетный размер
-t 4 \ # 4 потока CPU
--host 0.0.0.0 \ # Слушаем все интерфейсы
--port 8080 \
--api-key colab_user_$(date +%s) # Генерируем случайный API-ключ
Флаг -ngl 99 — это магия. Он означает "положи на GPU 99% слоев". Остальное будет в RAM, но это нормально — скорость почти не пострадает.
6 Cloudflare Tunnel: магия, которая обходит ограничения Colab
Colab не дает публичный IP. Раньше использовали ngrok, но он сейчас платный для постоянных туннелей. Cloudflare Tunnel — бесплатный и стабильный.
Регистрируемся на Cloudflare (если нет аккаунта). Затем в Colab:
# Качаем cloudflared (актуальная версия на март 2026)
!wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O cloudflared
!chmod +x cloudflared
# Аутентифицируемся (откроется браузер, нужно авторизоваться)
!./cloudflared tunnel login
# Создаем туннель
!./cloudflared tunnel create colab-llm-tunnel
# Настраиваем маршрутизацию
!./cloudflared tunnel route dns colab-llm-tunnel ваш-субдомен.your-domain.com
# Запускаем туннель к нашему серверу на порту 8080
!./cloudflared tunnel --url http://localhost:8080 run colab-llm-tunnel &
Где взять домен? Cloudflare дает бесплатные поддомены на зоне .cloudflare.com, но лучше использовать свой (они тоже бесплатны в Cloudflare).
Что делать, когда всё работает?
Теперь у вас есть полноценный AI API по адресу https://ваш-субдомен.your-domain.com. Можно подключать:
- Open WebUI из нашей предыдущей статьи
- Свой фронтенд
- Автоматизации через Zapier/Make
- Мобильное приложение
Пример запроса:
curl https://ai-server.your-domain.com/v1/completions \
-H "Authorization: Bearer colab_user_1743379200" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5-9b-instruct",
"prompt": "Объясни квантовую физику как пятилетнему",
"max_tokens": 500
}'
Подводные камни, которые потопят ваш сервер
- Таймаут Colab: Бесплатная сессия живет максимум 12 часов, часто меньше. Решение — сохраняйте сессию активной (имитируйте действия) или перезапускайте утром.
- Скачивание моделей каждый раз: Сохраняйте GGUF-файл на Google Drive и монтируйте его в Colab. Экономит 30 минут при перезапуске.
- Cloudflare Tunnel отваливается: Иногда туннель теряет соединение. Настройте мониторинг (простой скрипт, который проверяет доступность) или используйте systemd в Colab (да, там есть systemd, просто о нём мало кто знает).
- API-ключ в логах: Не используйте простые ключи. Генерируйте случайные каждый запуск. И никогда не выкладывайте ноутбук с ключом в публичный доступ.
Серьёзно: Если ваш туннель станет публичным и на него начнут ходить все желающие, Google быстро заблокирует сессию за чрезмерное использование. Настройте базовую авторизацию или ограничьте доступ по IP.
А если хочется что-то покрупнее?
9B модель — это хорошо, но иногда нужна мощь. Если у вас есть доступ к Colab Pro или другому облаку с большей VRAM, посмотрите гайд по запуску 30B MoE-модели. Там те же принципы, просто масштаб другой.
Или если вы готовы платить $0.03 за запрос, есть вариант с арендой сервера на 192 ГБ VRAM. Но сегодня мы говорим о бесплатных решениях.
Итог: зачем всё это?
Потому что зависимость от OpenAI, Anthropic и других — это не только деньги. Это ограничения на использование, политика контента, риск изменения API. Ваш собственный сервер на Colab может быть не таким стабильным, но он ваш.
И главное — вы доказываете себе, что 6 ГБ VRAM в 2026 году это не приговор. Это просто техническое ограничение, которое можно обойти с правильными инструментами.
Следующий шаг? Попробуйте запустить две 3B модели параллельно в одной сессии Colab. Или настройте автоматический перезапуск при падении. Экспериментируйте — бесплатные ресурсы для того и существуют.