Show HN: NixOS-DGX-Spark – 在 DGX Spark 上使用 Nix 和 NixOS
摘要
这个开源项目支持在 NVIDIA DGX Spark 上使用 Nix 和 NixOS,提供 USB 启动镜像和一个用于配置硬件的 NixOS 模块。
查看缓存全文
缓存时间: 2026/08/03 01:28
graham33/nixos-dgx-spark 源代码:https://github.com/graham33/nixos-dgx-spark
在 DGX Spark 上使用 Nix 和 NixOS
CI(https://github.com/graham33/nixos-dgx-spark/actions/workflows/ci.yml) Cachix(https://graham33.cachix.org) 许可证
在 DGX OS 上使用 Nix 试用 DGX Spark playbooks,或在您的 DGX Spark 上安装 NixOS 以获得完整的 Nix 体验。本仓库提供 USB 镜像和一个包含 DGX Spark 系统设置的 NixOS 模块。这适用于 NVIDIA DGX Spark 本身,也适用于华硕 Asus Ascent GX10。有关简介,请参阅我在 Planet Nix(https://planetnix.com)上的 5 分钟闪电演讲:https://youtu.be/AvK_gi_snJE?si=MPKv3iiuS9B5elIE
在 DGX OS(Ubuntu)上使用 Nix
您可以在 NVIDIA DGX OS(Ubuntu)上使用本仓库中的 dev shell 和 playbooks,而无需安装 NixOS。
设置
- 使用官方安装程序安装 Nix(https://nixos.org/download/):
sh <(curl -L https://nixos.org/nix/install) --daemon
或者,您也可以使用 Determinate Nix Installer(https://github.com/DeterminateSystems/nix-installer):
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
- 启用 flakes 和 nix-command,在
/etc/nix/nix.conf中添加:
experimental-features = nix-command flakes
- 启用 graham33 Cachix 缓存 — 请参阅下文中的缓存。
在非 NixOS 系统(如 DGX OS)上运行
在非 NixOS 系统上,Nix 构建的 CUDA 应用程序需要 nix-gl-host(https://github.com/numtide/nix-gl-host)来查找宿主机的 GPU 驱动程序。Playbooks 的 devshell 会自动处理这一问题 —— 基于容器的 playbooks 不需要它,而 Nix 原生 playbooks 会使用 nixglhost 包装其命令,因此无需手动干预。
对于其他 devshell(例如 cuda),可以使用 nixglhost 手动为命令添加前缀:
nix develop .#cuda
nixglhost deviceQuery
在 DGX Spark 上安装 NixOS
只有 DGX OS 能从出厂固件启动。在安装 NixOS 之前,您需要先更新固件。
USB 启动镜像
构建 USB 镜像:
nix build .#usb-image
sudo dd if=$(echo result/iso/*.iso) of=/dev/your_usb_disk_device bs=1M status=progress sync
该镜像包含两个内核选项,可在 GRUB 启动菜单中选择:
- NixOS(默认)—— NVIDIA 专为 DGX Spark 定制的内核,具备完整的 GPU 支持和可用的以太网
- NixOS(standard-kernel) —— 标准 NixOS 6.17 内核(以太网存在问题)
启动
在 DGX Spark BIOS 中禁用 Secure Boot,然后从 USB 驱动器启动。之后您可以按照 NixOS 手册中的安装说明进行操作:https://nixos.org/manual/nixos/stable/#sec-installation-manual
使用 DGX Spark 模块
该模块提供可配置的 DGX Spark 硬件支持,并带有内核选择选项。
模块配置选项
hardware.dgx-spark = {
enable = true; # 启用 DGX Spark 硬件支持
useNvidiaKernel = true; # 使用 NVIDIA 内核(默认:true)
};
使用 NVIDIA 内核
hardware.dgx-spark.enable = true; # 默认使用 NVIDIA 内核
NVIDIA 内核是为 NVIDIA DGX Spark 系统优化的自定义构建。内核配置是根据 NVIDIA 的 Debian 注解生成的,并与 NixOS 默认配置进行比较,以产生一个精简且可维护的配置。该模块还会在 http://localhost:8080 启用 DGX Dashboard Web 界面,提供 GPU 遥测和系统监控。
使用标准 NixOS 内核(网络方面存在一些问题)
hardware.dgx-spark = {
enable = true;
useNvidiaKernel = false; # 使用标准 NixOS 6.17 内核
};
内核配置管理
内核配置是根据 NVIDIA 的 Debian 注解生成的,并存储在 kernel-configs/nvidia-dgx-spark-<version>.nix 中。这个精简配置只包含与 NixOS 默认值不同的选项,将冗余度减少了约 82%。
重新生成内核配置:
nix run .#generate-kernel-config
该命令会:
- 从 GitHub 获取 NVIDIA 内核源代码
- 构建 NixOS 基线内核配置
- 将 NVIDIA 的注解与 NixOS 默认值进行比较
- 生成仅包含差异的精简配置文件
在以下情况下需要重新生成:
- NVIDIA 内核版本发生变化(更新
kernel-configs/nvidia-kernel-source.nix) - NixOS common-config 发生变化(nixpkgs 更新)
您也可以使用本地内核源码进行开发:
nix run .#generate-kernel-config -- --kernel-source /path/to/NV-Kernels
在其他项目中导入
其他项目可以导入此 flake 并使用 DGX Spark 模块:
{
inputs.dgx-spark.url = "github:graham33/nixos-dgx-spark";
outputs = { nixpkgs, dgx-spark, ... }: {
nixosConfigurations.mySystem = nixpkgs.lib.nixosSystem {
modules = [
dgx-spark.nixosModules.dgx-spark
{
# 启用 DGX Spark 支持
hardware.dgx-spark.enable = true;
# 可选:使用标准内核
# useNvidiaKernel = false;
}
# 您的其他模块
];
};
};
}
NixOS 快速入门模板
要获得一个专为 DGX Spark 系统设计的完整 NixOS 配置模板,您可以使用以下模板:
# 为您的 NixOS 配置创建一个新目录
mkdir my-dgx-spark-config
cd my-dgx-spark-config
# 使用 DGX Spark 模板进行初始化
nix flake init -t github:graham33/nixos-dgx-spark#dgx-spark
这会创建一个完整的 NixOS 配置,包含:
flake.nix— 导入 DGX Spark 模块的 flake 配置configuration.nix— 为 DGX Spark 优化的主系统配置hardware-configuration.nix— 硬件配置模板
自定义模板
初始化模板后,您需要:
- 生成硬件配置并更新模板:
# 将硬件配置生成到临时位置,以获取真实的 UUID
sudo nixos-generate-config --root /mnt --dir /tmp/nixos-config
# 复制生成文件中的真实硬件 UUID 和设置
# 将 hardware-configuration.nix 中的占位 UUID 替换为
# /tmp/nixos-config/hardware-configuration.nix 中的实际值
- 编辑
configuration.nix以进行自定义:
- 将主机名从
dgx-spark更改为您喜欢的名称 - 将用户名从
nixos更新为您喜欢的用户名 - 添加您的 SSH 公钥以进行远程访问
- 设置您的时区和区域设置偏好
- 添加您需要的任何额外软件包
- 将配置部署到 /etc/nixos:
# 将您的配置复制到 /etc/nixos
sudo cp -r . /etc/nixos/
# 应用配置
sudo nixos-rebuild switch --flake /etc/nixos#dgx-spark
固件更新
如 #32(https://github.com/graham33/nixos-dgx-spark/issues/32#issuecomment-4182117621)中所述,只有 DGX OS 能从出厂固件启动。如果 NixOS 无法从出厂固件启动,您需要先从 DGX OS 更新固件。
该模块会启用 fwupd(https://fwupd.org/)以进行固件更新。NVIDIA 会将 DGX Spark 固件发布到 Linux Vendor Firmware Service(LVFS)。要检查可用更新:
fwupdmgr get-updates
要安装可用更新:
fwupdmgr update
Playbooks
本仓库包含来自 https://build.nvidia.com/spark 的 NVIDIA DGX Spark playbooks 的 devshell:
| Playbook | 描述 | 类型 | 已在 NixOS 上测试 | 已在 DGX OS 上测试 |
|---|---|---|---|---|
| ComfyUI | 使用 Stable Diffusion 1.5 运行 ComfyUI 进行 AI 图像生成 | 🟢 完整 Nix² | ✅ | ✅ |
| Connect Two Sparks | 通过 QSFP 连接两个 DGX Spark 系统 | 🟢 完整 Nix² | ✅ | ☑️¹ |
| DGX Dashboard | 设置 DGX Dashboard 以进行系统监控 | 🟢 完整 Nix² | ✅ | ☑️¹ |
| FLUX.1 Dreambooth | FLUX.1 Dreambooth LoRA 微调 | 🟠 容器³ | ✅ | ✅ |
| Multi-Agent Chatbot | 构建并部署多智能体聊天机器人 | 🟠 容器³ | ✅ | ✅ |
| Multi-modal Inference | 使用视觉-语言模型运行多模态推理 | 🟠 容器³ | ✅ | ✅ |
| NCCL for Two Sparks | 使用 NCCL 进行多节点 GPU 通信 | 🟢 完整 Nix² | ✅ | ☑️¹ |
| NVFP4 | 使用 TensorRT Model Optimizer 进行 FP4 模型量化 | 🟠 容器³ | ✅ | |
| OpenShell | 使用 OpenShell 沙箱保护长期运行的 AI 代理 | 🔵 Nix + 容器⁴ | ✅ | |
| PyTorch Fine-tuning Container | 在 DGX Spark 上使用 PyTorch 微调模型 | 🟠 容器³ | ✅ | |
| PyTorch Fine-tuning Nix | 使用 PyTorch 微调模型(Nix 原生,无容器) | 🟢 完整 Nix² | ✅ | ✅ |
| Speculative Decoding | 使用推测解码加速推理 | 🟠 容器³ | ✅ | |
| TRT-LLM | 使用 TensorRT-LLM 进行优化推理 | 🟠 容器³ | ✅ | ✅ |
| vLLM Container | 使用 Qwen2.5-Math-1.5B-Instruct 模型运行 vLLM 推理服务器 | 🟠 容器³ | ✅ | ✅ |
| vLLM Nix | 原生运行 vLLM 推理服务器(Nix 原生,无容器) | 🟢 完整 Nix² | ✅ | ✅ |
¹ 已预装在 DGX OS 上 ² 完整 Nix:完全可重现 —— 所有依赖项均通过 Nix 安装 ³ 容器:Nix 提供 podman,但容器在运行时拉取/构建 ⁴ Nix + 容器:CLI 工具通过 Nix 打包,但容器由工具在运行时管理
缓存
Flox CUDA 二进制缓存(推荐)
Flox(https://flox.dev)在 NVIDIA 的许可下(https://developer.nvidia.com/blog/developers-can-now-get-cuda-directly-from-their-favorite-third-party-platforms/)分发适用于 aarch64-linux 的预构建 CUDA 软件包。这包括 cudatoolkit、nccl、cuDNN、PyTorch 和其他 CUDA 依赖项 —— 从而大幅减少构建时间。
如果您使用 DGX Spark NixOS 模块,Flox 缓存会自动配置为 substituter。
对于独立 Nix(例如在 DGX OS 上),请添加到 /etc/nix/nix.conf:
extra-substituters = https://cache.flox.dev
extra-trusted-public-keys = flox-cache-public-1:7F4OyH7ZCnFhcze3fJdfyXYLQw/aV7GEed86nQ7IsOs=
graham33 Cachix 缓存
用于本仓库构建的软件包(例如 dgx-dashboard、openshell):
cachix use graham33
如有需要,请先安装 cachix:https://docs.cachix.org/installation
有关常规 CUDA 缓存的详细信息,请参阅 https://nixos.wiki/wiki/CUDA。
nixos-anywhere(实验性)
此功能尚未经过测试。请自行承担使用风险。
您可以使用 nixos-anywhere(https://github.com/nix-community/nixos-anywhere)远程在 DGX Spark 上安装 NixOS。这对于目标机器可通过 SSH 访问的无头设置非常有用。
nix run github:nix-community/nixos-anywhere -- --flake github:graham33/nixos-dgx-spark#dgx-spark root@<目标主机>
这会为 NVMe 磁盘分区,并安装启用了 DGX Spark 模块的 NixOS。您可能想要自定义 nixos-anywhere/configuration.nix(例如添加 SSH 密钥或更改主机名)—— 克隆本仓库,然后将 --flake 指向您的本地检出。
要仅测试磁盘配置而不实际安装(在虚拟机中):
nix run github:nix-community/nixos-anywhere -- --flake .#dgx-spark --vm-test
有关完整详情和要求,请参阅 nixos-anywhere 文档(https://github.com/nix-community/nixos-anywhere/blob/main/docs/quickstart.md)。
许可证
MIT 许可证 —— 详情请参阅 LICENSE。
相似文章
Nvidia DGX Spark 作为日常使用的电脑
作者评价了 NVIDIA DGX Spark 作为一款功能强大的通用计算机,尽管它主要是一款人工智能开发设备,但其性能、能效以及能够运行《孤岛危机》等游戏的能力都备受称赞。
@aijoey: 给我的所有新DGX Spark用户. https://github.com/joeynyc/spark-doctor…
Spark Doctor 是一个开源的诊断命令行工具,专为NVIDIA DGX Spark设计,可收集系统、GPU、内存、Docker和配方数据,应用特定规则,并输出常见问题的可能原因及后续步骤。
NNN Stack: NixOS, Niri, Noctalia
NNN Stack 结合了 NixOS、Niri 组合器和 Noctalia shell,创建了一个声明式、可滚动且可复现的桌面环境,并邀请用户贡献他们的 dotfiles。
@MichaelGannotti: https://x.com/MichaelGannotti/status/2074486390432149979
对NVIDIA的Nemotron-3 Mamba-Transformer混合模型在DGX Spark硬件上的全栈评估,包括架构分析、量化(NVFP4)、基准测试结果,以及开源测试套件smf-bench的介绍。
戴尔在Computex上确认搭载NVIDIA N1X的XPS笔记本(基本上是为消费者配备Windows系统的DGX Spark GB10)
戴尔确认了一款搭载NVIDIA N1X芯片的新XPS笔记本,本质上就是DGX Spark GB10的消费者版本,将在Computex上发布。