просто КДПВ
просто КДПВ

Счастливым страдальцам владельцам Спарков посвящается...

Перво-наперво — мега-респект героям китайского так называемого коммунистического труда (DeepSeek, Qwen, GLM, Kimi). Только благодаря их моделям этот мини-ящик стал реально полезным инструментом, несмотря на весь инженерный срам ниже.

Знал бы я всё это полгода назад — сэкономил бы кучу киловатт, нервов от внезапных ночных отключений и часов созерцания температурных графиков. Рецепт универсальный: для любого движка и любого числа нод.

1. Вырезаем лишний жир (Headless)

Первым делом гасим графическую оболочку, чтобы десктоп даже не думал стартовать:

sudo systemctl set-default multi-user.target

Отправляем на мороз системный мусор:

  • disable: bluetooth, cups, cups-browsed, avahi-daemon, ModemManager, apport, dgx-dashboard, dgx-dashboard-admin, multipathd, rsyslog.

  • mask: snapd, packagekit, nvidia-dgx-telemetry, nvidia-dgx-sol, udisks2 (он дергается через D-Bus, поэтому обычный disable его не удержит).

  • PipeWire глушим через systemctl --user mask на сами сервисы и их сокеты.

  • Сюрпрайз: OTA-апдейты прошивки любят молча возвращать часть этого зоопарка к жизни.

  • Главное: не вздумайте делать apt purge --auto-remove рабочему столу! Пакет nvidia-system-station-core намертво завязан на ubuntu-desktop. "Очистка" снесет платформенные пакеты Spark (конфиги fstab, серийную консоль, GRUB) — в dry-run системе захотелось выпилить 1078 пакетов. Оставляем десктоп в покое, при multi-user.target он физически не грузится. Офис и пасьянсы вычищайте точечно и строго без флага автоудаления.

2. Лимит GPU: 1800 МГц

Декод у нас наглухо уперся в пропускную способность памяти. Все мегагерцы выше 1800 МГц просто греют комнату и мотают счетчик. Опускать сильно ниже нельзя — просядет скорость префилла, поэтому 1800 МГц — идеальный оптимум: потребление двух нод падает с 330 Вт до 242–252 Вт без потери токенов/с.

3. Лимит CPU: 3000 МГц только на P-ядрах (Cortex-X925)

Кто бы мог подумать, что у Спарка с ядрами - неплохая diversity (как это по-русски? А! Разнообразие!). Движки инференса намертво лочат 2–3 потока на быстрых ядрах в яростном цикле spin-wait: вместо нормального сна они постоянно долбят GPU запросами ради экономии микросекунд. Ядро молотит на максимуме и жрёт питание впустую. Чувствуется определённый стиль написания кода. И это не ИИ!

Фиксим частоту P-ядер на 3000 МГц: пропускная способность та же, минус 8–12% по потреблению, а самая горячая зона остывает на 17–18 °C. Ниже 2808 МГц (максимум E-ядер A725) опускать нельзя — шедулер начнет перекидывать горячие потоки на медленные ядра, что отрицательно скажется на производительноси.

4. Прошивка OTA2610+: забираем халявные 1.5 ГиБ

Память под дисплей в UEFI наконец-то сделали настраиваемой: вместо дефолтных 2 ГБ ставим режим Auto (512 МиБ в headless) прямо из ОС (чё серьёзно? не надо клаву с монитором подрубать и в течении одной секунды вспоминать что жать - Esc, Delete, F2... Прямо из ОС?! Это точно инженеры из Nvidia?). Освободившиеся 1.5 ГиБ падают в общую системную память.

5. Ядро со страницами 64K: битва за память

  • Переход с 4K-страниц на 64K режет накладные расходы Linux на структуры памяти с ~2 ГБ до ~128 МБ.

  • Но тут вступает драйвер NVIDIA UVM: под каждую крошечную 256-байтную таблицу страниц видеочипа он отжирает целую страницу в 64 КБ. В итоге вместо экономии получаем потерю ~3.25 ГБ. Отдельный фейспалм инженерам NVIDIA: угробить гигабайты на собственной коробке с унифицированной памятью своим же драйвером.

  • Патч memory-saver пакует таблицы страниц и возвращает чистыми +1.8 ГиБ относительно дефолтного 4K ядра. А есть ли подвох? Таки да: Secure boot и патчик - несовместны.

Вывод: переходить на линксовое ядро вида XXX-nvidia-64k НЕ надо (пока). Да или...

6. Жор в простое — скрытый грабёж

Один Спарк с загруженной моделью и поднятым сетевым линком ConnectX-7 в холостом режиме сжирает ~50 Вт от розетки. Причем около 20 Вт жрет исключительно сетевуха CX7: ASPM выключен в прошивке, энергосбережения для 200G нет, Wake-on-LAN не завезли. Для сравнения: Mac Studio мирно спит на 10 Вт. Единственное нормальное решение — тушить через poweroff и вешать на умную розетку.

Конфиги systemd

Два примитивных костыля юнита (дядя Фёдор Парето жмёт руку):

отдыхай, GPU

/etc/systemd/system/spark-gpu-clock-cap.service (в связке с /etc/default/gpu-clock-cap, где прописано GPU_MAX_MHZ=1800):

[Unit]
Description=GB10 fixed MHz GPU clock cap
Wants=nvidia-persistenced.service
After=nvidia-persistenced.service
StartLimitIntervalSec=0

[Service]
Type=oneshot
EnvironmentFile=/etc/default/gpu-clock-cap
ExecStart=/usr/bin/nvidia-smi -pm 1
ExecStart=/usr/bin/nvidia-smi -lgc 0,${GPU_MAX_MHZ}
ExecStop=/usr/bin/nvidia-smi -rgc
RemainAfterExit=yes
Restart=on-failure
RestartSec=5
TimeoutStartSec=60
TimeoutStopSec=30

[Install]
WantedBy=multi-user.target
не парься, CPU

/etc/systemd/system/spark-cpu-clock-cap.service (в связке с /etc/default/cpu-clock-cap, где заданы CPU_X925_CORES=5-9,15-19 и CPU_X925_MAX_MHZ=3000):

[Unit]
Description=GB10 fixed MHz CPU clock cap (P-cores, Cortex-X925)
After=nv-cpu-governor.service
StartLimitIntervalSec=0

[Service]
Type=oneshot
EnvironmentFile=/etc/default/cpu-clock-cap
ExecStart=/usr/bin/cpupower -c ${CPU_X925_CORES} frequency-set -u ${CPU_X925_MAX_MHZ}MHz
ExecStop=/usr/bin/cpupower -c ${CPU_X925_CORES} frequency-set -u 3900MHz
RemainAfterExit=yes
Restart=on-failure
RestartSec=5
TimeoutStartSec=60
TimeoutStopSec=30

[Install]
WantedBy=multi-user.target

Риторический аппендикс: Ода 256-битной шине и гениям сегментации

Глядя на всю эту конструкцию, очень хочется найти того маркетолога или топ-менеджера, который продавил 256-битную шину для GB10, заглянуть ему прямо в глаза и спросить: «Ну и как тебе спится по ночам? Бонус не жмёт?».

Память / интерфейс

Железка

ПСП

Объём

HBM3e

NVIDIA B200 / B300 (в составе GB300)

до 8 ТБ/с на GPU

180 ГБ¹ / 288 ГБ

GDDR7 (512 бит)

RTX 5090

1,792 ТБ/с

32 ГБ

Унифицированная память Apple²

Mac Studio M5 Ultra

1,2 ТБ/с

до 512 ГБ

Унифицированная память Apple²

Mac Studio M3 Ultra

819 ГБ/с

до 512 ГБ

Унифицированная память Apple²

M4 Max, старшая конфигурация

546 ГБ/с

до 128 ГБ

LPDDR5X (256 бит)

DGX Spark, GB10

273 ГБ/с

128 ГБ

LPDDR5X (256 бит)

Strix Halo, Ryzen AI Max+ 395

256 ГБ/с

до 128 ГБ

¹ Для B200 NVIDIA также указывает 192 ГБ как номинальную максимальную ёмкость Blackwell.
² Apple не публикует в официальных спецификациях тип памяти и ширину её физического интерфейса.

HBM сюда не светила из-за дефицитного и запредельно дорогого CoWoS, а GDDR7 потребовала бы штук 50 чипов, превратив компактную коробку в мангал. Выбрали LPDDR5X ради 128 ГБ и теплопакета в 140 Вт. Но почему всего 256 бит? Apple на той же памяти спокойно выжимает до 819 ГБ/с широченной шиной на 512–1024 бит.

Всё банально: если бы Спарку насыпали хотя бы 500–800 ГБ/с, он бы сожрал продажи корпоративных DGX Station и RTX Pro. В итоге выдали огрызок на 273 ГБ/с. Чип упирается в память, реальный декод болтается около жалких ~50 токенов/с на такт для MoE-моделей (10B активных весов в FP4), а пользователи вынуждены городить огород с TP2/TP3 по сети ConnectX-7 просто ради того, чтобы банально сложить пропускную способность нескольких коробок.

Комментарии (2)


  1. 100_rabotnikov
    04.11.2026 05:28

    Получается покупаешь готовую железку для ИИ, а потом еще вручную ограничиваешь частоты, отключаешь половину сервисов и патчишь драйвер ради нормального расхода памяти. Хорошая такая базовая настройка вышла. Интересно NVIDIA вообще планирует это исправлять штатными обновлениями?


    1. DimkoX
      04.11.2026 05:28

      Видимо, нет, потому что флагманский продукт для Энтерпрайза, а тут слишком узкая аудитория