NixOS-DGX-Spark: 在 NVIDIA DGX Spark 和 Asus Ascent GX10 上運行 Nix 和 NixOS

總覽

NixOS-DGX-Spark 儲存庫提供了一個完整的基於 Nix 的解決方案,適用於 NVIDIA DGX Spark 和相容的 Asus Ascent GX10 設備。它提供了一個 NixOS 模組、預建的 USB 映像以及 devshell 劇本,讓使用者既可以在現有的 DGX OS(Ubuntu)上運行 Nix,也可以用完整的 NixOS 安裝取代系統。

在 DGX OS(Ubuntu)上使用 Nix

您可以在不安裝 NixOS 的情況下,在 DGX OS 上使用該儲存庫的 dev shells 和劇本。設置需要安裝 Nix(透過官方或 Determinate 安裝程式),在 /etc/nix/nix.conf 中啟用 nix-commandflakes 實驗功能,並按照儲存庫的快取部分所述添加 graham33 Cachix 快取。配置完成後,命令如 nix develop .#cuda 會自動使用來自 numtide/nix-gl-host 專案的 nixglhost 包裝 GPU 相依的二進位檔,因此不需要手動處理驅動程式。

在 DGX Spark 上安裝 NixOS

儲存庫中的一則警告指出,只有出廠的 DGX OS 韌體能在開箱即用時啟動設備;要運行 NixOS,您必須先在 DGX OS 內更新韌體。完成此步驟後,您可以使用 nix build .#usb-image 構建可啟動的 USB 映像,並使用 dd 將其寫入 USB 磁碟機。該映像在 GRUB 中呈現兩個核心選擇:

  • NixOS(預設) – 使用 NVIDIA 為 DGX Spark 定製的核心,提供完整的 GPU 支援和正常的以太網。
  • NixOS (standard-kernel) – 使用通用的 NixOS 6.17 核心,文件指出該核心在以太網方面存在問題。

啟動需要先在 BIOS 中關閉安全啟動,然後按照標準的 NixOS 安裝手冊操作。

DGX Spark NixOS 模組

儲存庫的 NixOS 模組 (hardware.dgx-spark) 封裝了硬體支援。其核心選項為:

hardware.dgx-spark = {
  enable = true;                 # 啟用模組
  useNvidiaKernel = true;        # 預設:使用 NVIDIA 優化核心
};

useNvidiaKernel = true 時,該模組會拉入一個基於 NVIDIA 的 Debian 標註構建的核心,僅在必要處與 NixOS 預設配置不同——這個過程使配置大小減少約 82%。該模組還會在 http://localhost:11000 啟用 DGX Dashboard 網頁介面,用於 GPU 遙測和系統監控。

如果您更喜歡標準的 NixOS 核心(儘管其網路有警告),請將 useNvidiaKernel = false

核心配置管理

核心配置文件位於 kernel-configs/nvidia-dgx-spark-<version>.nix。它們是透過將 NVIDIA 的標註核心來源與 NixOS 基線進行比較,僅保留不同的選項而生成的。要在核心或 nixpkgs 更新後重新生成它們,請執行:

nix run .#generate-kernel-config

該命令會獲取 NVIDIA 核心來源,構建 NixOS 預設配置,比較兩者,並寫入基於差異的簡潔配置。當 NVIDIA 核心版本變更時(更新 kernel-configs/nvidia-kernel-source.nix)或當 nixpkgs 中的通用 NixOS 核心配置變更時,需要重新生成。

匯入模組

其他 flakes 可透過以下方式使用該模組:

{
  inputs.dgx-spark.url = "github:graham33/nixos-dgx-spark\);ings = { nixpkgs, dgx-spark, ... }:
    nixosConfigurations.mySystem = nixpkgs.lib.nixosSystem {
      modules = [
        dgx-spark.nixosModules.dgx-spark
        { hardware.dgx-spark.enable = true; }
        # additional modules
      ];
    };
}

亦提供一個快速開始範本:nix flake init -t github:graham33/nixos-dgx-spark#dgx-spark 會建立一個包含 flake.nixconfiguration.nix 和硬體配置範本的目錄,您可以在自訂後複製到 /etc/nixos 並使用 sudo nixos-rebuild switch --flake /etc/nixos#dgx-spark 應用。

劇本

儲存庫捆綁了一套源自 NVIDIA DGX Spark 範例的 devshell 基礎劇本。每個劇本都標註了其可重現性等級:

  • Full Nix² – 所有依賴項均透過 Nix 取得,無需容器。
  • Container³ – Nix 提供工具(例如 podman),但容器在運行時被拉取/構建。
  • Nix + Container⁴ – CLI 工具由 Nix 打包,而該工具本身管理容器。

README 中的表格列出了如 ComfyUI、Connect Two Sparks、DGX Dashboard、FLUX.1 Dreambooth、Multi‑Agent Chatbot、Multi‑modal Inference、NCCL for Two Sparks、NVFP4、OpenShell、PyTorch 微調(同時有容器和原生 Nix 版本)、Speculative Decoding、TRT‑LLM、vLLM(容器和原生)等劇本。勾號標示出哪些劇本已在 NixOS 和/或 DGX OS 上測試通過;例如,ComfyUI 和 DGX Dashboard 劇本標示為在兩個平台上均可運行,而 NVFP4 和 OpenShell 劇本僅在 NixOS 上進行過測試。

快取

為避免重新構建大型 CUDA 堆疊,項目建議使用兩個二進位快取:

  1. Flox CUDA 快取 – 在獲得 NVIDIA 授權的情況下提供 aarch64‑linux 構建的 cudatoolkit、nccl、cuDNN、PyTorch 等。當使用 DGX Spark NixOS 模組時,Flox 快取會自動添加為替代來源。對於在 DGX OS 上的獨立 Nix 使用,請在 /etc/nix/nix.conf 中添加:
    extra-substituters = https://cache.flox.dev
    extra-trusted-public-keys = flox-cache-public-1:7F4OyH7ZCnFhcze3fJdfyXYLQw/aV7GEed86nQ7IsOs=
    
  2. graham33 Cachix 快取 – 托管專門為此儲存庫構建的構件(例如 dgx-dashboard、openshell)。在安裝 cachix 工具後,可使用 cachix use graham33

韌體更新

由於出廠韌體僅能啟動 DGX OS,儲存庫建議在嘗試啟動 NixOS 之前,先在 DGX OS 內更新韌體。該模組會啟用 fwupd,使您能透過以下命令檢查並應用更新:

fwupdmgr get-updates
fwupdmgr update

這些命令會連線到 Linux 廠商韌體服務(LVFS),其中 NVIDIA 發布 DGX Spark 韌體。

實驗性遠程安裝

實驗章節描述了使用 nixos-anywhere 透過 SSH 安裝 NixOS。命令 nix run github:nix-community/nixos-anywhere -- --flake github:graham33/nixos-dgx-spark#dgx-spark root@<ip> 會分割 NVMe 磁碟並安裝並以 DGX Spark 模組啟用的系統。亦提供測試模式以供驗。

社區塊

在 Hacker News 貼文的留言中,早期採用者分享了他們的體驗:

  • "Huge plus to anyone interested in the space to check out what Graham built!" – @ronef

  • "This is incredible. I have a Jetson lying around and will try to it out on this." – @thenobsta

  • "Been running this on a few Asus GX10 machines with k3s on top, it’s been great. I’m running the new deepseek." – @redrove

  • "Thanks for sharing, saving this for when I get a DGX Spark" – @haunter

  • "This has been amazingly helpful for managing my DGX Spark! Thank you for all your time and effort into this project!" – @nixie-tubes

  • "Claude Code (and likely other models/harnesses) are incredibly effective at Nix. It can trivially self‑verify, without side effects, which is a perfect match for an LLM." – @hamandcheese

  • "There is also a microvm.nix project which helped us support sandboxes with firecracker. So, whole ai workflow pipeline can now be nixos." – @mkagenius

這些留言反映了人們對在邊緣 AI 硬體上使用 Nix 的熱情,對將此項目與 Kubernetes(k3s)結合在 Asus GX10 上的興趣,以及對 Nix 為 AI 工作負載帶來的可重現性和自驗證特性的讚賞。

授權

該項目採用 MIT 授權證書發布;詳情請參閱隨附的 LICENSE 檔案。

Sources