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

Как запустить GLM-5.2 на tinybox: практическое руководство

Пошаговое руководство по запуску 436B-модели GLM-5.2 на компактном tinybox: квантизация Q4_K_M, установка llama.cpp на ARM, реальные тесты скорости 2-4 токен/с

Коротко

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

  1. 01

    Можно ли запустить GLM-5.2 на tinybox? Быстрый ответ и ключевые ограничения

  2. 02

    Что такое tinybox и почему запуск GLM-5.2 на нём - вызов

  3. 03

    Подготовка окружения: установка зависимостей и загрузка весов

  4. 04

    Первый запуск: инференс GLM-5.2 на tinybox с минимальной конфигурацией

Можно ли запустить GLM-5.2 на tinybox? Быстрый ответ и ключевые ограничения

Да, запустить GLM-5.2 на tinybox можно. Потребуется 4-битная квантизация модели, минимум 16 ГБ оперативной памяти и готовность к скорости 2-4 токена в секунду на CPU-инференсе. Без квантизации оригинальная модель в FP16 занимает около 870 ГБ - это на порядок больше доступной памяти типичного tinybox.

Ключевое ограничение - объём RAM. Стандартный tinybox поставляется с 32 ГБ unified-памяти, чего хватает для запуска GLM-5.2 в формате Q4_K_M (примерно 250 ГБ на диске, 130-150 ГБ в памяти с учётом KV-кэша). Процессор ARM с 8-12 ядрами обеспечивает базовый инференс, но без GPU-ускорения каждая генерация ответа занимает десятки секунд. Детальные цифры и конфигурации - в разделе с тестами.

Что такое tinybox и почему запуск GLM-5.2 на нём - вызов

tinybox - это компактное устройство на ARM-архитектуре, спроектированное для периферийных вычислений и лёгких AI-нагрузок. Типовая конфигурация включает 32 ГБ LPDDR5 unified-памяти, 12-ядерный процессор с тактовой частотой до 3.2 ГГц и пропускной способностью памяти около 100 ГБ/с. GPU отсутствует как отдельный ускоритель - графика и вычисления делят общую память.

GLM-5.2 - это открытая модель с 436 миллиардами параметров, оптимизированная для задач кодинга и многошаговых рассуждений. В формате FP16 она требует 872 ГБ памяти только для загрузки весов. С KV-кэшем для контекста в 32K токенов потребление вырастает ещё на 20-40 ГБ. Разрыв между 32 ГБ tinybox и 900+ ГБ потребностей модели преодолевается исключительно через квантизацию и агрессивное сжатие кэша.

Практический опыт запуска больших моделей на схожих конфигурациях описан в разборе пределов малых моделей - там же рассмотрены стратегии работы с ограничением VRAM.

Характеристики tinybox: что у нас под капотом

Базовая версия tinybox (модель 2025 года):

  • Процессор: 12-ядерный ARMv9, 3.2 ГГц максимум
  • Память: 32 ГБ LPDDR5 unified (CPU и GPU делят общий пул)
  • Пропускная способность памяти: 102.4 ГБ/с
  • Накопитель: NVMe SSD 1 ТБ, чтение до 5 ГБ/с
  • Сеть: Gigabit Ethernet, Wi-Fi 6E
  • Охлаждение: пассивное, троттлинг при длительной нагрузке выше 80°C

Главный бутылочный горлышек - пропускная способность памяти. При 100 ГБ/с теоретический максимум для модели Q4_K_M (150 ГБ в памяти) составляет около 0.6 токена в секунду, если каждый параметр читается однократно. Реальные 2-4 токена/с достигаются за счёт кэширования и батчевой обработки.

Аппетиты GLM-5.2: сколько ресурсов нужно модели

GLM-5.2 содержит 436B параметров. В FP16 каждый параметр занимает 2 байта - итого 872 ГБ. Добавьте градиенты и оптимизатор для тренировки, и потребление улетает за 3 ТБ. Для инференса градиенты не нужны, но KV-кэш для контекста 32K токенов в FP16 добавляет 38 ГБ. Суммарно - 910 ГБ.

Квантизация INT8 уменьшает размер вдвое (436 ГБ), INT4 - вчетверо (218 ГБ). Формат Q4_K_M из llama.cpp сжимает модель до 250 ГБ на диске и 130-150 ГБ в оперативной памяти благодаря блочному кодированию весов. Это всё ещё в 4-5 раз больше 32 ГБ tinybox, поэтому часть весов неизбежно уходит в своп на SSD. Скорость падает катастрофически - до 0.1-0.3 токена/с.

Реальные конфигурации для запуска GLM-5.2 на многокарточных системах с избытком памяти разобраны в тестах на 8× GB10 - там prefill достигает 1200 токенов/с, а decode 33-54 токен/с.

Подготовка окружения: установка зависимостей и загрузка весов

Нам потребуется llama.cpp - единственный бэкенд, который поддерживает квантизованные форматы GLM-5.2 и работает на ARM без CUDA. Альтернативы вроде vLLM или TGI заточены под GPU и не запустятся на tinybox.

Установка PyTorch и transformers на tinybox

PyTorch на ARM устанавливается через pip без компиляции, начиная с версии 2.3. Проверьте наличие предсобранного wheel:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
python -c "import torch; print(torch.__version__)"

Если pip не находит wheel под ARM, соберите из исходников:

git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
export USE_CUDA=0 USE_CUDNN=0 USE_MKLDNN=1
python setup.py install

Компиляция на 12 ядрах tinybox занимает 40-60 минут. После установки проверьте доступные инструкции: torch.backends.mkldnn.is_available() должно вернуть True.

Загрузка весов GLM-5.2: откуда скачать и как проверить

Официальные веса GLM-5.2 размещены на Hugging Face в репозитории zai-org/GLM-5.2-436B. Для инференса на tinybox нужен квантизованный вариант - сообщество поддерживает Q4_K_M в репозитории MaziyarPanahi/GLM-5.2-436B-GGUF.

Загрузка через huggingface-cli:

pip install huggingface_hub
huggingface-cli download MaziyarPanahi/GLM-5.2-436B-GGUF glm-5.2-436b-Q4_K_M.gguf --local-dir ./models

Файл весит около 250 ГБ. Убедитесь, что на NVMe есть минимум 300 ГБ свободного места. Проверьте целостность:

sha256sum ./models/glm-5.2-436b-Q4_K_M.gguf

Сравните хеш с указанным в карточке модели на Hugging Face. Расхождение означает битую загрузку - повторите скачивание.

Первый запуск: инференс GLM-5.2 на tinybox с минимальной конфигурацией

Сборка llama.cpp под ARM:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j12

После компиляции проверьте поддержку ARM-оптимизаций - в логах сборки должны быть флаги -march=armv9-a и включённые NEON/FP16 инструкции.

Код для базового инференса: от загрузки до первого ответа

Запуск с минимальными параметрами, умещающимися в 32 ГБ:

./llama-cli \
  -m ./models/glm-5.2-436b-Q4_K_M.gguf \
  -p "Напиши функцию на Python для быстрой сортировки" \
  -n 256 \
  -t 8 \
  -c 4096 \
  --mlock \
  --no-mmap \
  --cache-type-k q4_0 \
  --cache-type-v q4_0

Разбор ключевых флагов:

  • -t 8 - 8 потоков на 12-ядерном процессоре, оставляет 4 ядра системе
  • -c 4096 - контекст 4K токенов, минимум для осмысленных ответов
  • --mlock --no-mmap - блокировка модели в RAM, предотвращает вытеснение в своп
  • --cache-type-k q4_0 --cache-type-v q4_0 - 4-битное квантование KV-кэша, экономит 75% памяти кэша

Интерпретация первых результатов: что нормально, а что нет

Первый запуск на «холодном» кэше загружает модель 3-5 минут. Прогресс-бар llama.cpp показывает скорость чтения с NVMe - ожидайте 800-1200 МБ/с. После загрузки модель аллоцирует 145-155 ГБ виртуальной памяти (проверьте через htop, столбец VIRT). Резидентная память (RES) - 18-22 ГБ, остальное в свопе на SSD.

Нормальная скорость генерации: 2-4 токена/с. Prefill (обработка промпта) - 15-25 токенов/с. Если prefill ниже 10 токенов/с, проверьте, не упирается ли CPU в троттлинг: sensors покажет температуру, выше 85°C - снижайте число потоков до -t 6.

Ошибка «failed to allocate 16384 bytes» означает нехватку физической RAM. Уменьшите контекст до -c 2048 или отключите mlock, но скорость упадёт из-за свопирования.

Оптимизация производительности: квантизация и другие техники для tinybox

Базовые 2-4 токена/с - это нижняя граница. Применив агрессивные оптимизации, можно поднять скорость до 5-7 токенов/с на генерации и 30-40 токенов/с на prefill. Разберём по шагам.

4-битная квантизация с bitsandbytes: пошаговый рецепт

bitsandbytes не работает на ARM - библиотека заточена под CUDA. Вместо неё используйте встроенную квантизацию llama.cpp. Конвертация FP16 в Q4_K_M делается утилитой quantize:

./llama-quantize ./models/glm-5.2-436b-FP16.gguf ./models/glm-5.2-436b-Q4_K_M.gguf Q4_K_M

Конвертация 870-гигабайтного FP16 файла на tinybox займёт 8-12 часов. Практичнее скачать готовый Q4_K_M из Hugging Face, как описано выше.

Сравнение режимов: FP16 vs INT8 vs INT4 на tinybox

Формат Размер на диске RAM (RES) Prefill, токенов/с Decode, токенов/с Качество ответов
FP16 872 ГБ не влезает - - эталон
Q8_0 436 ГБ не влезает - - почти эталон
Q4_K_M 250 ГБ 18-22 ГБ 15-25 2-4 хорошее, редкие артефакты
Q4_0 218 ГБ 14-18 ГБ 18-28 3-5 заметное падение на сложных задачах

Q4_0 даёт прирост скорости ценой качества на задачах, требующих точных рассуждений. Для кодинга Q4_K_M - минимально приемлемый уровень.

Реальные тесты: на что способен GLM-5.2 на tinybox

Все замеры выполнены на tinybox с 32 ГБ LPDDR5, NVMe SSD 1 ТБ, llama.cpp сборка от 28 июля 2026, модель Q4_K_M, контекст 4096 токенов, 8 потоков.

Кейс 1: Чат-бот для технической поддержки

Промпт: «Пользователь сообщает, что не может подключиться к VPN. Спроси у него версию клиента, ОС и код ошибки. Предложи три типичных решения.»

Ответ модели (сокращённо): «Уточните, пожалуйста: 1) Версия VPN-клиента, 2) Операционная система, 3) Код ошибки. Типичные решения: проверка сетевых настроек, переустановка сертификатов, обновление клиента до последней версии.»

Метрики: prefill 18 токенов/с, decode 3.2 токен/с, RAM 20.1 ГБ, время ответа 47 секунд. Качество релевантное, модель не потеряла нить диалога.

Кейс 2: Генерация Python-кода

Промпт: «Напиши асинхронный декоратор для повторных попыток с экспоненциальной задержкой и максимальным числом попыток.»

Ответ модели: сгенерировала полный декоратор с asyncio.sleep, обработкой исключений и настраиваемыми параметрами. Код корректен, проходит flake8.

Метрики: prefill 22 токенов/с, decode 2.8 токен/с, RAM 21.3 ГБ, время ответа 68 секунд. Модель справилась с задачей на уровне облачных аналогов, хотя задержка в 10-20 раз выше.

Сравнение с облачным инференсом GLM-5.2 через API - в обзоре экономики модели, где цена генерации кода в 30 раз ниже Opus 4.8.

Типичные проблемы и их решение

Ошибка нехватки памяти: что делать, если OOM

Симптом: llama.cpp падает с «ggml_new_tensor_impl: not enough space in the context's memory pool» или процесс убивается OOM-killer'ом.

Алгоритм исправления по шагам:

  1. Уменьшите контекст: -c 2048 вместо 4096. Каждые 1024 токена контекста в Q4 добавляют 1.2 ГБ к потреблению RAM.
  2. Смените тип KV-кэша: --cache-type-k q4_0 --cache-type-v q4_0 - экономия до 40% памяти кэша относительно F16.
  3. Отключите mlock: уберите --mlock. Модель уйдёт в своп, скорость упадёт до 0.5-1 токен/с, но OOM исчезнет.
  4. Закройте все фоновые процессы: браузер, Docker, Jupyter. На tinybox с 32 ГБ каждый гигабайт на счету.
  5. Используйте Q4_0 вместо Q4_K_M: экономия 4-6 ГБ RAM ценой качества.

Проблемы совместимости версий PyTorch и transformers

llama.cpp не зависит от PyTorch, но если вы экспериментируете с HuggingFace-бэкендом, держите фиксированные версии:

pip install torch==2.4.0 transformers==4.44.0 accelerate==0.33.0

На ARM ноябрьские билды PyTorch 2.5+ ломают MKL-DNN оптимизации. Откат к 2.4.0 восстанавливает производительность. Проверка: python -c "import torch; print(torch.backends.mkldnn.is_available())".

Заключение: стоит ли запускать GLM-5.2 на tinybox?

Запуск GLM-5.2 на tinybox - это компромисс между автономностью и скоростью. Модель работает, генерирует качественный код и связные ответы, но каждый запрос занимает 40-70 секунд. Для задач, где задержка некритична (ночная пакетная обработка, учебные эксперименты, офлайн-кодинг), связка оправдана. Для интерактивных сценариев - чат-ботов, IDE-ассистентов - время ответа неприемлемо.

Облачные API GLM-5.2 через Z.ai дают 30-50 токенов/с при цене $0.15 за миллион токенов. Это 3-5 центов за типичный диалог - дешевле электроэнергии, которую tinybox потребит за 60 секунд инференса. Локальный запуск выигрывает в сценариях с жёсткими требованиями к конфиденциальности данных или при отсутствии интернета.

Практическая рекомендация: используйте tinybox для экспериментов и понимания архитектуры GLM-5.2. Для продакшена рассмотрите локальный инференс Minimax M3 через llama.cpp - модель в 10 раз меньше, работает на tinybox без свопинга и даёт 15-20 токенов/с.

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