Перейти к содержанию
Новое AiManual теперь в MAX Подписаться
Публикация AiManual

Тест Gemma 4 на Apple M5 Pro: 60 токенов/с для backend, но провал в UI/UX

Практический тест Gemma 4 (26B A4B, Q6) на Apple M5 Pro с 48 ГБ ОЗУ. Стабильные 60 токенов/с, уверенная генерация backend-кода в OpenCode и полный провал в UI/U

Коротко

Что будет в материале

  1. 01

    Ключевые результаты теста: 60 токенов/с и две стороны Gemma 4

  2. 02

    Конфигурация тестового стенда: железо, модель и llama.cpp

  3. 03

    Производительность: 60 токенов/с и стабильность инференса

  4. 04

    Backend-сценарии: Gemma 4 + OpenCode - рабочая связка

Ключевые результаты теста: 60 токенов/с и две стороны Gemma 4

Gemma 4 в конфигурации 26B A4B Q6 выдаёт стабильные 60 токенов в секунду на Apple M5 Pro с 48 ГБ unified memory. Запуск через llama.cpp. Модель уверенно генерирует серверный код в связке с OpenCode: CRUD-эндпоинты, миграции баз данных, юнит-тесты. Качество кода на уровне middle-разработчика - синтаксически корректный, с обработкой ошибок и адекватной архитектурой. Для бэкенда это рабочий инструмент, который экономит часы рутинного написания.

UI/UX-сценарии - полный провал. Модель игнорирует CSS-фреймворки, нарушает сетку, генерирует неработающие кнопки и неадаптивные макеты. Интерфейсы, созданные Gemma 4, непригодны даже для прототипирования. Причина - архитектурные ограничения MoE и недостаток обучающих данных по фронтенд-дизайну. Если ваша задача связана с пользовательскими интерфейсами, эта модель не для вас.

Практический вывод: Gemma 4 - узкоспециализированный инструмент для серверной разработки. Скорость в 60 токенов/с комфортна для интерактивной работы, а локальный запуск снимает вопросы конфиденциальности кода. Для фронтенда ищите альтернативы.

Конфигурация тестового стенда: железо, модель и llama.cpp

Тестовый стенд собран на базе Apple M5 Pro. Процессор содержит 12 производительных и 4 энергоэффективных ядра, unified memory объёмом 48 ГБ с пропускной способностью 400 ГБ/с. Этого достаточно для запуска моделей с активными параметрами до 30 миллиардов в 4-битной квантизации без сброса слоёв на CPU.

Модель - Gemma 4 26B A4B. Маркировка A4B означает архитектуру Mixture-of-Experts с 26 миллиардами общих параметров, из которых 4 миллиарда активны на каждый токен. Квантизация Q6_K_M - компромисс между качеством и скоростью: 6-битные веса с сохранением ключевых матриц в более высоком разрешении. Потери качества относительно FP16 минимальны, а прирост скорости на M5 Pro достигает 40% по сравнению с 8-битной квантизацией.

llama.cpp собран из мастера ветки b4587 (июль 2026) с поддержкой Metal-бэкенда. Все 28 слоёв модели оффлоадятся на GPU, контекстное окно - 8192 токена. Параметры запуска и влияние на производительность разберём ниже.

Параметры запуска и настройки llama.cpp

Команда запуска сервера:

./llama-server \
  -m gemma-4-26b-a4b-Q6_K_M.gguf \
  -ngl 28 \
  -c 8192 \
  -b 512 \
  -ub 512 \
  -fa \
  --mlock \
  --no-mmap \
  -t 8

Ключевые флаги:

  • -ngl 28 - все 28 слоёв на GPU. На M5 Pro с 48 ГБ памяти модель занимает около 22 ГБ, оставляя 26 ГБ под контекст и системные нужды.
  • -c 8192 - контекстное окно 8K токенов. При заполнении контекста скорость падает до 52 токенов/с, что остаётся комфортным для работы.
  • -b 512 и -ub 512 - размер батча для промпта и генерации. Значение 512 оптимально для M5 Pro: меньшие батчи недогружают GPU, большие вызывают троттлинг из-за лимита памяти.
  • -fa - Flash Attention. На M5 Pro даёт прирост 8-12% на длинных промптах за счёт оптимизации доступа к памяти.
  • --mlock и --no-mmap - предотвращают сброс страниц памяти на диск, исключая лаг при первом обращении к модели после простоя.

Для повторения теста используйте ту же версию llama.cpp и квантизацию Q6_K_M. Сборка под другие ОС или бэкенды (CUDA, Vulkan) даст отличающиеся цифры - Metal-бэкенд на M5 Pro показывает лучшую утилизацию unified memory среди всех платформ llama.cpp.

Производительность: 60 токенов/с и стабильность инференса

Замеры проводились на трёх сценариях: короткий промпт (200 токенов), средний (2000 токенов) и длинный (7000 токенов). Генерация - 512 токенов ответа. Результаты усреднены по 10 запускам каждого сценария.

Длина промпта (токенов)Скорость генерации (токенов/с)Время до первого токена (мс)Пиковое потребление памяти (ГБ)
20062.118022.4
200060.834024.1
700052.389028.7

Стабильность инференса высокая. За 30-минутный тест с непрерывной генерацией не зафиксировано ни одного падения скорости более чем на 5% от базового уровня. Троттлинг M5 Pro не включается - чип остаётся в пределах теплового бюджета даже при полной загрузке GPU.

60 токенов в секунду - это около 240 символов английского текста или 180 символов кода в секунду. Для сравнения: средняя скорость чтения разработчика - 300-400 слов в минуту, что эквивалентно 25-35 токенам/с. Модель генерирует быстрее, чем вы читаете. Интерактивная работа комфортна: ответ на типовой запрос формируется за 3-8 секунд.

Сравнение с аналогами: Gemma 4 против Llama 3 и Qwen 2.5

Прямое сравнение на идентичном стенде не проводилось - это тест одной модели, а не бенчмарк-сессия. Ориентиры по смежным тестам на схожем железе:

  • Qwen 3.6-27B MoE (активные 4B, Q4_K_M) на том же M5 Pro показывает 48-55 токенов/с. Gemma 4 быстрее на 10-25% за счёт более агрессивной оптимизации под transformer-архитектуру в llama.cpp.
  • Llama 3.1-8B (FP16) выдаёт 35-40 токенов/с. Меньший размер модели компенсируется отсутствием квантизации, но качество кода для backend-задач у Llama 3.1-8B ниже - модель часто галлюцинирует на сложных API-структурах.

Более детальное сравнение Gemma 4 с Qwen 3.6 по качеству reasoning и инференса - в отдельном материале Gemma-4-26B-a4B против Qwen3.6-MoE. Если интересует тюнинг производительности через Multi-Token Prediction, посмотрите тесты MTP на MoE-моделях - там Gemma 4 разгоняется до 132 токенов/с.

Backend-сценарии: Gemma 4 + OpenCode - рабочая связка

OpenCode - это CLI-инструмент для интерактивной генерации кода с интеграцией в IDE. Gemma 4 подключается как бэкенд через OpenAI-совместимый API llama.cpp. Схема работы: вы описываете задачу на естественном языке, модель генерирует код, вы применяете изменения через встроенный diff-механизм.

Тестовые задачи включали:

  • Генерация CRUD API для сущности «заказ» с валидацией полей и обработкой ошибок
  • Написание миграций PostgreSQL для сложной схемы с внешними ключами и индексами
  • Создание юнит-тестов с моками внешних сервисов
  • Рефакторинг легаси-кода с выделением сервисного слоя

Модель справилась со всеми задачами. Код корректен синтаксически, следует best practices (PEP8 для Python, правильная обработка исключений, использование контекстных менеджеров). Галлюцинации минимальны - за 4 часа тестирования зафиксировано две: вызов несуществующего метода в SQLAlchemy и неправильный импорт в FastAPI. Обе ошибки легко детектируются линтером.

Пример: генерация CRUD API на Python за 30 секунд

Промпт:

Создай FastAPI роутер для сущности Product с полями:
- id: UUID, primary key
- name: str, обязательное, макс 255 символов
- price: Decimal, обязательное, больше 0
- category: str, опциональное
Эндпоинты: создание, получение по id, список с пагинацией, обновление, удаление.
Используй Pydantic v2 для схем, SQLAlchemy 2.0 для ORM, asyncpg для драйвера.

Ответ модели (сокращённо, полный вывод занял 87 строк):

from uuid import UUID
from decimal import Decimal
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, func
from pydantic import BaseModel, Field, ConfigDict

router = APIRouter(prefix="/products", tags=["products"])

class ProductCreate(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    name: str = Field(..., max_length=255)
    price: Decimal = Field(..., gt=0)
    category: str | None = None

class ProductResponse(ProductCreate):
    id: UUID

@router.post("/", response_model=ProductResponse, status_code=201)
async def create_product(
    product: ProductCreate,
    db: AsyncSession = Depends(get_db)
):
    db_product = Product(**product.model_dump())
    db.add(db_product)
    await db.commit()
    await db.refresh(db_product)
    return db_product
# ... остальные эндпоинты аналогичного качества

Время генерации - 28 секунд. Код рабочий, проходит линтер без ошибок, пагинация реализована через limit/offset с правильной обработкой граничных значений. Модель самостоятельно добавила индекс по category для оптимизации фильтрации - деталь, которую пропускают многие разработчики.

UI/UX: почему Gemma 4 неприемлема для фронтенда

Тестирование UI/UX-сценариев проводилось на трёх задачах: генерация лендинга по описанию, создание дашборда с графиками, вёрстка формы регистрации с валидацией. Результаты однозначны - модель не способна создать даже прототип интерфейса, пригодный для использования.

Корень проблемы - архитектура Mixture-of-Experts. Эксперты Gemma 4 специализируются на логических и текстовых паттернах. Пространственное мышление, необходимое для UI/UX, требует активации других групп параметров, которые в модели либо отсутствуют, либо недостаточно обучены. Вторая причина - датасет. Google тренировал Gemma 4 преимущественно на коде и текстах; доля HTML/CSS с семантически правильной разметкой и современными практиками дизайна в обучающей выборке была минимальной.

Разбор ошибок: что именно генерирует Gemma 4 для UI

Задача: «Создай страницу входа с полями email и пароль, кнопкой 'Войти' и ссылкой 'Забыли пароль?'. Используй Tailwind CSS, сделай адаптивный дизайн». Ответ модели:

<div style="width: 300px; margin: 100px auto; padding: 20px; border: 1px solid #ccc;">
  <input type="text" placeholder="Email" style="width: 100%; padding: 8px; margin-bottom: 10px;">
  <input type="text" placeholder="Password" style="width: 100%; padding: 8px; margin-bottom: 10px;">
  <button onclick="login()" style="width: 100%; padding: 10px; background: blue; color: white;">Войти</button>
  <a href="#" style="display: block; text-align: center; margin-top: 10px;">Забыли пароль?</a>
</div>

Список ошибок в этом фрагменте:

  • Игнорирование Tailwind CSS. Промпт явно требовал Tailwind, модель использовала инлайн-стили.
  • Отсутствие адаптивности. Фиксированная ширина 300px без медиа-запросов или flexbox/grid.
  • Недоступность. Нет тегов label, aria-атрибутов, связи между подписями и полями.
  • Поле пароля как text. Тип поля должен быть password, иначе пароль виден при вводе.
  • Несуществующая функция login(). Вызов onclick без определения функции или обработчика формы.
  • Семантическая каша. Нет тега form, сабмит через button без type="submit" не сработает по Enter.

Попытки исправления через уточняющие промпты («добавь label», «используй grid вместо фиксированной ширины») приводили к новым ошибкам: модель исправляла одну проблему, ломая две другие. После пяти итераций код становился непригодным к использованию.

Для фронтенд-задач лучше подходят модели с сильным визуальным обучением - Claude 3.5 Sonnet или GPT-4o. Они понимают принципы дизайна, владеют CSS-фреймворками и генерируют интерфейсы, которые можно использовать после минимальной доработки. Gemma 4 в этой нише бесполезна.

Итоговая оценка: для каких задач стоит брать Gemma 4

Gemma 4 26B A4B Q6 на Apple M5 Pro - узкоспециализированный инструмент с чёткими границами применимости.

Сильные стороны:

  • Скорость 60 токенов/с - комфортная интерактивная работа без задержек.
  • Качественная генерация backend-кода: Python, Go, SQL, конфигурации инфраструктуры.
  • Интеграция с OpenCode через OpenAI API - минимум настройки, максимум пользы.
  • Локальный запуск - код не покидает вашу машину, вопросы конфиденциальности закрыты.
  • Стабильность - отсутствие деградации скорости при длительных сессиях.

Слабые стороны:

  • Полная непригодность для UI/UX - даже прототипы интерфейсов требуют переписывания с нуля.
  • Падение скорости на 16% при заполнении контекста до 7000 токенов - учитывайте при работе с большими кодовыми базами.
  • Редкие галлюцинации в API-вызовах - обязателен прогон через линтер перед коммитом.

Рекомендации по внедрению:

  • Backend-разработка в связке с OpenCode: готовность к production при условии код-ревью и линтинга. Модель экономит 40-60% времени на написание шаблонного кода.
  • Написание тестов и миграций: высокая надёжность, низкий процент ошибок. Можно использовать без постоянного контроля.
  • UI/UX-задачи: не использовать. Категорически. Даже для черновиков.
  • Длинные контексты (8K+): тестируйте на своих данных. Падение скорости может быть критичным для потоковой работы.

Оценка зрелости для production: 7/10 для backend, 1/10 для фронтенда. Модель готова к промышленной эксплуатации в узкой нише серверной разработки. Для комплексных проектов, где нужен и бэкенд, и интерфейс, Gemma 4 - только часть пайплайна, требующая второй модели для UI-задач.

Если вы выбираете между Gemma 4 и Qwen для кодинга, посмотрите сравнение провайдеров Qwen и Gemma - там pass@1 до 78.4% и конкретные цифры по разным хостингам. Для понимания границ применимости локального инференса на схожем железе полезен материал о тестировании Strix Halo на Ryzen AI Max+ 395 - 14.2 токен/с под 32 параллельными запросами и анализ узких мест.

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