Ubuntu 26.04 на клоне DGX Spark (Asus GX10)

от автора

DGX Spark и его клоны поставляются с DGX OS (фактически, Ubuntu 24.04 с кучей дополнительных пакетов от Nvidia). Причем, драйвера используются довольно старые, версии 580, cuda toolkit тоже чуток устарел, 12-ой версии. Кроме того, стоит куча невразумительных пакетов с телеметрией (типа, для работы с Nvidia Sync), обвешано все какими-то левыми скриптами и странными настройками.

Не то, чтобы это создавало прямо уж совсем серьезные проблемы, но сам факт наличия какого-то непонятного bloatware меня, как бывшего системного администратора — довольно сильно расстраивал. На форуме Nvidia кто-то уже написал, что ставил чистую Ubuntu 26.04 без серьезных трудностей, так что я решил сделать так же. Попутно захотелось перейти на ZFS ради возможности точно устанавливать размер файлового кэша и компрессии.

Разумеется, сначала сделал полный бэкап на внешний nvme. Потом поставил Ubuntu 26.04 Desktop ARM, и оно даже успешно заработало, успешно установил необходимые пакеты и скомпилировал llama.cpp. Но появилась странная проблема с повышенным энергопотреблением — GX10 начал жрать из розетки во всех режимах на примерно 15 ватт больше. В idle — 41 ватт вместо 26, во время работы LLM — 195 вместо 180. Вроде бы немного, но для спарков и его клонов, с их системой охлаждения, работающей на пределе — это довольно критично.

Чатгпт раскопал пост, где кто-то сетовал на похожую проблему с портами ConnectX-7 (и, как потом оказалось, это действительно была та самая проблема), но его предложения по деактивации этих портов и выгрузке драйверов никак не помогли.

Попытка установки пакетов, типа nvidia-system-core из репозитория для DGX OS не помогли, только засорили диск частью того самого bloatware, от которого хотелось избавиться. Сначала я решил, что дело в новом ядре (26.04 идет с ядром 7.0, вместо 6.17 в DGX OS), и, чтобы убедиться — попытался поставить Ubuntu 24.04. Десктопная версия просто не смогла установиться, система падала во время инсталляции. Серверный 24.04 поставился успешно (но без ZFS, не умеет его инсталлятор этого), однако даже с ядром 6.17 проблема осталась. Пришлось экспериментировать с установкой пакетов от DGX OS, в надежде исправить. В итоге, Ubuntu 24.04 превратилась в тот самый DGX OS (после установки метапакета nvidia-system-station), но нашелся и фикс, в виде пакета dgx-spark-mlnx-hotplug, который устанавливает баш-скрипт и правила для udev, которые исправляют проблему с повышенным энергопотреблением.

После повторной инсталляции 26.04 и ручной установки этого пакета — проблема с потреблением решилась. Самые последние драйвера (610) и CUDA toolkit 13.3 установились уже без проблем, а llama.cpp заработала, по крайней мере, не хуже чем раньше (по результатам тестов llama-benchy). Однако, обнаружилось, что зажимание размера дискового кэша для ZFS не помогло vllm, который не мог работать после того завершения работы какого-нибудь жадного потребителя GPU (сам же vllm с другой моделью или llama.cpp). По прежнему приходилось освобождать кэш вручную («sync; echo 3 | sudo tee /proc/sys/vm/drop_caches»). Ну, по крайней мере, llama.cpp работает и без этого, плюс ZFS, который ужал на примерно 11 процентов содержимое моделей (zstd-5 компрессия и дедупликация).

Вот мой рецепт по установке 26.04 на клоны спарка:

Сначала ставим Ubuntu 26.04 Desktop ARM, во время установки — ставим галочки на драйвера и third-party софт, если хочется ZFS, то на моменте конфигурирования файловых систем — выбираем advanced options, и включаем ZFS без шифрования (сильные духом — могут и шифрование включить, но тогда придется вводить пароль на каждой загрузке). После установки и перезагрузки — логинимся в терминал и включаем sshd:

sudo -i

apt install openssh-server

systemctl start ssh.service

Затем логинимся через ssh и конфигурируем остальное:

sudo -i

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2604/sbsa/cuda-keyring_1.1-1_all.deb

dpkg -i cuda-keyring_1.1-1_all.deb

apt update apt full-upgrade

apt install linux-nvidia-hwe-24.04-edge

apt autoremove

apt install cuda-toolkit-13-3 cuda-13-3 libnccl2 libnccl-dev libssl-dev curl cmake autoconf flex bison libtool git automake ccache

echo ‘export PATH=/usr/local/cuda/bin{PATH:+:{PATH}}’ >> ~/.bashrc

echo ‘export LD_LIBRARY_PATH=/usr/local/cuda/lib64{LD_LIBRARY_PATH:+:{LD_LIBRARY_PATH}}’ >> ~/.bashrc

apt install nvtop nvidia-container-toolkit

apt install nvidia-open cuda

apt install python3-pip python3-wheel python3-dev libpython3-dev zlib1g-dev python3-venv python3-setuptools-whl python3-setuptools python3-pip-whl

apt install docker.io docker-buildx docker-compose-v2

echo ‘options zfs zfs_arc_max=2147483648’>> /etc/modprobe.d/zfs.conf

echo ‘options zfs zfs_arc_min=1073741824’>> /etc/modprobe.d/zfs.conf

wget https://repo.download.nvidia.com/baseos/ubuntu/noble/arm64/pool/dgx/d/dgx-spark-mlnx-hotplug/dgx-spark-mlnx-hotplug_26.01-1_all.deb

dpkg -i dgx-spark-mlnx-hotplug_26.01-1_all.deb

update-initramfs -u

После этого перезагружаемся и все, система готова для клонирования репозитория llama.cpp и vllm докера от eugr — https://github.com/eugr/spark-vllm-docker

Можно еще сделать trim для ssd (теоретически, он делается раз в месяц автоматом, если spark работает круглосуточно):

zpool trim bpool

zpool trim rpool

ссылка на оригинал статьи https://habr.com/ru/articles/1049206/