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

Kyojin и EXL3: как запустить 300B MoE-модели на одном 128 ГБ мини-ПК Strix Halo

Yamz Labs собрала движок Kyojin на ExLlamaV3 и упаковала две MoE-модели класса 300B так, что каждая работает на одном Strix Halo со 128 ГБ: до 650 tok/s на преф

Коротко

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

  1. 01

    Что такое Kyojin и почему это важно для Strix Halo

  2. 02

    Какие модели запускаются: GLM-5.3-Flash и MiMo-V2.6-Flash-MOPD

  3. 03

    Производительность на Ryzen AI Max+ 395: цифры и режимы

  4. 04

    Качество квантизации: KLD и top-1 agreement

Yamz Labs выпустила движок Kyojin на базе ExLlamaV3 и упаковала две MoE-модели класса ~300B так, что каждая умещается на одной машине со 128 ГБ памяти. Все замеры первого релиза сделаны на мини-ПК с Ryzen AI Max+ 395 и встроенной графикой Strix Halo (gfx1151) под ROCm. GLM-5.3-Flash занимает 99,7 ГБ и выдаёт 580 токенов в секунду на префилле при промпте 3,5K, а MiMo-V2.6-Flash-MOPD занимает 105 ГБ и доходит до 44 токенов в секунду на декодировании кода в спекулятивном режиме.

Прямой ответ на главный вопрос: модель уровня 300B действительно запускается на одном устройстве с унифицированной памятью 128 ГБ. Дискретная видеокарта, стриминг весов с SSD на каждом токене и сборка из нескольких GPU в этой схеме не нужны. Плата за компактность другая: агрессивная квантизация и привязка к одной аппаратной платформе.

Ниже цифры из релиза, разбор качества квантов, команды для запуска и честный список того, что авторы пока не измеряли. Первоисточник данных - анонс Yamz Labs от 3 октября 2026 года.

Что такое Kyojin и почему это важно для Strix Halo

Kyojin - отдельный движок инференса, построенный поверх ExLlamaV3. Это не официальный форк проекта turboderp, а самостоятельная сборка Yamz Labs под конкретное железо. В основе лежат ROCm-наработки sdougbrown и vcruz305, целевая платформа - Strix Halo с идентификатором gfx1151.

Strix Halo интересен тем, что CPU и встроенная графика используют один пул памяти. В конфигурации на 128 ГБ под веса модели доступен весь этот объём, а не 16-24 ГБ видеопамяти дискретной карты. Ограничение тоже следует из архитектуры: одна машина, один поток запросов, никакого лёгкого апгрейда через второй GPU.

Ценность Kyojin в упаковке. Две MoE-модели класса ~300B разложены так, что каждая целиком живёт в 128 ГБ и не требует подкачки экспертов с диска. Для платформы без слотов под несколько карт это принципиально другой уровень рабочей нагрузки.

Ключевые особенности движка

  • База ExLlamaV3 и формат весов EXL3 с разной битностью на слой: в GLM-паке смешаны тензоры 2.05 и 3.05 bpw.
  • Поддержка ROCm для gfx1151, без CUDA и без NVIDIA.
  • Упаковка моделей под единый пул 128 ГБ с расчётом на один активный запрос.
  • Uncensored-режим: движок применяет при загрузке один небольшой файл, который отключается одним переключателем.
  • OpenAI-совместимый API через серверный скрипт serve.py.

Все измерения первого релиза выполнены на одной машине с Ryzen AI Max+ 395, поэтому цифры описывают конкретную конфигурацию, а не класс устройств целиком. Для сравнения: проект llama-halo-hybrid идёт другим путём и подключает к APU Strix Halo дискретную Radeon R9700 через PCIe, OcuLink или Thunderbolt, разгоняя декодирование выше 60 tok/s, но для одиночного APU без внешней карты он не предназначен. Подробности - в разборе гибридного запуска LLM на Strix Halo и Radeon R9700.

Какие модели запускаются: GLM-5.3-Flash и MiMo-V2.6-Flash-MOPD

Обе модели относятся к классу ~300B и построены на архитектуре MoE: на каждый токен активируется только часть параметров, поэтому скорость выше, чем у плотных моделей сопоставимого размера. Сводка по данным анонса:

МодельРазмерPrefillDecodeKLDTop-1
GLM-5.3-Flash99,7 ГБ580 tok/s при 3,5K, 546 tok/s при 64K26-30 tok/s (MTP)0,15189,3%
MiMo-V2.6-Flash-MOPD105 ГБоколо 650 tok/s при 4K29 tok/s обычно, до 44 tok/s на коде0,071392,0%

GLM-5.3-Flash: состав и происхождение весов

Пак весом 99,7 ГБ собран из публичных EXL3-тензоров turboderp 2.05 и 3.05 bpw. Поверх них Yamz Labs добавила собственное смешение слоёв и небольшой этап тюнинга. Качество относительно официального FP8: KLD 0,151 и совпадение top-1 на уровне 89,3%.

Сравнение с альтернативой конкретное: на одних и тех же 129 строках пак turboderp 2.05 bpw весом 85 ГБ даёт KLD 0,275, а собственное смешение Yamz Labs весом 100 ГБ - 0,190. Пак turboderp при этом меньше и декодирует примерно на 10% быстрее, так что выбор между качеством и скоростью здесь настоящий, а не маркетинговый.

MiMo-V2.6-Flash-MOPD: собственная квантизация

Модель занимает 105 ГБ, веса квантованы самими авторами, а не собраны из чужих тензоров. По метрикам это лучший вариант из двух: KLD 0,0713 и top-1 92,0%. Prefill около 650 tok/s при промпте 4K, декодирование 32 tok/s на прозе, 35 tok/s в чате, 44 tok/s на коде в спекулятивном режиме и 29 tok/s в обычном.

Полезный контекст про само семейство MiMo: высокие баллы в бенчмарках не всегда переносятся на реальные задачи. В разборе MiMo-V2.6-Pro и Flash: высокие бенчмарки против реальных задач показано, что модель может обходить собственную песочницу через git-команды, а Flash спотыкается на повреждённом worktree. Это отдельные наблюдения по другой сборке, но они напоминают: локальный квант стоит проверять на своих сценариях.

Производительность на Ryzen AI Max+ 395: цифры и режимы

Что такое prefill и decode и почему это важно

Prefill - обработка входного промпта: модель прогоняет все токены запроса и заполняет KV-кэш. Decode - генерация ответа по одному токену. Prefill определяет, сколько ждать до первого слова: при 580 tok/s тысяча токенов промпта обрабатывается примерно за 1,7 секунды, а 64 тыс. токенов на скорости 546 tok/s - около двух минут. Decode задаёт, как быстро появляется текст: 26-30 tok/s читаются быстрее, чем человек успевает осмыслять вывод.

Сравнение скорости двух моделей

MTP (multi-token prediction) и спекулятивное декодирование ускоряют генерацию: модель предсказывает несколько токенов вперёд, а основная сеть их проверяет. В quickstart это параметр --num-draft 2, то есть два драфт-токена. MiMo-V2.6-Flash-MOPD быстрее и на префилле (около 650 против 580 tok/s), и на декодировании (до 44 против 26-30 tok/s). У GLM-5.3-Flash префилл почти не проседает на длинном промпте: 580 tok/s при 3,5K и 546 tok/s при 64K, разница около 6%.

Оговорки к таблице: замеры сделаны на одной машине, без детального описания промптов и при одном потоке запросов. Реальная скорость зависит от длины контекста, длины ответа и того, сколько памяти осталось под KV-кэш. Точные формулировки и контекст замеров - в исходном анонсе.

Качество квантизации: KLD и top-1 agreement

Как интерпретировать KLD и top-1 agreement

KLD (KL-дивергенция) показывает, насколько распределение вероятностей следующего токена у квантованной модели расходится с оригиналом. Здесь точкой отсчёта взят официальный FP8. Чем ниже значение, тем ближе поведение: KLD около 0,2 и ниже для квантов такого класса считается приемлемым, значения порядка 0,05-0,1 - очень хорошими. У MiMo-V2.6-Flash-MOPD 0,0713, у GLM-5.3-Flash 0,151.

Top-1 agreement считает долю случаев, где самый вероятный токен совпал с FP8. 92,0% у MiMo и 89,3% у GLM означают, что модель почти всегда выбирает тот же токен, что и оригинал. Значение ниже 80% говорило бы о заметном сдвиге в генерации.

Обе метрики описывают вероятности, а не способности. Они не показывают, справится ли квант с кодом, математикой или длинным следованием инструкциям. Для таких выводов нужны оценки на задачах, которых в релизе нет.

Сравнение с альтернативными квантами

На тех же 129 строках расклад такой: 85-ГБ пак turboderp 2.05 bpw даёт KLD 0,275, 100-ГБ смешение Yamz Labs - 0,190, финальный GLM-пак - 0,151 относительно FP8. Разница в точности достигается ростом размера примерно на 15% и падением скорости декодирования около 10%. Если памяти впритык или нужна максимальная скорость, версия turboderp остаётся разумной альтернативой, о чём писали и сами авторы.

Uncensored-варианты и переключатель

Для моделей публикуются отдельные репозитории с пометкой Uncensored. Это не другие веса: движок получает те же тензоры плюс один небольшой файл, который применяется при загрузке. Один переключатель этот файл отключает, и поведение возвращается к обычному.

Технически это самое дешёвое вмешательство из возможных: не нужно хранить вторую копию модели на 100 ГБ и не нужно пересобирать квант. Влияние файла на логику модели и на отказы от чувствительных запросов авторы не измеряли, так что оценивать эффект придётся самостоятельно. Ответственность за использование такого режима лежит на пользователе.

Как запустить: quickstart и OpenAI-совместимый API

Порядок из анонса: склонировать репозиторий, собрать движок, скачать веса через Hugging Face CLI и поднять сервер.

./build.sh
hf download yamz-labs/GLM-5.3-Flash-EXL3-Yamz
python tools/glm/serve.py --model ./glm-pack -c 131072 --num-draft 2

После старта сервер отдаёт OpenAI-совместимый API, поэтому к нему подключается любой клиент, работающий с этим форматом. Для MiMo-V2.6-Flash-MOPD набор команд отличается: серверный скрипт лежит в другой директории tools, точные аргументы стоит смотреть в репозитории.

Требования к системе

Strix Halo (gfx1151), 128 ГБ унифицированной памяти, ROCm и Linux. Работа на других GPU не измерялась, движок собран под конкретный чип. Запуск на GeForce, сторонних Radeon или Apple Silicon в этом релизе не заявлен.

Настройка параметров запуска

Флаг -c 131072 задаёт контекст 131 072 токена, то есть 128K. Чем длиннее контекст, тем больше памяти уходит на KV-кэш и тем меньше остаётся под веса и служебные буферы. --num-draft 2 включает спекулятивное декодирование с двумя драфт-токенами: генерация ускоряется, но добавляются накладные расходы и память под драфт. GLM-пак занимает 99,7 ГБ из 128 ГБ, поэтому запас ограничен, и параметры контекста стоит подбирать под свою задачу, а не выставлять максимум по умолчанию.

Ограничения и что осталось за кадром

Отсутствие тестов на задачах

Оценок на task-suite для MiMo-V2.6-Flash-MOPD нет. Качество квантизации подтверждено только через KLD и top-1 agreement, а это вероятностные метрики, не проверка на реальных задачах. Поведение GLM-пака на контексте 128K не измерено, хотя флаг -c 131072 такой контекст разрешает. Uncensored-варианты тоже не тестировались. Пайплайн конвертации весов остаётся закрытым: воспроизвести сборку GLM-пака с нуля по опубликованным шагам нельзя.

Практический вывод простой: перед тем как ставить модель в рабочий процесс, прогоните её на своих данных. Разница между 89,3% и 92,0% совпадения top-1 на общей статистике мало что говорит о конкретном коде, юридическом тексте или аналитике.

Поддержка других GPU

Все замеры сделаны на gfx1151, и на другие GPU производительность не переносится. Если у вас NVIDIA или Apple Silicon, смотрите в сторону других решений. Практику запуска MoE-моделей на одной видеокарте с offload экспертов разбирает материал о запуске MoE-модели весом 204 ГБ на одной видеокарте и оптимизации VRAM-кэша в llama.cpp, а пример собственного движка под конкретную архитектуру описан в разборе Strata: как собственный движок инференса разгоняет Qwen3.8-Flash-Next до 65 ток/с на 12 ГБ VRAM.

Стоит ли пробовать: выводы и рекомендации

Kyojin закрывает узкую, но важную нишу: MoE-модель класса 300B на мини-ПК с унифицированной памятью, без дискретных карт и без чтения весов с SSD на каждом токене. Если у вас есть Strix Halo на 128 ГБ и вы готовы к экспериментам, это один из немногих способов получить модель такого масштаба локально.

Выбор между двумя моделями по цифрам однозначен. MiMo-V2.6-Flash-MOPD быстрее (до 44 tok/s на коде, около 650 tok/s на префилле) и точнее относительно FP8 (KLD 0,0713, top-1 92,0%). GLM-5.3-Flash медленнее и оцифрован грубее, зато собран из публичных тензоров turboderp, и для него есть 85-ГБ альтернатива, если размер и скорость важнее точности.

Что делать дальше: склонировать репозиторий, поднять сервер по quickstart и прогнать оба кванта на двух-трёх своих типовых запросах, включая длинный контекст. Держите в голове привязку к gfx1151 и отсутствие task-suite-оценок, следите за обновлениями движка и помните, что это первый релиз, в котором баги вполне вероятны.

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