Можно ли запустить современную языковую модель на 27 миллиардов параметров и полноценного автономного агента, используя пару серверных ускорителей образца 2017 года, установленных в обычный ПК через переходники? Краткий ответ: да, но с рядом существенных оговорок.
В этой статье я рассмотрю практический кейс: развертывание Qwen3.6-27B в связке с автономным агентом Hermes от Nous Research на двух картах Tesla V100-SXM2-16GB. Ускорители подключены к потребительской материнской плате через адаптеры SXM2→PCIe. Такая конфигурация доступна для сборки дома, однако она накладывает жесткие ограничения на объем видеопамяти и пропускную способность шины.
Эксперимент показал, что данная связка является пределом практической применимости для локального запуска Hermes: система работает, но функционирует на грани возможностей оборудования. Ниже приведен детальный разбор технических препятствий, готовые конфигурации для запуска и честная оценка того, где проходит «стена», которую невозможно преодолеть программными методами.
Техническая база
— Хост: Proxmox с пробросом (PCIe passthrough) двух GPU в виртуальную машину.
— GPU: 2× Tesla V100-SXM2-16GB через переходники. Процессор — Intel Core i7-6700k.
— Нюанс: NVLink между картами отсутствует (переходники передают только сигналы PCIe), а процессор 6700k обеспечивает лишь 16 линий PCIe 3.0, поэтому карты работают в режиме x8/x8.
— Задача: запустить Qwen3.6-27B-AWQ и интегрировать агента Hermes, требующего минимум 65 000 токенов контекста.
Проверить топологию и ширину канала можно следующими командами внутри VM:
nvidia-smi topo -m # если нет NVLink, вместо NV увидите PHB
nvidia-smi -q | grep -A2 "Link Width" # проверка: 8x — это максимум для межкарточного обмена
Проблема №1: «Загрузка GPU на 50%»
Частая жалоба: обе карты нагружены только наполовину. Причина кроется в том, что движки вроде llama.cpp по умолчанию распределяют модель по слоям (pipeline split): пока вычисления идут на первом GPU, второй простаивает. Решение — использование параллелизма тензоров (Tensor Parallelism), при котором модель сегментируется «поперек», и оба GPU обрабатывают каждый токен одновременно. В vLLM для этого используется флаг --tensor-parallel-size 2, что позволяет достичь реальной 100% загрузки обеих карт.
Проблема №2: отсутствие поддержки Volta в новых vLLM
Модели Qwen3.6 требуют vllm >= 0.19.0, однако актуальные версии vLLM больше не поддерживают архитектуру Volta (sm_70). Кроме того, ядра AWQ (Marlin) рассчитаны на sm_80+. Выход — использование комьюнити-форка 1Cat-vLLM, в котором восстановлены ядра внимания для SM70, реализована поддержка AWQ на Volta и добавлена совместимость с архитектурой Qwen3.5/3.6.
Почему именно 1Cat-vLLM?
Это решение закрывает критический разрыв:
— Оригинальный vLLM: новые версии не запускаются на V100, а старые не знают архитектуру Qwen3.6.
— llama.cpp / GGUF: работают, но на момент эксперимента имели сложности с корректной сборкой под такой гибрид и менее эффективный параллелизм тензоров.
— Другие движки (SGLang, TGI): официально требуют архитектуру sm_75 и выше.
1Cat-vLLM — единственный инструмент, объединяющий поддержку старого железа с современными архитектурами моделей. Установка производится через готовые пакеты:
# Скачивание пакетов из релиза
mkdir -p ~/wheels && cd ~/wheels
curl -s https://api.github.com/repos/1CatAI/1Cat-vLLM/releases/latest \
| grep browser_download_url | cut -d '"' -f4 | xargs -n1 wget
# Установка в conda-окружении
python -m pip install --prefer-binary --no-cache-dir \
--extra-index-url https://download.pytorch.org/whl/cu128 \
./flash_attn_v100-.whl ./vllm-.whl
Почему AWQ, а не GPTQ?
На архитектуре Volta большинство современных 4-битных схем неработоспособны. GPTQ-Int4 через ядра Marlin требует sm_80+, а FP8 — архитектуру Hopper (sm_90). GPTQ-Int8 технически возможен, но размер модели удваивается, что делает невозможным её запуск в 32 ГБ видеопамяти. Остается AWQ 4-bit — единственный формат, который 1Cat-vLLM «оживляет» на V100 через специальные ядра WMMA, ужимая модель до ~21 ГБ.
Нюансы реализации
— Память VM: vLLM резервирует swap. Выделяйте виртуальной машине не менее 24 ГБ ОЗУ.
— KV-кэш: Volta поддерживает только FP8-формат e5m2. Используйте --kv-cache-dtype fp8_e5m2.
— MTP (Speculative tokens): Если используете num_speculative_tokens=4, конфигурация графов должна быть кратна 5. Укажите --compilation-config '{"cudagraph_mode":"full_and_piecewise","cudagraph_capture_sizes":[5]}'.
— Tool calling: Для работы Hermes сервер запускается с параметрами --enable-auto-tool-choice --tool-call-parser qwen3_coder --reasoning-parser qwen3.
Архитектурная особенность Qwen3.6
Модель является гибридной: из 64 слоев только 16 используют классическое внимание с растущим KV-кэшем. Остальные 48 — это Gated DeltaNet (линейное внимание), кэш которого фиксирован. Это позволяет «втиснуть» 65k контекста в 32 ГБ суммарной VRAM.
Рабочая конфигурация
После всех настроек мы получаем функционирующий сервер с контекстом 65k:
CUDA_VISIBLE_DEVICES=0,1 \
VLLM_DISABLE_PYNCCL=1 \
VLLM_1CAT_DISABLE_QWEN35_MTP_DEFAULTS=1 \
python -m vllm.entrypoints.openai.api_server \
--model ~/models/Qwen3.6-27B-AWQ \
--served-model-name qwen36 \
--tensor-parallel-size 2 \
--dtype float16 \
--kv-cache-dtype fp8_e5m2 \
--gpu-memory-utilization 0.92 \
--max-model-len 65536 \
--max-num-seqs 1 \
--max-num-batched-tokens 512 \
--trust-remote-code \
--attention-backend TRITON_ATTN \
--disable-custom-all-reduce \
--skip-mm-profiling \
--limit-mm-per-prompt '{"image":0,"video":0}' \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder \
--reasoning-parser qwen3 \
--compilation-config '{"cudagraph_mode":"full_and_piecewise","cudagraph_capture_sizes":[1]}' \
--host 0.0.0.0 --port 8000
Скорость генерации составляет около 45 токенов в секунду. Основной минус — отключенный кэш префиксов, из-за чего каждый запрос требует полного пересчета промпта.
Главное ограничение: 65k контекста + Prefix Caching
Попытка включить кэширование префиксов (чтобы не пересчитывать системный промпт) приводит к ошибке Triton Error [CUDA]: out of memory. Для работы кэша в режиме align требуется дополнительная память под буферы DeltaNet, которая не помещается в лимит 32 ГБ. На данной связке невозможно одновременно иметь полный контекст и кэш.
Итоги и варианты развития
1. Оставить как есть: 27B-модель с полным контекстом без кэша — работает надежно, но с медленным prefill.
2. Сменить модель: Использовать Qwen3.5-9B-AWQ. Она позволяет активировать кэширование префиксов, MTP и комфортно работать с контекстом 65k, жертвуя качеством ответов, присущим 27B-моделям.
3. Добавить GPU: Использование трех карт позволит применить Pipeline Parallelism, распределив 21 ГБ весов и освободив место под кэш и все функции ускорителя.
Спецификация стенда: Proxmox, Ubuntu 22.04, 2× Tesla V100-SXM2-16GB, драйвер 580 / CUDA 13, 1Cat-vLLM 1.1.0, Qwen3.6-27B-AWQ.


