EdgeXpert Blog

03-setup / wave 1 / status: published / 更新日: 2026-06-14

DGX Spark が ARM で動かない?DGX OS で詰まる点と回避策

要約

GB10 搭載の DGX Spark / MSI EdgeXpert を ARM64(DGX OS)で使い始めると、「nvidia-smi にメモリが出ない」「pip で導入したのに CUDA エラーで起動しない」など、故障と誤解しやすい正常挙動と、x86 前提の手順が通らない問題に立て続けに当たる。本記事は、これら「DGX Spark ARM 動かない」と感じる典型事象を、NVIDIA 公式の既知問題・公式 Playbook という一次情報と、筆者の MSI EdgeXpert 実機確認とに分けて整理し、原因と回避策を示す。対象読者は、GB10 機を入手してセットアップ・初期運用で詰まっているエンジニアである。

結論を先に言えば、ここで挙げる事象の大半は UMA(統合メモリ)と aarch64 + sm_121 という比較的新しい構成ゆえの仕様・エコシステムの未追従であって、ハードウェアの故障ではない。その多くは公式が回避策を明記している。

検証環境

筆者の実機(MSI EdgeXpert)と、公式リリースノートに記載されたソフトウェア構成は次のとおり。

項目備考
機材MSI EdgeXpert(GB10, 128GB UMA)GB10 / 20-core Arm
アーキテクチャaarch64(ARM64)実機 uname -m で確認
OSDGX OS 7.5.0 系Kernel 6.17(Canonical)
GPU Driver580.159.03実機 nvidia-smi で確認
CUDA13.0(Toolkit 13.0.2)実機 nvidia-smi 表示は CUDA Version 13.0
Compute Capability12.1(sm_121)実機 nvidia-smi --query-gpu=compute_cap で確認

注意: 上記のバージョン群(DGX OS 7.5.0 / CUDA 13.0.2 / Driver 580.159.03)は、NVIDIA 公式リリースノートでは DGX Spark Founders Edition のみに適用されると明記されている。GB10 ベースのパートナー製品(MSI EdgeXpert 等)は同じ更新を同時には受け取らない場合があるとされており、手元の版が上表と異なりうる。バージョン依存の判断をする際は、必ず実機で確認してほしい(出典: 公式リリースノート)。

DGX Spark が ARM で「動かない」と感じる詰まりどころと回避策

以下は、いずれも NVIDIA 公式の既知問題ドキュメント、または公式 Playbook に根拠がある事象である。出典の性格(公式既知問題か、Playbook か、フォーラム / Issue か)を都度示す。

nvidia-smi の Memory-Usage が「Not Supported」になるのは正常

nvidia-smi を叩くと、GPU 全体の Memory-Usage 欄が Not Supported と表示される。これは故障ではない。NVIDIA 公式の既知問題に「nvidia-smi will display ‘Memory-Usage: Not Supported’ even though per-process GPU memory is listed」と明記されており、iGPU(統合 GPU)が専用フレームバッファメモリを持たないための想定動作である。プロセス別の GPU メモリは別途表示される。

実機出力は後述の「実機確認」に載せた。要点は、「GPU 全体の Memory-Usage 欄は Not Supported だが、Processes 欄にはプロセスごとの使用量が出る」という公式記載どおりの挙動が、筆者の EdgeXpert でも再現したことである。

UMA で cudaMemGetInfo がメモリを過少報告する → drop_caches

UMA(統合メモリ)構成のため、cudaMemGetInfo が割当可能メモリを実際より小さく報告することがある。公式既知問題によれば、この API は「SWAP から回収しうるメモリを勘定しない」ため、報告値が実際に割り当て可能な量を下回りうる。

公式が示す回避策は、バッファキャッシュをフラッシュするコマンドである(原文ママ)。

sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'

筆者の実機でもこの効果を確認できた。PyTorch の torch.cuda.mem_get_info()(内部で cudaMemGetInfo を呼ぶ)で計測すると、drop_caches 実行前の空きは 87.62 GiB だったが、実行後は 117.71 GiB まで回復した(total は前後とも 121.63 GiB)。約 30 GiB がバッファキャッシュとして抱えられ「空き」に計上されていなかったことになる。大型モデルのロード前に効くという公式の案内どおりの挙動である(数値は後述の「実機確認」)。

なお公式リリースノート(2025 年 11 月)には UMA でのメモリ報告差異を改善した旨の記載もあるが、過少報告自体は既知挙動として引き続き念頭に置くのが安全である。

mDNS(spark-xxxx.local)が企業ネットワークでブロックされる → IP直指定

デバイスは mDNS で spark-abcd.local 形式のホスト名を広告する。公式 Playbook(connect-to-your-spark)は、「複雑な企業環境などでは mDNS が期待どおり動作せず、デバイスの IP アドレスを直接使う必要がある」と明記している。

典型的な失敗症状は次のとおりである。

ssh: Could not resolve hostname spark-abcd.local: Name or service not known

この場合は .local 名ではなく IP を直接指定する。IP はルータの管理画面、またはディスプレイをつないで Ubuntu のネットワーク設定から確認できる。SSH やポートフォワード(DGX Dashboard は 11000 番)も、ホスト名の代わりに IP を渡せばよい。

ブート直後・初回セットアップ直後はネットワークや SSH がまだ来ない → 数分待つ

電源投入直後や初回セットアップ完了直後に SSH やネットワーク接続ができなくても、故障とは限らない。サービスが立ち上がるまでには時間がかかる。

ただし「何分待てばよいか」は文脈によって異なるため、本記事では単一の数値には断定しない。

つまり初回は「3〜4 分」より長く、最大 10 分を見込むのが安全である。詳しい初回セットアップ手順は初期セットアップ完全ガイドを参照してほしい。

電源アダプタ要件・HDMI ディープスリープからの復帰

これらも公式既知問題に挙げられている。

給電要件が重い背景には、製品仕様上の PSU 240W / GB10 TDP 140W という値がある。

x86 前提の手順が通らない(ARM64 = aarch64)

本記事の主題の一つがこれである。GB10 機は ARM64(aarch64)であり、x86 前提の手順やバイナリは原則そのままでは動かない。

VS Code Remote-SSH を含む実際の導入手順は初期セットアップ完全ガイドで扱っている。

最新機能は NGC コンテナ経由で提供される

公式既知問題ドキュメントは、CUDA が「ソフトウェア更新リリース時点でハードウェアと動作検証済み」であり、最新機能は NGC コンテナ経由で提供される旨を述べている。

vLLM の公式 Playbook も、導入手順として NGC コンテナイメージ経由(docker pull nvcr.io/nvidia/vllm:<version>)を示している。ソースからのビルドは CMake / Ninja の知識を前提としており、aarch64 で組む場合は追加の作業を覚悟しておきたい。

注: vLLM Playbook に記載された個別モデル向けのコンテナタグ等は、本記事執筆時点で確度を十分に確認できていないため転載しない。一般論(NGC コンテナ配布が主、ソースビルドは aarch64 で要追加作業)のみを採用している。

sm_121(Compute Capability 12.1)固有のハマり

GB10 の CUDA Compute Capability は **12.1(sm_121)**であると、NVIDIA スタッフが開発者フォーラムで「The DGX Spark will have compute capability 12.1」と明言している(2025-09-25。フォーラム由来の一次情報)。さらに筆者の実機でも、nvidia-smi --query-gpu=compute_cap の出力が 12.1 となることを確認した(後述の「実機確認」)。フォーラムの一次情報と実機実測の両方で sm_121 が裏付けられている。

問題は、既存のプリビルドバイナリの中に sm_120 までのカーネルしか同梱せず、sm_121 を含まないものがある点だ。vLLM の Issue #36821 では、「同梱の PyTorch バイナリが sm_120 までのカーネルしか含まないため、sm_121 を要求する Blackwell GPU で起動時にクラッシュする」と報告されている。これは実行時の設定変更では解決せず、sm_121 + aarch64 対応の wheel か、再ビルドした Docker イメージが必要になる(Issue 由来のため、確度は公式既知問題より弱い)。

実用上の示唆はこうだ。「PyTorch やライブラリを pip で導入できたのに、起動で CUDA エラーになる」というハマりは、aarch64 であることに加えて sm_121 非対応が原因のことがある。

ただし留保もある。筆者の実機では sm_121(12.1)そのものは確認できたが、sm_121 起因と思われる CUDA エラーには遭遇していない。ollama は正常に動作しており、上記のクラッシュは vLLM Issue #36821 で報告された事象である(Issue 由来のため、確度は公式既知問題より弱い)。また個別ライブラリ(conda / mamba、flash-attention 等)の aarch64 / sm_121 対応状況は公式一次情報での裏取りが未完のため、本記事では個別の断定を避ける(未検証)。

実機確認

筆者の MSI EdgeXpert(2026-06-14 時点)で確認できた事実を、公式記載と区別してまとめる。

A. nvidia-smi の Memory-Usage が実機でも「Not Supported」 GPU 全体の Memory-Usage 欄は Not Supported だが、Processes 欄には ollama の llama-server が 81649MiB(約 80GB)と表示された。「プロセス別 GPU メモリは出るが、GPU 全体の Memory-Usage 欄は Not Supported」という公式記載どおりの挙動を実機で確認した。GPU-Util 95% / 71C / P0 / 45W、NVIDIA-SMI 580.159.03 / Driver 580.159.03 / CUDA Version 13.0。実機出力(抜粋):

| N/A   71C    P0             45W /  N/A  | Not Supported          |     95%      Default |
...
|    0   N/A  N/A          396913      C   ...local/lib/ollama/llama-server      81649MiB |

B. uname -m → aarch64 実機で aarch64 を確認した。ARM64 であることの一次証拠であり、前述の「x86 前提が通らない」問題の根拠でもある。

C. Compute Capability は実機でも 12.1(sm_121) 当初 deviceQuery(CUDA Samples)は未導入で実行できず、通常の nvidia-smi 出力にも Compute Capability 欄が無かったが、nvidia-smi --query-gpu=compute_cap を使うと実機で 12.1 が出力された。フォーラムの一次情報(NVIDIA スタッフ明言)が実機実測でも裏付けられた形である。

$ nvidia-smi --query-gpu=compute_cap --format=csv
compute_cap
12.1

なお実機では sm_121 起因の CUDA エラーには遭遇しておらず、ollama は正常に動作している。

D. cudaMemGetInfo の過少報告と drop_caches の効果 PyTorch の torch.cuda.mem_get_info() で空きメモリを計測したところ、drop_caches 実行前後で次のように変化した。total は不変で、free のみ約 30 GiB 回復している。過少報告(キャッシュ分が空きに計上されない)と公式回避策の効果を、実機で確認できた。

drop_caches 実行前: free = 87.62 GiB / total = 121.63 GiB
drop_caches 実行後: free = 117.71 GiB / total = 121.63 GiB

考察

これらの事象がなぜ起きるのかを、原理から整理する。

第一に、nvidia-smi の Not Supported と cudaMemGetInfo の過少報告は、UMA(統合メモリ・専用フレームバッファなし)という設計に由来する。GB10 は GPU 専用の VRAM を持たず、128GB の LPDDR5x を CPU と GPU が共有する UMA 構成(公称帯域 273GB/s)である。専用フレームバッファが存在しないため、従来の「GPU の VRAM 使用量」という表示が成立せず、Not Supported になる。また、システムメモリと共有しキャッシュ・SWAP が絡むため、cudaMemGetInfo の瞬間値が実際の割当可能量を下回りうる。いずれも独立 VRAM を前提にした x86 ディスクリート GPU の常識をそのまま当てはめると「故障・容量不足」と誤解しやすいが、UMA では想定内の挙動である。

第二に、pip で入れたのに起動で落ちる類のハマりは、aarch64 + sm_121 という比較的新しい組み合わせにエコシステムが追従しきれていないことが原因と考えられる。多くのプリビルドバイナリは x86_64 向けを主に整備されており、aarch64 ホイールが無い、あるいは古いことがある。さらに GPU 側も sm_121 という新しい Compute Capability であり、sm_120 までしか含まないバイナリでは実行時に対象アーキテクチャが見つからずクラッシュしうる(vLLM Issue #36821)。だからこそ NVIDIA は最新機能を NGC コンテナ経由で配布し、検証済みの組み合わせを提供している。逆に言えば、ollama のように aarch64 + Blackwell 向けに整備された経路を使えば素直に動く(筆者実機で確認済み)。

要するに、本記事の事象は「壊れている」のではなく、UMA と新アーキテクチャという前提の違いから生じている。前提を理解すれば、回避策の多くは公式が用意している。

まとめ

次に読む記事:

取材メモ

検証環境の前提(公式リリースノート)

1. nvidia-smi の Memory-Usage が「Not Supported」(正常)

2. UMA で cudaMemGetInfo が割当可能メモリを過少報告 → drop_caches

3. mDNS(spark-xxxx.local)が企業ネットワークでブロック → IP直指定

4. ブート直後/初回セットアップ直後はネットワーク・SSHがまだ来ない → 数分待つ

5. 電源アダプタ / HDMIモニタのディープスリープ(公式既知問題)

6. x86前提の手順が通らない(ARM64=aarch64)

7. 最新機能は NGC コンテナ経由で提供

8. CUDA Compute Capability sm_121(Blackwell)固有のハマり

DGX Dashboard / 更新手順(補足)

実機確認(筆者 MSI EdgeXpert / 2026-06-14)

未確認 / 留意リスト