MTP-RDMA инференс-кластер
Тензорный 27B на двух Mac по Thunderbolt RDMA — ~70 → 90–100 tok/s.
Dev-storyЗадача
Хотели быстрый локальный LLM для своего кодинг-агента (Pi) без облачного API, но 27B на одном Mac декодирует лишь ~60–73 tok/s.
Что делали
Собрали свой нативный MTP-рантайм (multi-token prediction) и запустили тензорный параллелизм MLX с распределённым паттерном на двух Mac по линии Thunderbolt RDMA: оба ранга крутят один цикл генерации, а rank 0 отдаёт OpenAI-совместимый API; Swift-приложение в меню-баре и демон управления сами находят узлы и поднимают пару при логине.
Результат
Пара декодирует ~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
Почему появился проект
Хотели быстрый локальный LLM для своего кодинг-агента (Pi) без облачного API, но 27B на одном Mac декодирует лишь ~60–73 tok/s.
Со своим кодинг-агентом Pi мы работаем весь день и не хотели, чтобы его мозг был арендованным облачным API. Но 27B на одном Mac декодирует лишь ~60-73 tok/s: годится, но не быстро. Интересный вопрос — могут ли два обычных Mac, соединённых кабелем, вести себя как одна большая машина.
Что было создано
Собрали свой нативный 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 он вливается в пару и безопасно возвращает управление при остановке.
Основные модули и путь пользователя
Пара против solo решена замером, а не ощущением: solo ~60-73 tok/s, пара ~85-100 (медиана ~95 без размышления, ~86 с ним). Выигрывает топология — та же модель, разбитая на два бокса, — а не модель побольше.
Матрица устройств, решающая, какой Thunderbolt-интерфейс с каким говорит, выводится из живого интерфейса на старте, так что ничего про конкретный Mac не захардкожено, а свежая машина воспроизводит измеренную среду.
Сам серверный 27B мы дотюнили длинным A/B: этап сокращения размышления срезал ~24-31% reasoning-токенов без измеримой потери качества, а быстрый и умный профили оба обслуживаются из одной загруженной копии весов, так что смена профиля не стоит перезагрузки.
Мы сознательно не переписывали рантайм на другой язык: замерили, что доля Python в декоде лишь ~1-3%, а аудит лицензии показал, что переписывание не даёт и юридической выгоды. Два соблазнительных тупика, отвергнутых доказательствами, а не предположением.
Под долгой нагрузкой важной оказалась температура: вентиляторы восстанавливаются через сокет демона, а не убивающую приложение CLI, а патченый вычислительный слой A/B-сравнили со стоком и оставили — он на ~10-14% быстрее.
Архитектура и технологические решения
Сделано на MLX, Thunderbolt RDMA, Python.
Swift-приложение в меню-баре и демон управления (native Login Item, автообнаружение узлов, без SSH в проде) ведут тензорный параллелизм MLX по Thunderbolt RDMA; rank 0 отдаёт OpenAI-совместимый API, обслуживание мультимодальное (текст и изображение), а герметичные самотесты узла и повторы паритета скорости служат стражами регрессий при приватном Python и Swift CI.
Результат и выводы
Пара декодирует ~85–100 tok/s (медиана ~95 fast / ~86 smart) против ~60–73 solo и локально питает наш агент Pi с TTFT ~0,5 с.
Приватный, работающий на устройстве 27B, декодирующий ~95 tok/s и питающий наш агент Pi с TTFT ~0,5с — без облака, без оплаты за токен, и пара, которая сама стартует при логине. Замысел подтвердился: два Mac на столе, соединённые одним кабелем, ощущаются как одна более быстрая машина.
Связанные статьи
Читать дальше
Связанные истории проектов
Эти проекты близки по техническим или продуктовым решениям и показывают, как тот же принцип работает в другом контексте.
Dev-storyCMS
Динамический headless-CMS на webedge-db — типы контента, медиа, роли и публичный read-API, питающий наши сайты и статьи.
Реактивная база данных
Реактивная база данных
Наш реактивный BaaS на native SpacetimeDB — ~200k realtime-доставок/с, p95<20мс.
Dev-storyПлатформа календарных бронирований
Бронирование на Vue 3 — слоты, записи, письма и Meet-видеозвонки в один клик.
Есть похожая идея?
Обсудить проект