Sakhanda Wire
NVDA $230.86 +1.09% MSFT $512.80 -0.02% GOOGL $338.24 -1.70% META $725.93 +0.10% AMZN $248.23 -0.37%
← К новостям

Perplexity открыла исходный код Lily — движка инференса на Rust + Metal для Qwen3.6-35B-A3B на Apple Silicon

Perplexity открыла исходный код Lily, локального движка инференса, лежащего в основе Hybrid Compute в Perplexity Computer. Это среда выполнения в одном процессе: слой на Rust загружает контрольную точку и управляет циклом генерации, API чат-завершений, совместимый с OpenAI, передаёт токены потоково, а написанные вручную ядра Metal выполняют модель. Ни PyTorch, ни MLX не используются в процессе выполнения. Lily намеренно ограничена одной моделью — Qwen3.6-35B-A3B, — одним семейством оборудования, и именно эта узкая специализация обеспечивает производительность.

Можно ли её развернуть? Да. Автономная демонстрационная версия опубликована в репозитории pplx-garden. Это сервер инференса на Rust и Metal, обеспечивающий жадную генерацию текста через минимальный HTTP API, совместимый с OpenAI. Контрольная точка в 4-битном формате занимает 19,4 ГБ, поэтому реалистичным минимальным вариантом будет Mac на Apple silicon с 32 ГБ или более унифицированной памяти; в поставляемом продукте Perplexity Hybrid Compute указаны macOS 15+, минимум 24 ГБ и 32 ГБ для наилучших результатов.

Зачем вообще специализироваться?

Стандартный стек для Mac — это MLX и MLX-LM, который уже включает реализацию Qwen с групповой обработкой экспертов, объединённым рекуррентным ядром Metal и вниманием с учётом GQA. Однако его операции должны оставаться повторно используемыми для разных архитектур. Lily отказывается от этого подхода, объединяя структуру модели, планы выполнения и выбор ядер в одной среде выполнения.

Три типа нагрузки

Qwen3.6-35B-A3B хранит 35 млрд параметров и активирует примерно 3 млрд на каждый токен. Маршрутизатор оценивает 256 экспертов и выбирает восемь из них, а также одного общего эксперта, который обрабатывает каждый токен. Модель также сочетает 10 слоёв полного внимания с использованием внимания с группировкой запросов (16 голов запросов, две головы KV) с 30 слоями Gated DeltaNet. В результате возникают три типа вычислений: неравномерные группы экспертов, внимание к растущему KV-кэшу и рекуррентная обработка фиксированного размера.

Предварительное заполнение: хранить веса упакованными, маршрутизацию выполнять на GPU

Контрольная точка использует групповое аффинное 4-битное квантование: каждая группа из 64 весов использует общий масштаб и смещение в формате bfloat16; примерно 70 ГБ весов bfloat16 сжимаются до 19,4 ГБ. Тензорные операции Metal 4 работают с bfloat16, поэтому веса сначала необходимо восстановить. Lily делает это по одной плитке внутри групповой GEMM, сохраняя результаты в памяти группы потоков и накапливая их в FP32, благодаря чему развёрнутый массив никогда не попадает в унифицированную память. В эксперименте Perplexity такое объединение повысило сквозную производительность предварительного заполнения на 77,4% при запросе длиной 512 токенов.

Хранение гистограммы маршрутизации, префиксного сканирования, распределения и карты блоков внутри одного командного буфера GPU обеспечило прирост на 89% при 512 токенах за счёт устранения синхронизации с CPU внутри каждого MoE-слоя. Переход от плиток на 16 строк к плиткам на 32 строки с четырьмя simd-группами дал прирост 13,2% при 2K; сканирование Gated DeltaNet с размещением в регистрах добавило 5,6%. На GEMM экспертов приходится примерно 90% времени предварительного заполнения. Длинные запросы обрабатываются ограниченными по размеру фрагментами, чтобы временные активации не конкурировали за память с весами и кэшем.

Декодирование: минимизировать объём перемещаемых данных на токен

При декодировании с размером пакета 1 повторное использование весов практически отсутствует, поэтому предел задаётся пропускной способностью. Один зафиксированный шаг запускал 795 ядер, формируя 555 последовательных стадий; Lily фиксирует реальные зависимости в параллельном проходе Metal, благодаря чему независимые ядра выполняются перекрывающимся образом. Выбранный токен записывается непосредственно в расположенный на GPU входной слот следующего шага, что устраняет обратный обмен с CPU для каждого токена, а четыре цепочки ядер объединяются, чтобы хранить промежуточные результаты в регистрах.

Коалесцированные чтения кэша повысили пропускную способность для ключей с 33,8 до 47,9 ГБ/с, а для значений — с 42,0 до 61,8 ГБ/с. Упаковка GQA, при которой четыре головы запросов используют одну группу потоков, так что каждая строка KV загружается один раз, улучшила декодирование на 23,8% при 32K. Схема внимания с фиксированными блоками при 32K и выше улучшила декодирование на 7,7% при 32K, на 27,4% при 64K и на 40,2% при 128K.

Результаты

На одном M5 Max с 40 ядрами и 128 ГБ памяти при размере пакета 1, при загрузке идентичных байтов 4-битной контрольной точки и сравнении с самым быстрым способом прямой генерации MLX-LM на десяти длинах от 256 до 128K токенов, Lily в среднем показала 4 156 токенов/с против 3 388 (1,23x) при предварительном заполнении и 170,0 токенов/с против 126,4 (1,35x) при декодировании. При запросе длиной 4K и контексте 4K она достигла показателей 5 749,9 и 186,6 токена/с против 4 737,5 и 140,9, а также была быстрее во всех зафиксированных точках: 1,12–1,42x при предварительном заполнении и 1,31–1,37x при декодировании. Проверка с принудительным выбором токенов на 192 позициях показала, что значение perplexity Lily было на 0,04% выше, при этом один и тот же токен занимал первое место в 96,35% случаев.

Ключевые выводы

  • Lily — это движок на Rust и Metal для Qwen3.6-35B-A3B на Apple silicon, в котором в процессе выполнения не используются PyTorch и MLX.
  • В среднем обеспечивает ускорение предварительного заполнения в 1,23 раза и декодирования в 1,35 раза по сравнению с MLX-LM на M5 Max с 40 ядрами и 128 ГБ памяти.
  • Наибольший прирост при предварительном заполнении: маршрутизация экспертов с размещением на GPU (+89%) и объединение деквантизации с групповой GEMM (+77,4%).
  • Наибольший прирост при декодировании: упаковка GQA (+23,8% при 32K) и внимание с фиксированными блоками (+40,2% при 128K).

Ознакомьтесь с техническими подробностями здесь и репозиторием на GitHub здесь. Также подписывайтесь на нас в Twitter и не забудьте присоединиться к нашему сабреддиту о машинном обучении с более чем 150 тыс. участников и подписаться на нашу рассылку. Постойте! Вы есть в Telegram? теперь к нам можно присоединиться и в Telegram.

Хотите сотрудничать с нами для продвижения своего репозитория GitHub, страницы на Hugging Face, выпуска продукта, вебинара и т. д.? Свяжитесь с нами

Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.

Впервые опубликовано изданием MarkTechPost

Читать оригинал на MarkTechPost ↗

Текст и изображения принадлежат MarkTechPost и приводятся здесь с указанием авторства и ссылкой на оригинальную публикацию.

← К новостям

Ещё новости

Все последние новости