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

概述

NixOS-DGX-Spark 仓库为 NVIDIA DGX Spark 和兼容的 Asus Ascent GX10 设备提供了一个完整的基于 Nix 的解决方案。它提供了一个 NixOS 模块、预构建的 USB 镜像以及 devshell 脚本,使用户既可以在现有的 DGX OS(Ubuntu)上运行 Nix,也可以用完整的 NixOS 系统替换系统。

在 DGX OS(Ubuntu)上使用 Nix

您可以在不安装 NixOS 的情况下,在 DGX OS 上使用该仓库的 dev shells 和 playbooks。设置需要安装 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 Web 界面,用于 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 内核配置发生变化时,需要重新生成。

导入模块

其他 flake 可以通过以下方式使用该模块:

{
  inputs.dgx-spark.url = "github:graham33/nixos-dgx-spark\);inputs = { 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 应用之前对其进行自定义。

Playbooks

该仓库捆绑了一组基于 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 模块的情况下安装系统。还提供了 VM‑test 模式以供验证。

社区反馈

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 的热情,对将该项目与 Asus GX10 上的 Kubernetes(k3s)结合的兴趣,以及对 Nix 为 AI 工作负载带来的可重现性和自验证特性的赞赏。

许可证

该项目根据 MIT 许可证发布;详情请参阅随附的 LICENSE 文件。

Sources