Главная/Блог/Обзор/DGX Spark + Mac Studio: Эксперимент с…
Обзор12 мин чтения · 7 июля 2026 г.

DGX Spark + Mac Studio: Эксперимент с разделением Pre-fill и Decode

Полный разбор эксперимента по объединению NVIDIA DGX Spark и Apple Mac Studio для разделения задач Pre-fill и Decode в LLM. Анализ производительности, сетевых задержек и целесообразности такого подхода.

DGX Spark + Mac Studio: Эксперимент с разделением Pre-fill и Decode

Представьте себе сценарий, где вы можете взять лучшее от двух совершенно разных архитектур и объединить их в единую систему инференса. С одной стороны — NVIDIA DGX Spark, машина, которая молниеносно обрабатывает промпты (prefill), но страдает при генерации токенов. С другой — Mac Mini или Mac Studio на Apple Silicon, которые медленнее обрабатывают входные данные, но выдают ответ с невероятной скоростью благодаря пропускной способности памяти. Звучит как идеальная формула? Автор видео решил проверить эту гипотезу на практике, и результаты оказались не только технически интересными, но и откровенно провокационными для индустрии локального ИИ.

Этот эксперимент — не просто сравнение «кто быстрее», а глубокое погружение в архитектуру распределенного инференса. Мы поговорим о том, как разделить задачи Pre-fill (предварительная обработка) и Decode (генерация), почему сеть стала главным узким местом, и почему в итоге покупка двух дорогих машин может быть менее выгодной, чем одна мощная рабочая станция. Разберем все цифры, ошибки конфигурации и реальные показатели токен/с.

01Архитектура эксперимента: Два гиганта на одном столе

Для начала определим, с чем именно мы имеем дело. В первой фазе эксперимента использовались две машины, представляющие два полюса современного потребительского/профессионального железа для ИИ.

Сторона NVIDIA (Pre-fill): MSI Edge Expert (по сути, клон DGX Spark от другого вендора). Это устройство построено на архитектуре Blackwell. Ключевые характеристики:

  • GPU: NVIDIA Blackwell (архитектура SM 121).
  • Память: 128 ГБ унифицированной памяти (HBM).
  • ОС: Linux (ARM64).
  • Стек: vLLM, BF16 (полная точность для вычислений).

Сторона Apple (Decode): Mac Mini M4 Pro.

  • Чип: Apple M4 Pro.
  • Память: 64 ГБ унифицированной памяти.
  • ОС: macOS.
  • Стек: MLX, 4-bit квантование (для оптимизации под Apple Silicon).

Цель была проста: использовать GPU NVIDIA для тяжелой вычислительной работы по обработке промпта (Prefill), а затем передать результат (KV Cache) на Mac для быстрой посимвольной генерации (Decode). Это классическая схема Disaggregated Pre-fill and Decode (раздельная обработка).

Архитектура распределённого инференса с Pre-fill и Decode
Архитектура распределённого инференса с Pre-fill и Decode
💡
Термин: Pre-fill и Decode. Инференс LLM делится на две фазы. Prefill (Pre-fill) — это параллельная обработка всего входного промпта. Она требует огромных вычислительных мощностей (Compute Bound). Decode — это генерация токенов по одному. Она требует высокой пропускной способности памяти (Memory Bandwidth Bound), так как на каждом шаге нужно читать веса модели и обновлять KV Cache.

02Первые шаги: Борьба с сетью и протоколами

Теория звучала просто, но реализация превратилась в ад для разработчика. Автор, будучи веб-разработчиком, а не системным программистом на Rust, столкнулся с серьезными барьерами при настройке фреймворка Exo — проекта, предназначенного для распределенного инференса на потребительском железе.

Первая проблема возникла на этапе обнаружения пиров (peer discovery). Exo использует протокол mDNS для поиска устройств в сети. Однако на macOS этот механизм оказался сломанным в контексте взаимодействия с Linux-машиной через прямое соединение. Автор потратил часы на эксперименты с прямыми Ethernet-кабелями, USB-адаптерами и даже Thunderbolt-кабелями.

Решение пришло через анализ трафика с помощью tcpdump. Оказалось, что библиотека libp2p, используемая в Exo, имеет баг в реализации mDNS на macOS. Обходной путь оказался простым, но нетривиальным: пришлось принудительно указать Mac Mini (MSI Edge Expert) на необходимость «навязывать» соединение с Mac, а не ждать, пока Mac сам его обнаружит. Это потребовало установки переменных окружения и ручной настройки сетевых интерфейсов.

MSI DGX Spark GB10 — персональный ИИ суперкомпьютер
MSI DGX Spark GB10 — персональный ИИ суперкомпьютер

После успешного соединения началась компиляция. На стороне Linux пришлось собирать vLLM из исходников для ARM Linux, а на Mac — компилировать MLX с учетом всех шейдеров Metal. Это заняло несколько дней, что подчеркивает высокую порог входа для таких экспериментов.

⚠️
Важно: Сетевые задержки. В распределенных системах LLM передача KV Cache между узлами критична. Если сеть медленная, время простоя GPU (idle time) может превысить время самой генерации. В первом тесте с обычным Ethernet это стало главным тормозом.

03Тест 1: Qwen 2.5 32B и проблема сети

Первой моделью для теста стала Qwen 2.5 32B. Это модель среднего размера, которая хорошо подходит для демонстрации принципов. На стороне NVIDIA она запускалась в полной точности BF16 (так как 128 ГБ памяти позволяют это сделать без квантования), а на Mac Mini — в 4-bit квантовании через MLX.

Результаты первого запуска были шокирующими, но логичными с точки зрения физики:

GitHub PR с коммитами prefill/decode
GitHub PR с коммитами prefill/decode
  • Prefill (NVIDIA): 546–937 токенов/с. Отличный результат, GPU справлялся с вычислениями мгновенно.
  • Decode (Mac Mini): 66 токенов/с. Быстро для Mac Mini, но это не рекорд.
  • Общая задержка (TTFT): Катастрофическая.

При длине промпта в 25 000 токенов GPU NVIDIA вычислял KV Cache менее чем за секунду. Однако передача этого KV Cache по 2.5 Gbps Ethernet-адаптеру занимала 25 секунд. То есть 96% общего времени ушло на пересылку данных по сети. GPU NVIDIA простаивал, ожидая подтверждения от Mac Mini. Это наглядно показало, что стандартные сетевые интерфейсы не подходят для такого рода задач.

04Апгрейд инфраструктуры: 50 Gbps и Thunderbolt

Поняв, что сеть — узкое место, автор решил радикально улучшить канал связи. Был приобретен Thunderbolt 5 enclosure (внешний корпус с PCIe слотом) и сетевая карта Mellanox ConnectX-4 (QSFP+, 50 Gbps). На стороне Linux был подключен коммутатор Microtech CSR-812.

NVIDIA DGX Spark на вращающейся подставке
NVIDIA DGX Spark на вращающейся подставке

Почему именно ConnectX-4? Автор отметил, что более мощная карта Intel 800 (100 Gbps) не заработала на macOS из-за отсутствия драйверов. Mellanox ConnectX-4 же поддерживается Apple «из коробки» с 2019 года. Это позволило создать высокоскоростной канал с минимальными задержками.

Также для корректного тестирования была выбрана модель Llama 3.1 8B. Почему 8B? Потому что это «не думающая» модель. В предыдущих тестах с Qwen (моделью с цепочкой рассуждений, Chain-of-Thought) скрытые токены рассуждения генерировались со скоростью Decode, что маскировало преимущества GPU в Prefill. Llama 3.1 8B выдает ответ сразу, что позволяет четко измерить время до первого токена (Time to First Token, TTFT).

📌
Факт: Пропускная способность памяти. Mac Mini M4 Pro имеет пропускную способность памяти 273 ГБ/с. Mac Studio M3 Ultra — 819 ГБ/с. Именно этот параметр лимитирует скорость Decode, а не вычислительная мощность CPU/GPU.

05Тест 2: Llama 3.1 8B — Первые успехи

С новым сетевым стеком и моделью Llama 3.1 8B результаты изменились кардинально. Использовался бенчмарк LlamaBenchy для точного измерения через HTTP API.

Интерфейс ChatGPT с упоминанием DGX Spark
Интерфейс ChatGPT с упоминанием DGX Spark

Результаты для промпта длиной 4096 токенов:

  • MSI Edge Expert (только): Prefill ~1800 токенов/с. TTFT ~2.3 сек.
  • Mac Mini M4 Pro (только): Prefill значительно медленнее, но Decode ~52 токенов/с.
  • Disaggregated (Связка): Prefill ~1585 токенов/с (почти как у Spark), Decode ~34 токенов/с.
  • TTFT (Связка): 2.4 секунды.

Здесь мы видим интересный парадокс. Связка показала TTFT, сопоставимый с чистым Spark (2.3 vs 2.4 сек). Однако скорость Decode в связке (34 токена/с) оказалась медленнее, чем у Mac Mini в одиночку (52 токена/с). Почему? Из-за накладных расходов на инъекцию удаленного KV Cache. Сеть добавила около 18 миллисекунд задержки, но главное — процессор Mac Mini тратил время на прием и обработку данных из сети, а не только на генерацию.

Тем не менее, связка выиграла в общем времени ответа за счет того, что Spark обработал длинный промпт так же быстро, как и сам бы, а Mac Mini продолжил генерацию. Но главное открытие было сделано позже: Mac Mini M4 Pro — не предел.

MSI Edge Expert (DGX Spark) и Mac Mini M4 Pro на столе автора
MSI Edge Expert (DGX Spark) и Mac Mini M4 Pro на столе автора

06Тест 3: Mac Studio M3 Ultra — Проверка гипотезы

Автор заменил Mac Mini на Mac Studio M3 Ultra. Этот монстр имеет 512 ГБ унифицированной памяти и пропускную способность 819 ГБ/с (в 3 раза больше, чем у M4 Pro). Ожидания были высокими: если Decode лимитирован памятью, то M3 Ultra должен ускорить генерацию втрое.

Настройка снова потребовала усилий: процесс-раннер на Mac Studio не мог найти Spark, потребовалось перенастройка сетевых сервисов и перезагрузка. Но в итоге кластер заработал.

График задержки сети: 25 секунд на передачу KV Cache
График задержки сети: 25 секунд на передачу KV Cache

Результаты для Llama 3.1 8B на Mac Studio M3 Ultra:

  • Decode (Mac Studio): 106 токенов/с (против 52 у Mac Mini). Ускорение почти в 2 раза, что близко к теоретическому пределу при батче 1.
  • Disaggregated Decode: 84 токена/с. Опять же, потеря ~20% скорости из-за накладных расходов сети.
  • TTFT (Disaggregated): 2.6 секунды. Spark показал 1585 токенов/с, Mac Studio — 1420. Связка дала 1584, то есть полностью сохранила преимущество Spark в Prefill.

Здесь связка начала выглядеть привлекательно. Decode в 84 токена/с все еще медленнее, чем чистый Mac Studio (106), но в 6 раз быстрее, чем Spark (14 токенов/с). Для 8B модели гипотеза о том, что «чем больше памяти, тем быстрее Decode», подтвердилась.

07Тест 4: Тяжеловесы — Qwen 2.5 32B и Gemma 2 27B

Самый интересный этап — переход к большим моделям. Автор попытался запустить Llama 3.1 70B, но столкнулся с ограничениями NVIDIA Spark. Модель в полной точности весит значительно больше, чем доступно памяти у Spark. Попытки использовать квантованные версии провалились из-за отсутствия соответствующих ядер (kernels) в сборке vLLM для архитектуры Blackwell. Пришлось пересобирать vLLM с нуля, что автор отложил.

Сетевая карта Mellanox ConnectX-4 в Thunderbolt enclosure
Сетевая карта Mellanox ConnectX-4 в Thunderbolt enclosure

Вместо этого были взяты модели 27B и 32B класса. Результаты для Qwen 2.5 32B и Gemma 2 27B показали интересную динамику:

Для Qwen 2.5 32B:

  • Prefill (Spark): 875 токенов/с.
  • Prefill (Mac Studio): 356 токенов/с.
  • Disaggregated Prefill: 792 токена/с. (Связка почти равна Spark, что в 2.2 раза быстрее Mac Studio).
  • Decode (Mac Studio): 29 токенов/с.
  • Decode (Spark): 23 токена/с.
  • Disaggregated Decode: 24 токена/с (потеря ~20% из-за сети, но все равно сопоставимо с Spark).

Для Gemma 2 27B картина была схожей: Prefill в связке повторял показатели Spark, а Decode был близок к показателям Mac Studio с небольшой потерей на сеть.

Результаты бенчмарка LlamaBenchy для Llama 3.1 8B
Результаты бенчмарка LlamaBenchy для Llama 3.1 8B

Ключевой вывод: с ростом размера модели разрыв в скорости Decode между Mac Studio и Spark сужается. Если для меньшей модели Mac Studio был заметно быстрее, то для более крупной разрыв составляет всего несколько десятых процента. Это связано с тем, что на больших моделях Decode становится менее зависимым исключительно от пропускной способности памяти (из-за sliding window attention в Gemma и оптимизаций ядра в Qwen), и вычислительная часть становится более значимой. Spark, имея мощный GPU, начинает конкурировать с Apple Silicon в Decode, тогда как в Prefill он остается вне конкуренции.

💡
Совет: Выбор модели. Для разделения Pre-fill и Decode большие модели (27B+) могут быть менее выгодны, если у вас нет очень быстрого соединения. Разрыв в скорости Decode сокращается, и экономия от использования Mac Studio снижается, в то время как сложность настройки растет.

08Сетевые накладные расходы: Цена распределенности

Один из самых важных выводов эксперимента — это цена, которую приходится платить за распределенную архитектуру. В каждом случае, когда использовалась связка, скорость Decode падала примерно на 20% по сравнению с работой Mac Studio в одиночку. Это плата за:

Mac Studio M3 Ultra с 512 ГБ памяти
Mac Studio M3 Ultra с 512 ГБ памяти
  1. Передачу KV Cache по сети (даже при 50 Gbps).
  2. Синхронизацию состояний между узлами.
  3. Накладные расходы на инъекцию данных в память Mac Studio.

При этом время до первого токена (TTFT) в связке практически всегда совпадало с показателями чистого Spark. Это означает, что Spark берет на себя всю «тяжесть» инициализации, а Mac Studio просто продолжает поток. Но если Spark не быстрее Mac Studio в Prefill (как это было с некоторыми конфигурациями или при меньших промптах), то связка проигрывает по всем фронтам.

09Альтернатива: RTX Pro 6000 vs. Связка Spark + Mac

Автор задает главный вопрос: «Стоит ли оно того?». И дает честный ответ: скорее нет, если вы собираете систему с нуля.

Один мощный GPU, такой как NVIDIA RTX Pro 6000 (Blackwell), обладает:

Сравнение производительности Qwen 2.5 32B на разных конфигурациях
Сравнение производительности Qwen 2.5 32B на разных конфигурациях
  • В 6 раз большей пропускной способностью памяти, чем DGX Spark.
  • В 3.5 раза большей вычислительной мощностью.

Такая карта способна «раздавить» всю связку Spark + Mac Studio как в Prefill, так и в Decode. Она не требует сложной сетевой настройки, не имеет задержек на передачу KV Cache и работает в едином адресном пространстве памяти. Если бюджет позволяет купить DGX Spark и Mac Studio M3 Ultra, то гораздо разумнее купить RTX Pro 6000 и собрать вокруг нее рабочую станцию.

Однако, если у вас уже есть оба этих устройства, то эксперимент показывает, что их можно использовать вместе для получения marginal gain (небольшого прироста) в скорости генерации за счет использования избыточных мощностей Mac Studio для Decode, пока Spark обрабатывает следующий промпт или просто простаивает.

10Выводы: Кому что подойдёт

Эксперимент с объединением DGX Spark и Mac Studio (Mini/Ultra) — это блестящий proof-of-concept для технологии Disaggregated Inference, но суровое напоминание о сложностях её внедрения на потребительском уровне.

Визуализация потерь 20% скорости Decode из-за сети
Визуализация потерь 20% скорости Decode из-за сети
  • Для энтузиастов и исследователей: Это отличный проект для изучения сетей, Rust, vLLM и MLX. Вы научитесь настраивать сложные кластеры и поймете внутреннюю кухню инференса.
  • Для тех, у кого уже есть железо: Если у вас есть DGX Spark и Mac Studio M3 Ultra, связка через 50 Gbps сеть даст вам быстрый Prefill от NVIDIA и приличный Decode от Apple. Но ожидайте потерь ~20% в скорости Decode из-за сети.
  • Для тех, кто строит систему с нуля: Не делайте этого. Купите одну мощную карту NVIDIA (RTX 4090, RTX Pro 6000 или будущие модели). Простота, надежность и отсутствие сетевых задержек перевешивают все теоретические преимущества гетерогенных систем.
  • Будущее: Технологии вроде Exo и разделения Pre-fill/Decode будут развиваться. С появлением более быстрых сетей (100+ Gbps) и оптимизированных драйверов для macOS, такие связки могут стать более жизнеспособными, особенно в сценариях, где нужно масштабировать Prefill и Decode независимо.

ИИ-инференс становится все более сложным, и хотя «просто соединить два компьютера» пока не работает идеально, направление верное. Мы движемся к облачным гибридным архитектурам, где разные части задачи выполняются на оптимальном для этого оборудовании.

Источник: видео-разбор (YouTube) ↗