Запускаем Gemma 4 32B дома — проверяем на реальных задачах
Локальные модели становятся всё интереснее — и Gemma 4 32B стала хорошим поводом это проверить. Никакого облака, никаких API-ключей, никакой абонентской платы. Всё работает на своём железе, данные никуда не уходят.
Взял квантованную версию Q4_K_XS, скачал на huggingface.co — она весит 16 ГБ и как раз влезает в видеопамять. Запускал через LM Studio: скачал, загрузил, запустил.
Тестировать буду так, дам три живые задачи: генерация кода на C#, написание художественного текста и работа с SQL. Смотрим, что из этого выйдет.
Скорость 10–11 tok/s — рабочий минимум: думать можно, летать не получится.
Тест 1 Web API на C# (~450 символов) Промпт: сгенерировать ASP.NET Core API с JWT-аутентификацией, rate limiting и кастомным middleware. Разбираем: скомпилировался ли код сразу, насколько полная реализация, были ли логические ошибки. Мини-вывод.
Модель выдала полноценный рабочий проект, весь код публиковать здесь не буду, долго. Без уговоров и уточняющих вопросов — сразу структура: установка NuGet-пакета, кастомный RequestLoggingMiddleware с расширением для Program.cs, настройка JWT и AddRateLimiter с фиксированным окном, два контроллера — AuthController для генерации токена и DataController с атрибутами [Authorize] и [EnableRateLimiting].
Код скомпилировался без правок. Порядок middleware в пайплайне выдержан правильно: сначала логирование, затем аутентификация, авторизация и только потом rate limiter. Это не очевидная деталь — многие джуны путают порядок и получают баги.
Вывод по тесту: для генерации шаблонного backend-кода на C# модель справляется уверенно. Берёшь, вставляешь, запускаешь — работает.
Тест 2 Рассказ
Напиши рассказ (около 1000 символов) про учёного, который всю жизнь искал доказательство существования параллельных миров — и нашёл его в самый последний день своей жизни. Финал оставь открытым.
Профессор Элиас провел сорок лет в пыльных архивах и среди гудящих ускорителей. Его считали безумцем: он искал «точку разрыва» — зазор между реальностями, через который можно было бы заглянуть в соседний мир. Коллеги смеялись, гранты иссякли, а здоровье подвело. В свой последний день Элиас лежал в стерильной тишине больничной палаты. Приборы монотонно отсчитывали остатки его времени. Он смотрел на старый медный прибор, который собрал сам — детектор квантовых флуктуаций, который всю жизнь молчал. Вдруг стрелка дернулась. Затем запульсировала в такт его слабеющему сердцу. Воздух в комнате сгустился, и прямо перед глазами профессора пространство пошло рябью, как поверхность пруда. В этом мареве он увидел её — себя. Другой Элиас выглядел молодым и счастливым. Он стоял в светлой лаборатории, окруженный учениками, и держал в руках ту самую формулу, которую настоящий профессор не смог вывести до конца. Другой мир улыбнулся ему с облегчением и протянул руку, словно приглашая зайти. Элиас почувствовал, как холод смерти касается его ног, но в то же время ощутил тепло чужой ладони. Он закрыл глаза здесь, чтобы открыть их там? Или просто коснулся отражения перед тем, как исчезнуть?
Рассказ читабельный, атмосферный, задание выполнено. Для черновика — отлично, для публикации — лёгкая правка. Модель явно понимает нарративную структуру, не просто генерирует слова.
Тест 3 SQL задание
Есть три таблицы:
managers (id, name, region_id) regions (id, name) sales (id, manager_id, amount, sale_date)
Напиши SQL-запрос который:
- Берёт данные только за последние 3 месяца
- Считает сумму продаж каждого менеджера по его региону
- Считает общий оборот региона
- Вычисляет долю менеджера в процентах от оборота региона
- Выводит топ-3 менеджера в каждом регионе по сумме продаж
Используй CTE и оконные функции. База данных — PostgreSQL.
Что проверяем в ответе модели:
WITH — правильно ли строит цепочку CTE, не городит ли всё в один монструозный запрос.
SUM() OVER(PARTITION BY region_id) — понимает ли разницу между оконной агрегацией и GROUP BY.
ROW_NUMBER() OVER(PARTITION BY region_id ORDER BY total_sales DESC) — правильно ли нумерует внутри каждого региона отдельно.
Фильтр по дате — использует ли CURRENT_DATE - INTERVAL '3 months' или городит костыль.
Финальный фильтр WHERE rn <= 3 — понимает ли что нельзя фильтровать оконную функцию в том же SELECT где она объявлена.
Модель понимает как работают оконные функции, не путает их с GROUP BY, осознанно выбирает DENSE_RANK. Одна реальная ошибка с потерянным region_id — но её легко поймает компилятор. Для локальной 31B модели — сильный результат.
Вывод
Gemma 4 32B оказалась неожиданно сильным игроком для локального запуска. Три теста из разных областей — и ни в одном модель не провалилась.
По коду на C# она выдала рабочий проект без правок, причём правильно выстроила порядок middleware — деталь, на которой спотыкаются даже опытные разработчики. Художественный текст получился атмосферным и структурно грамотным — это не просто «набор слов», а осмысленный нарратив с открытым финалом. SQL-запрос показал понимание оконных функций, корректный фильтр по дате и осознанный выбор между ROW_NUMBER и DENSE_RANK. Единственная мелкая ошибка с region_id легко ловится на этапе компиляции.
Главное здесь — не абсолютное сравнение с GPT-4 или Claude. Главное — соотношение возможностей и условий работы: 16 ГБ, своё железо, никакого облака, никакой подписки, полная приватность данных. За эти ограничения модель не просто «справляется» — она справляется хорошо.
Для разработчика, которому важна автономность, или для задач с чувствительными данными — Gemma 4 32B Q4_K_XS сейчас один из лучших вариантов в своём классе.