Available context size ошибка Qwen 3.5 35B на RTX 3090 Ti - как исправить | AiManual
AiManual Logo Ai / Manual.
08 Мар 2026 Гайд

Ошибка 'Available context size' в Qwen 3.5 35B на llama.cpp: диагностика и решение на примере RTX 3090 Ti

Столкнулись с ошибкой 'Available context size' в Qwen 3.5 35B на llama.cpp? Подробный гайд по диагностике и решению проблемы на RTX 3090 Ti с контекстом 256k и

Когда 24 ГБ VRAM внезапно превращаются в пшик

Вы скачали квантованную Qwen 3.5 35B в формате GGUF. Запустили через llama.cpp с видом на её заявленные 256k контекста. И тут - бац. В логах появляется убийственная строка: error: model context size (XXXXX) exceeds available context size (YYYYY). RTX 3090 Ti с её 24 гигабайтами видеопамяти, которая вчера казалась монстром, сегодня выглядит как скучающий хомяк в колесе. Что пошло не так?

💡
Эта ошибка - не баг, а фича. llama.cpp защищает вас от падения системы, когда модель физически не влезает в память. Но сообщение об ошибке настолько же полезно, как инструкция по сборке космического корабля на древнегреческом.

Почему это происходит? Разбираем по косточкам

Заявленный контекст модели - это теоретический максимум. Фактический доступный размер зависит от трёх тиранов: VRAM вашей видеокарты, степени квантования модели и версии llama.cpp. На 08.03.2026 последняя стабильная ветка llama.cpp (v0.8.0+) использует более эффективные алгоритмы распределения памяти, но магию из ничего не создаёт.

Qwen 3.5 35B в квантовании Q4_K_M весит около 20-22 ГБ. Логично, что для контекста в 256k токенов нужно ещё несколько гигабайт. Но не 4, а все 12-16! Потому что контекст хранится в нескольких представлениях: ключи (K), значения (V), и всё это умножается на количество слоёв и голов внимания.

1 Диагностика: с чего начать, когда всё горит

Не кидайтесь менять параметры наугад. Сначала поймите, где узкое место. Запустите эту команду в терминале:

# Проверяем, сколько памяти действительно доступно
nvidia-smi --query-gpu=memory.total,memory.free --format=csv

Запомните цифру memory.free. Теперь запустите llama.cpp сервер в режиме сухой прогулки (dry run) с флагом --verbose:

./server -m ./qwen3.5-35b-q4_K_M.gguf -c 11000 -ngl 99 --verbose 2>&1 | grep -E "(context|VRAM|available)"

Цифра после -c - это размер контекста в токенах. Начните с 11000 (примерно 11k), это типичное значение, при котором возникает ошибка на RTX 3090 Ti. Флаг -ngl 99 загружает все слои в VRAM. В логах ищите строки с оценкой потребления памяти.

Частая ошибка: Путаница между токенами и символами. 1 токен ≈ 0.75 слова на английском, но для китайских символов в Qwen соотношение другое. 11k токенов - это не 11 тысяч символов, а примерно 8-9 тысяч слов.

2 Решение: заставляем модель ужиматься

Вам нужно либо уменьшить аппетиты модели, либо найти дополнительную память. Начнём с первого.

Измените параметры запуска llama.cpp сервера. Ключевой флаг - -c задаёт размер контекста, но есть ещё --ctx-size (синоним) и критически важный -b или --batch-size.

# Рабочая конфигурация для RTX 3090 Ti с Qwen 3.5 35B Q4_K_M
./server -m ./qwen3.5-35b-q4_K_M.gguf \
  -c 8192 \
  -b 512 \
  -ngl 43 \
  --mlock \
  --cont-batching \
  --parallel 4

Что изменилось:

  • -c 8192: Снизили контекст до 8k токенов. Да, это далеко от 256k, но реалистично для 24 ГБ VRAM. Если нужно больше, читайте про запуск контекста >128k на нескольких видеокартах.
  • -b 512: Размер батча. Чем меньше, тем меньше пиковое потребление памяти. 512 - безопасное значение.
  • -ngl 43: Не загружаем все слои в VRAM, а только 43 из примерно 60. Остальные уйдут в RAM. Производительность упадёт, но модель запустится.
  • --cont-batching: Непрерывный батчинг, новая фича llama.cpp 2025 года, которая экономит память за счёт переиспользования буферов.
Параметр Значение для 24 ГБ VRAM Эффект на память
Контекст (-c) 8192 - 16384 Прямо пропорционален: +1k токенов ≈ +0.5-1 ГБ VRAM
Слои в VRAM (-ngl) 40-45 Каждый слой ≈ 300-400 МБ. 20 слоёв в RAM = экономия 6-8 ГБ VRAM
Размер батча (-b) 256-512 Меньше батч = меньше пиковая память, но ниже скорость

3 Если не помогает: копаем глубже

Бывает, что даже с этими параметрами память переполняется. Значит, проблема в другом месте.

Проверьте квантование. Может, вы скачали не Q4_K_M, а более тяжёлую версию? Q4_K_M весит ~22 ГБ, Q8_0 - уже ~40 ГБ. Для RTX 3090 Ti с большим контекстом Q4_K_M - оптимальный выбор. Если нужна максимальная точность в ущерб контексту, попробуйте Q5_K_M. Но для 256k контекста это утопия. Подробнее о квантовании читайте в статье про ошибки контекста в Qwen Coder.

Обновите llama.cpp. На 08.03.2026 в основной ветке есть оптимизации памяти для больших контекстов, которых не было год назад. Соберите из исходников:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make clean && make -j$(nproc) server-cuda CUDA_DOCKER_ARCH=all

Флаг CUDA_DOCKER_ARCH=all собирает поддержку всех архитектур CUDA, что важно для совместимости.

4 Docker: удобство, которое может стоить памяти

Если вы используете Docker-образы (например, популярный ghcr.io/ggerganov/llama.cpp:server-cuda), помните: контейнер добавляет накладные расходы. Обычно 100-300 МБ, но иногда из-за настроек volumes или shared memory можно потерять гигабайты.

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

docker run --gpus all \
  --shm-size 2g \
  -v /path/to/models:/models \
  -p 8080:8080 \
  ghcr.io/ggerganov/llama.cpp:server-cuda \
  --model /models/qwen3.5-35b-q4_K_M.gguf \
  -c 8192 \
  -ngl 43 \
  -b 512

Параметр --shm-size 2g выделяет 2 ГБ общей памяти, что достаточно для большинства задач. Не ставьте слишком много, чтобы не отнимать память у VRAM. Для сложных развёртываний на нескольких картах изучите руководство по настройке Docker для llama.cpp RPC.

5 Настройка Open WebUI: последний штрих

Open WebUI по умолчанию может отправлять запросы с максимальным контекстом, что снова вызовет ошибку. Нужно ограничить настройки.

В конфигурации Open WebUI (файл config.json или настройки в UI) установите:

{
  "model": "qwen3.5-35b",
  "max_context_length": 8192,
  "gpu_layers": 43,
  "batch_size": 512
}

Важно: эти параметры должны соответствовать параметрам запуска llama.cpp сервера. Если сервер запущен с -c 8192, а Open WebUI пытается отправить 12000 токенов, ошибка повторится.

💡
Если вы арендуете GPU в облаке для экспериментов с большими контекстами, обратите внимание на сервисы с RTX 4090 или A100. Например, этот провайдер предлагает машины с 48 ГБ VRAM за разумные деньги. Локально же для контекста >64k на Qwen 3.5 35B одной RTX 3090 Ti действительно мало.

Чего нельзя делать никогда

  • Не используйте -ngl 0 (все слои в RAM). Это убьёт скорость (0.5-1 токен/с). Да, ошибка исчезнет, но зачем тогда мощная видеокарта?
  • Не игнорируйте флаг -b. По умолчанию llama.cpp использует батч 512, но для больших контекстов это может быть много. Явно указывайте -b 256 или меньше.
  • Не верьте рекламе про 256k контекста на 24 ГБ VRAM. Даже с квантованием Q2_K это сложно. Реальные цифры: для Q4_K_M максимум 16-24k токенов при полной загрузке слоёв в VRAM.

А если нужно больше?

Есть три пути:

  1. Сменить модель. Qwen 3.5 14B или 7B вместят больший контекст в те же 24 ГБ. Но качество ответов упадёт.
  2. Добавить видеокарту. Две RTX 3090 Ti дадут 48 ГБ VRAM. Настройка сложная, через llama.cpp RPC или vLLM. Готовьтесь к танцам с бубном вокруг PCI-E линий и питания.
  3. Использовать более эффективные раннеры. vLLM или MLC-LLM иногда экономнее работают с памятью. Но они менее гибкие в настройке. Гайд по настройке vLLM для Qwen может помочь.

Последний совет, который вы не найдёте в мануалах: перед запуском сервера закройте все приложения, которые могут использовать GPU. Браузер с YouTube, игра в фоне, даже Wallpaper Engine - всё это крадёт драгоценные мегабайты VRAM. Иногда освобождает до 2 ГБ.

И помните: на 2026 год модель Qwen 3.5 35B - уже не топовая. Выходят более эффективные архитектуры, требующие меньше памяти на токен контекста. Следите за новыми моделями, возможно, ваш RTX 3090 Ti ещё покажет характер.

Подписаться на канал