Все проекты

MTP-RDMA инференс-кластер

Тензорный 27B на двух Mac по Thunderbolt RDMA — ~70 → 90–100 tok/s.

MLXThunderbolt RDMAPython
Логотип MTP-RDMADev-story
01

Задача

Хотели быстрый локальный LLM для своего кодинг-агента (Pi) без облачного API, но 27B на одном Mac декодирует лишь ~60–73 tok/s.

02

Что делали

Собрали свой нативный MTP-рантайм (multi-token prediction) и запустили тензорный параллелизм MLX с распределённым паттерном на двух Mac по линии Thunderbolt RDMA: оба ранга крутят один цикл генерации, а rank 0 отдаёт OpenAI-совместимый API; Swift-приложение в меню-баре и демон управления сами находят узлы и поднимают пару при логине.

03

Результат

Пара декодирует ~85–100 tok/s (медиана ~95 fast / ~86 smart) против ~60–73 solo и локально питает наш агент Pi с TTFT ~0,5 с.

Dev-story статья

MTP-RDMA инференс-кластер: как создавался проект

Со своим кодинг-агентом Pi мы работаем весь день и не хотели, чтобы его мозг был арендованным облачным API. Но 27B на одном Mac декодирует лишь ~60-73 tok/s: годится, но не быстро. Интересный вопрос — могут ли два обычных Mac, соединённых кабелем, вести себя как одна большая машина.

Разделы

05

Модули

05

Стек

MLX + Thunderbolt RDMA

01

Почему появился проект

Хотели быстрый локальный LLM для своего кодинг-агента (Pi) без облачного API, но 27B на одном Mac декодирует лишь ~60–73 tok/s.

Со своим кодинг-агентом Pi мы работаем весь день и не хотели, чтобы его мозг был арендованным облачным API. Но 27B на одном Mac декодирует лишь ~60-73 tok/s: годится, но не быстро. Интересный вопрос — могут ли два обычных Mac, соединённых кабелем, вести себя как одна большая машина.

02

Что было создано

Собрали свой нативный MTP-рантайм (multi-token prediction) и запустили тензорный параллелизм MLX с распределённым паттерном на двух Mac по линии Thunderbolt RDMA: оба ранга крутят один цикл генерации, а rank 0 отдаёт OpenAI-совместимый API; Swift-приложение в меню-баре и демон управления сами находят узлы и поднимают пару при логине.

Соединили два Mac кабелем Thunderbolt с RDMA и разбили 27B по обоим тензорным параллелизмом MLX. Оба ранга крутят ровно один цикл генерации, а rank 0 отдаёт OpenAI-совместимый API, с которым говорит Pi. Swift-приложение в меню-баре и небольшой демон управления сами находят оба узла и поднимают пару при логине; если один Mac отвечает solo, по кнопке Start Pair он вливается в пару и безопасно возвращает управление при остановке.

03

Основные модули и путь пользователя

M01

Пара против solo решена замером, а не ощущением: solo ~60-73 tok/s, пара ~85-100 (медиана ~95 без размышления, ~86 с ним). Выигрывает топология — та же модель, разбитая на два бокса, — а не модель побольше.

M02

Матрица устройств, решающая, какой Thunderbolt-интерфейс с каким говорит, выводится из живого интерфейса на старте, так что ничего про конкретный Mac не захардкожено, а свежая машина воспроизводит измеренную среду.

M03

Сам серверный 27B мы дотюнили длинным A/B: этап сокращения размышления срезал ~24-31% reasoning-токенов без измеримой потери качества, а быстрый и умный профили оба обслуживаются из одной загруженной копии весов, так что смена профиля не стоит перезагрузки.

M04

Мы сознательно не переписывали рантайм на другой язык: замерили, что доля Python в декоде лишь ~1-3%, а аудит лицензии показал, что переписывание не даёт и юридической выгоды. Два соблазнительных тупика, отвергнутых доказательствами, а не предположением.

M05

Под долгой нагрузкой важной оказалась температура: вентиляторы восстанавливаются через сокет демона, а не убивающую приложение CLI, а патченый вычислительный слой A/B-сравнили со стоком и оставили — он на ~10-14% быстрее.

04

Архитектура и технологические решения

Сделано на MLX, Thunderbolt RDMA, Python.

Swift-приложение в меню-баре и демон управления (native Login Item, автообнаружение узлов, без SSH в проде) ведут тензорный параллелизм MLX по Thunderbolt RDMA; rank 0 отдаёт OpenAI-совместимый API, обслуживание мультимодальное (текст и изображение), а герметичные самотесты узла и повторы паритета скорости служат стражами регрессий при приватном Python и Swift CI.

05

Результат и выводы

Пара декодирует ~85–100 tok/s (медиана ~95 fast / ~86 smart) против ~60–73 solo и локально питает наш агент Pi с TTFT ~0,5 с.

Приватный, работающий на устройстве 27B, декодирующий ~95 tok/s и питающий наш агент Pi с TTFT ~0,5с — без облака, без оплаты за токен, и пара, которая сама стартует при логине. Замысел подтвердился: два Mac на столе, соединённые одним кабелем, ощущаются как одна более быстрая машина.

Читать дальше

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

Есть похожая идея?

Обсудить проект