Перейти к содержимому
Экосистема AI Vibe
← Назад к AI Vibe News

Редакция 14 августа 2026 г.

Разборы

Gemma 4 E2B на EC2 G5g: свой inference там, где готовых сборок нет

Gemma 4 E2B на EC2 G5g: свой inference там, где готовых сборок нет

Соло-разработчик, который поднимает LLM у себя в облаке вместо управляемого API, упирается не в выбор фреймворка, а в дыры экосистемы под редкое железо. На связке aarch64 + SM 7.5 — единственной у AWS на инстансах G5g — готовые артефакты для vLLM не покрывают архитектуру, а узкое место оказывается вовсе не в драйвере. В полевом отчёте разобран деплой Gemma 4 E2B через vLLM на g5g.4xlarge: что AWS уже закрыл в AMI, что придётся собирать вручную и почему без патча attention-ядра модель не стартует.

Почему aarch64 и Turing — мёртвая зона для готовых образов

Инстанс G5g — единственный тип в AWS, где NVIDIA GPU стоит за Graviton-хостом. На тестовой конфигурации g5g.4xlarge — Graviton2 плюс одна NVIDIA T4G с compute capability 7.5 и 15 360 MiB видеопамяти. Другого сочетания aarch64 + SM 7.5 в линейке AWS нет; индустрия давно сместилась к Grace и SM 9.0/10.0.

Для локального inference это значит одно: экосистема не держит эту платформу в приоритете. Образ vllm/vllm-openai arm64 (v0.27.1) перечисляет arch 8.0…12.0, тогда как amd64-вариант включает 7.5. На arm64 sm_75 отсутствует — и vLLM не деградирует в JIT из PTX: PTX-флаг отфильтровывается, на устройстве остаётся no kernel image is available for execution on the device.

Артефакт sm_75 на arm64 Состояние
vllm/vllm-openai arm64 нет единственное расхождение arch lists с amd64
nvcr.io/nvidia/pytorch arm64 до 24.10 убрано к 24.12
drikster80/vllm-aarch64 да заброшен (сент. 2024), vLLM 0.6.1 — слишком стар для Gemma 4
PyPI torch aarch64 нет 9.0 / 10.0 / 12.0
AWS ARM64 GPU DLAMI да PyTorch 2.2–2.12

Сторонние колёса и контейнеры не спасают: придётся либо менять железо, либо собирать inference-стек под Turing на arm64 с нуля.

Что AWS уже закрыл в DLAMI — и что остаётся на вас

Формулировка «AWS тихо решает половину проблемы» относится не к драйверу и не к «магии» AMI, а к PyTorch на aarch64 с поддержкой sm_75. На Deep Learning ARM64 GPU AMI проверено:

  • torch 2.7.0+cu128['sm_75', 'sm_90', 'sm_100', 'sm_120']
  • torch 2.12.0+cu132['sm_75', 'sm_80', 'sm_90', 'sm_100', 'sm_110', 'sm_120']

AWS продаёт G5g — значит, сохраняет Turing в сборке PyTorch вплоть до 2.12 на CUDA 13.2. Собирать из исходников нужен только vLLM со своими CUDA-ядрами, не весь PyTorch.

Из коробки DLAMI не даёт nvcc и полный CUDA toolkit. Перед сборкой vLLM понадобятся cuda-toolkit-13-2 из sbsa-репозитория NVIDIA (не x86) и Rust toolchain для vllm-rs / setuptools_rust. Базовый образ в отчёте — Deep Learning ARM64 AMI OSS Nvidia Driver GPU PyTorch 2.12 (Ubuntu 24.04).

Для соло-workflow вывод простой: половина пути — в правильной AMI, вторая — в часах компиляции и отладки ядер под вашу GPU.

Лимит 64 KiB shared memory: где ломается Gemma 4

Жёсткий блокер — не Docker и не версия CUDA, а attention backend под конкретную архитектуру модели. Gemma 4 E2B (google/gemma-4-E2B-it) имеет гетерогенные размеры голов: sliding layers — 256, global layers — 512. FA4 недоступен, vLLM принудительно выбирает TRITON_ATTN — в v0.27 переменная VLLM_ATTENTION_BACKEND игнорируется с предупреждением.

Triton unified attention kernel при head_size=512 запрашивает около 96 KiB shared memory на блок. У NVIDIA T4G статический лимит — 48 KiB; с dynamic shared memory потолок — 64 KiB (65 536 байт). Ошибка на железе: Required: 98304, Hardware limit: 65536.

Фикс из отчёта — локальный патч vllm/v1/attention/ops/triton_unified_attention.py: уменьшение KV-тайлов и launch_num_stages = 1 для pre-Ampere (capability < 8). Патч не в upstream vLLM; при апгрейде vLLM его придётся повторять.

Сборка vLLM и минимальный чеклист деплоя

Минимальная версия vLLM для Gemma 4 — v0.27.2rc0+: на v0.26.0 и v0.27.1 падает AmbiguousGlobalPerLayerAttributeError на head_dim. Сборка с TORCH_CUDA_ARCH_LIST=7.5 и use_existing_torch.py; CMake фиксирует -- CUDA target architectures: 7.5. На g5g.4xlarge при MAX_JOBS=12 компиляция заняла около 67 минут — значительная доля ушла на FlashAttention для arch sm80+, неприменимых на T4G.

Параметры сервинга из отчёта:

Параметр Значение
Модель google/gemma-4-E2B-it (reference bf16)
Инстанс g5g.4xlarge
Стек torch 2.12.0+cu132 · CUDA 13.2 · vLLM v0.27.2rc0+
Сервинг --dtype float16, --kv-cache-dtype auto
Обязательно патч Triton attention для Turing
TORCH_CUDA_ARCH_LIST=7.5 python use_existing_torch.py

Начинать стоит с последнего релиза vLLM и откатываться только с явной фиксацией блокера — иначе легко застрять на старой версии, которая Gemma 4 просто не понимает.

Как не обмануться health-check'ом и цифрами

После патча engine init занял около 76,4 с; single-stream greedy — 43,1 tok/s при длине 256; KV cache — 2,95 GiB на 329 579 токенов; при сервинге занято 13 501 из 15 360 MiB GPU memory. Это единичный замер, нижняя граница, не характеризация — сравнивать с Inferentia (~44 tok/s E2B) бессмысленно: другой контур тестов и другой кремний.

Ловушка на финише — endpoint /v1/completions: может вернуть мусор (': ok: ok: ok: ok'), а не пустое тело. Проверять нужно /v1/chat/completions.

Конфигурация g5g.xlarge (8 GiB host RAM) против 9,5 GiB весов модели не тестировалась — гипотеза про mmap через safetensors остаётся гипотезой.

Если вы держите inference локально или на своём облаке, этот кейс — напоминание: редкая GPU-архитектура бьёт не по лицензии модели, а по тайлам в attention-ядре и по списку arch в Docker Hub. Закладывайте время на сборку, патч и повтор при каждом мажорном апгрейде vLLM.

Источники