# Dgx Spark

> NVIDIA DGX Spark (ARM64 + CUDA 13.0) 環境での開発ガイド。PyTorch のインストール、ARM64 wheel の取得、GPU 関連の設定を行う。「DGX Spark」「CUDA」「PyTorch インストール」「ARM64 の GPU 環境」「Blackwell」などのリクエストで使用する。

- Skill: `schroneko/dgx-spark` (Agent Skill)
- Install (CLI): `npx skillmds@latest add schroneko/dgx-spark`
- Raw SKILL.md: https://api.skillmd.com/api/skills/schroneko/dgx-spark/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: schroneko (https://skillmd.com/u/schroneko)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/schroneko/dgx-spark

---


# DGX Spark (ARM64 + CUDA 13.0)

このマシンは NVIDIA DGX Spark。

- アーキテクチャ: ARM64 (aarch64)
- CUDA: 13.0
- GPU: NVIDIA GB10 (sm_121, Blackwell)
- VRAM: 119.7 GB（CPU と共有のユニファイドメモリ）

## メモリ管理（最重要）

121GB のメモリは CPU と GPU で共有するユニファイドメモリで、使い切るとマシンごと落ちる。実際に flash-attn と gptqmodel を MAX_JOBS=10 で同時ソースビルドして DGX Spark がクラッシュし、さらに flash-attn 単体を `MAX_JOBS=4 NVCC_THREADS=1 TORCH_CUDA_ARCH_LIST=12.1` に絞ってもクラッシュして再起動した実績がある。

- flash-attn のソースビルドはこのマシンで禁止。flash-attn 依存のパッケージ（exllamav3 など）は aarch64 のプリビルド wheel が出るまで導入しない。どうしても必要ならユーザーの明示承認を得て `MAX_JOBS=1` で試す
- その他の CUDA 拡張のソースビルド（gptqmodel、exllamav2 など）は `MAX_JOBS=2` から `MAX_JOBS=4`、`NVCC_THREADS=1` に制限する。gptqmodel 5.8.0 は MAX_JOBS=4 で数分でビルドできた
- 重いビルドは 1 パッケージずつ順番に実行し、複数パッケージの同時ビルドをしない
- ビルドとモデルロード・GPU ベンチマークを並行して走らせない
- 長時間処理の開始前と途中で `free -h` を確認し、available が 30GB を切ったら並列度を下げるか処理を止める
- GPU メモリもユニファイドメモリから取られるため、大きなモデルのロード中は CPU 側の余裕も同時に減る前提で計画する

## CUDA 拡張のソースビルド知見

- システム Python (`/usr/bin/python3`) には Python.h が無く、`--no-build-isolation` の CUDA 拡張ビルドが失敗する。`uv python install 3.12` と `uv sync --managed-python` で uv 管理 Python（ヘッダ同梱）に切り替える
- torch をビルド時に参照するパッケージ（gptqmodel、flash-attn、exllamav2/v3）は `--no-build-isolation-package <pkg>` を付けて venv の torch を見せる
- exllamav2 0.3.2 は config.h が無条件に `USE_AVX2` を定義していて aarch64 で `mm_malloc.h` エラーになる。`#if defined(__x86_64__)` ガードを当てれば JIT 拡張は sm_120 でビルド・動作する（上流バグ）
- llama.cpp は `cmake -B build -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=121` と `cmake --build build -j 4` で問題なくビルドできる（121 は自動で 121a に置換される）

## Ubuntu パッケージ管理

パッケージのインストール、削除、更新をエージェントやスクリプトから実行する場合は `apt-get` を使う。`man apt` では `apt` は end-user tool とされ、version 間で behavior が変わる可能性があるため、scripts では backward compatibility のため `apt-get` / `apt-cache` を prefer すべきと説明されている。

例:

```bash
sudo apt-get install -y kitty
```

対話的に人間が手元で実行するだけなら `apt install kitty` でもよいが、DGX Spark スキル内の手順やエージェント実行では `apt-get` を優先する。

## PyTorch インストール

PyPI の stable torch 2.11.0 以降は ARM64 + CUDA 13（cu130）の wheel を同梱しており、`torch>=2.4` を PyPI からそのまま入れるだけで `torch.cuda.is_available()` が True になる（2026-07 に DGX Spark 実機で確認済み）。まず PyPI stable を試す。

stable で ARM64 + CUDA wheel が取れない場合のみ、PyTorch nightly から取得する。

pyproject.toml に torch と triton を両方明示し、uv.sources で nightly インデックスを指定する:

```toml
[project]
requires-python = ">=3.11,<3.12"
dependencies = [
    "torch==2.11.0.dev20260105",
    "triton",
]

[tool.uv.sources]
torch = { index = "pytorch-nightly-cu130" }
triton = { index = "pytorch-nightly-cu130" }

[[tool.uv.index]]
name = "pytorch-nightly-cu130"
url = "https://download.pytorch.org/whl/nightly/cu130"
explicit = true
```

ポイント:

- torch と triton の両方を dependencies に追加する (triton がないと uv.sources が適用されない)
- ARM64 wheel がある特定バージョンを指定する (最新版には ARM64 wheel がない場合がある)
- `explicit = true` で他のパッケージは PyPI から取得する

## ARM64 未対応パッケージ

以下のパッケージは ARM64 wheel がない:

- decord: opencv-python-headless で代替

