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 を使用

DGX OS に NixOS をインストールせずに、リポジトリの dev シェルとプレイブックを使用できます。セットアップには、Nix のインストール(公式または Determinate インストーラー経由)、/etc/nix/nix.confnix-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 で次の 2 つのカーネル選択肢を提示します:

  • NixOS (デフォルト) – DGX Spark 用の NVIDIA カスタムカーネルを使用し、フル GPU サポートと動作する Ethernet を提供します。
  • NixOS (standard-kernel) – 汎用の NixOS 6.17 カーネルを使用し、ドキュメントでは Ethernet の問題があると指摘されています。

ブートするには、BIOS で Secure Boot を無効にし、その後標準の NixOS インストールマニュアルに従ってください。

DGX Spark NixOS モジュール

リポジトリの NixOS モジュール (hardware.dgx-spark) はハードウェアサポートをカプセル化します。そのコアオプションは:

hardware.dgx-spark = {
  enable = true;                 # モジュールを有効にする
  useNvidiaKernel = true;        # デフォルト: NVIDIA 最適化カーネルを使用
};

useNvidiaKernel = true のとき、モジュールは NVIDIA の Debian アノテーションから構築されたカーネルを取り込み、NixOS デフォルトから必要最小限の違いのみに設定されます。これにより設定サイズが約 82 % 削減されます。また、このモジュールは DGX ダッシュボードウェブインターフェイスを http://localhost:11000 で有効にし、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 カーネル設定が変更されたときに、再生成が必要です。

モジュールのインポート

他のフレークは以下のようにモジュールを利用できます:

{
  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; }
        # 追加のモジュール
      ];
    };
}

クイックスタートテンプレートも提供されています: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、マルチエージェントチャットボット、マルチモーダル推論、Two Sparks 用 NCCL、NVFP4、OpenShell、PyTorch ファインチューニング(コンテナおよびネイティブ Nix 両方)、Speculative Decoding、TRT‑LLM、および vLLM(コンテナおよびネイティブ)などのプレイブックがリストされています。チェックマークは、NixOS と/または DGX OS でテストされたプレイブックを示します。たとえば、ComfyUI と DGX Dashboard プレイブックは両プラットフォームで動作することがマークされており、NVFP4 と OpenShell プレイブックは NixOS でのみテストされていることが示されています。

キャッシュ

大きな CUDA スタックの再構築を避けるため、プロジェクトは以下の 2 つのバイナリキャッシュを推奨します:

  1. Flox CUDA キャッシュ – NVIDIA の許可を得て、aarch64‑linux ビルドの cudatoolkit、nccl、cuDNN、PyTorch などを提供します。DGX Spark NixOS モジュールを使用すると、Flox キャッシュは自動的に代替ソースとして追加されます。スタンドアロンの Nix を DGX OS で使用する場合は、/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

これらのコマンドは、NVIDIA が DGX Spark ファームウェアを公開している Linux Vendor Firmware Service (LVFS) に接続します。

実験的なリモートインストール

実験的なセクションでは、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 テストモードも検証のために利用可能です。

コミュニティフィードバック

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