2026年9月9日水曜日

DGX Spark(ASUS ASCENT GX10)2 台連結と DeepSeek V4 Flash Vision Exp セットアップ記録

前回 は 1 台のセットアップを記録した。

今回は 2 台を QSFP ケーブルで連結し、DeepSeek V4 Flash Vision Exp を動かすまでの手順を記録した。

1. QSFP ケーブルでの 2 台接続

まず QSFP ケーブルで 2 台の GX10 を接続する。

QSFP ケーブルを差すときは、有線 LAN ポートに近い方のポートを使う。 そうすると、後で行うインターフェースが、この記事で書かれているものと同じになるはず。

2. インターフェースの特定と固定 IP の割り当て

接続後、ibdev2netdev コマンドでインターフェースを確認する。

ibdev2netdev

以下のような出力になる。

roceP2p1s0f0 port 1 ==> enP2p1s0f0np0 (Up)
roceP2p1s0f1 port 1 ==> enP2p1s0f1np1 (Down)
rocep1s0f0 port 1 ==> enp1s0f0np0 (Up)
rocep1s0f1 port 1 ==> enp1s0f1np1 (Down)

Up となっているインターフェースに、それぞれ固定 IP を割り当てる。

GX10-1 では /etc/netplan/40-cx7.yaml を編集する。

network:
  version: 2
  ethernets:
    enp1s0f1np1:
      addresses:
        - 192.168.100.10/24
      dhcp4: no
    enP2p1s0f1np1:
      addresses:
        - 192.168.101.10/24
      dhcp4: no

GX10-2 では同じファイルに以下の内容を書く。

network:
  version: 2
  ethernets:
    enp1s0f1np1:
      addresses:
        - 192.168.100.11/24
      dhcp4: no
    enP2p1s0f1np1:
      addresses:
        - 192.168.101.11/24
      dhcp4: no

両方で設定を適用する。

sudo chmod 600 /etc/netplan/40-cx7.yaml
sudo netplan apply

ip addr show で、設定が正しく適用されていることを確認する。

3. パスワードレス SSH の設定

ノード間でパスワードレス SSH を行うための設定をする。

両方の GX10 でキーペアを作成する。

ssh-keygen -t ed25519

お互いに公開鍵を送信し合う。

GX10-1 から GX10-2 へ公開鍵を送信する。

ssh-copy-id 192.168.100.11

GX10-2 から GX10-1 へ公開鍵を送信する。

ssh-copy-id 192.168.100.10

ノード間通信を確実に QSFP ケーブルで行うため、hosts ファイルにエントリを追加する。

192.168.100.10 gx10-1
192.168.100.11 gx10-2

ここまでで連携の土台が完成する。

4. DeepSeek V4 Flash レシピの適用

次に、DeepSeek-v4-Flash-DSpark-2x-DGX-Spark のレシピを適用する。

GX10-1 で作業を開始する。

mkdir -p ~/project
cd project
git clone https://github.com/MiaAI-Lab/DeepSeek-v4-Flash-DSpark-2x-DGX-Spark.git

env ファイルを用意する。

cd DeepSeek-v4-Flash-DSpark-2x-DGX-Spark
cp .env.dspark.example .env.dspark
vim .env.dspark

以下を指定する。

WORKER_HOST=192.168.100.11
MASTER_ADDR=192.168.100.10

VLLM_HOST_IP=192.168.100.10
WORKER_VLLM_HOST_IP=192.168.100.11

GX10-2 のユーザーを docker グループに入れ忘れていたのが発覚したのでここで入れる。

sudo usermod -aG docker <ユーザー名>

両方の GX10 で Docker イメージを pull する。

docker pull ghcr.io/anemll/dspark-vllm-gx10:0.1.1

次にモデルをダウンロードする。GX10-1 で以下を実行する。

./prepare-dspark-model-cache.sh --official

しばらく待つと、GX10-1 と GX10-2 の両方にモデルがダウンロードされる。

5. サーバー起動と動作確認

これで準備が整ったので、サーバーを起動する。

./start-deepseek-v4-flash-dspark.sh

boot-shape-warmup: 47/47 requests ok in 77s のような文字列が表示され、コマンド実行が終われば起動完了である。

docker ps でコンテナが動いていることを確認する。

最後に、curl コマンドでチャットのエンドポイントにリクエストを送り、動作確認する。

ポート 8888 で待ち受けているので、以下のコマンドでリクエストを投げる。

curl http://localhost:8888/v1/chat/completions \
    -H 'Content-Type: application/json' \
    -d '{"model":"deepseek-v4-flash-vision-exp","messages":[{"role":"user","content":"Design a small rate"}]}'

応答の JSON が返却されれば OK.

あとは OpenAI 互換の好きなクライアントで接続すれば良い。

以上。

参考資料

2026年9月8日火曜日

DGX Spark(ASUS ASCENT GX10)開封とセットアップ作業記録

DGX Spark は、日本では ASUS ASCENT GX10 として入手できる。 今回はその開封からセットアップまでを、トラブルも含めて記録した。

1. 開封と初回セットアップ

まずはコンセントにつないで電源を入れる。

GX10 はヘッドレスセットアップ(モニタやキーボードを接続せずに設定する方式)に対応しているので、モニタやキーボードは不要。 タブレットから接続して進める。

  1. タブレットで GX10-xxxx というネットワークに接続
    • 正確な SSID とパスワードは説明書に記載されている
  2. 同じくタブレットで http://gx10-xxxx.local に接続
    • この URL も説明書に記載されている
  3. ブラウザで GX10 のウェルカムページが開くので Get Started を押す
  4. 言語とタイムゾーンを設定して Continue
  5. 利用規約を読んで 承認
  6. ユーザー名とパスワードを設定して 続行
  7. 情報収集に協力するかどうかの選択
  8. GX10 が使用する Wi-Fi ネットワークを設定
  9. Wi-Fi につながると更新が始まる。ファームウェア更新も含まれるため、完了まで時間がかかる
  10. 更新が終わったらセットアップ完了。開始する を押す

これでセットアップは完了。あとは GX10 の IP アドレスを確認して SSH 接続するだけ。 IP アドレスは、GX10 に接続できる端末から ip addr を実行するか、ルーターの管理画面で確認できる。

2. カーネルパニック発生

セットアップが終わったと思ったら、カーネルパニック(OS が致命的なエラーで停止する状態)が発生した。

SSH が繋がらないため、電源長押しで強制終了し、再起動したのが原因だと思われる。 多分まだ裏でアップデート処理が走っていた…。

復旧するため、NVIDIA 公式の System Recovery ガイド を見ながら進める。リカバリイメージは NVIDIA のダウンロードページ から入手できる。

  1. リカバリイメージをダウンロードして展開
  2. リカバリ USB 作成スクリプト(CreateUSBKey.cmd)を実行し、リカバリ USB として使う USB デバイスを選択
    • 選択を誤るとデータが失われるため注意が必要だ
  3. リカバリ USB を DGX Spark に接続し、起動直後から DELINS を連打して UEFI 画面を開く
    • UEFI 画面を開くのは DEL キーだったようだ
  4. UEFI で Boot > DGX OS Recovery > Boot to this USB drive と選択
  5. Quit without saving? と聞かれるので Yes を選択
  6. しばらく待つとリカバリが終わるので再起動

リカバリ後、ホスト名が spark-xxx に変わっていた。

3. 再セットアップとサーバー化

再起動したら、スレッドの最初からもう一度セットアップをやり直す。

リカバリ後の OS では、ホスト名で SSH 接続できる。

SSH 接続後、中身は Ubuntu ベースなのでいつものアップグレードを実行。

sudo apt update
sudo apt upgrade

サーバーとして使うので、固定 IP を設定する。

sudo vim /etc/netplan/90-xxx.yaml

GUI はいらないので multi-user モードに変更。

sudo systemctl set-default multi-user.target

パスワード無しで SSH ログインできるように公開鍵を配置。

mkdir .ssh
chmod 700 .ssh
cd .ssh
vim authorized_keys
chmod 600 authorized_keys

GPU が熱暴走しないように、動作周波数を少し下げる。

sudo nvidia-smi -lgc 0,2200

ここまでやったら一度リブート。

sudo reboot

4. GPU を認識しなくなった

リブートしたら、GPU を認識しなくなった。

原因は、upgrade ではなく full-upgrade を実行しなかったことだ。 full-upgrade は依存関係の変更も反映するため、upgrade ではカーネル更新が GPU ドライバと整合しなかった。

sudo apt update
sudo apt full-upgrade

5. 工場出荷状態に戻して再インストール

ここで「GX10 用の初期化ユーティリティがある」ことを知った。

npaka さんの note Asus Ascent GX10 を工場出荷状態に戻す を参考に、 工場出荷状態に戻してやり直すことにした。

なお、セクション2のリカバリ(リカバリイメージとリカバリ USB 作成スクリプトを使う方法)とは別に、 ここでは ASUS の初期化ユーティリティで工場出荷状態に戻す。

  1. ASUS のサポートページ からリカバリイメージをダウンロード
  2. ダウンロードしたリカバリイメージは iso なので、Rufus で USB デバイスに書き込む
  3. USB を GX10 につないで USB から起動
  4. インストーラーの指示に従ってインストール
  5. インストールの進捗は表示されないため、完了まで待つ
  6. インストール完了、再起動後はまた最初と同じ初期セットアップ

6. 最終セットアップ

工場出荷状態に戻したため、初期セットアップからやり直す必要がある。 初期セットアップが終わったら、セクション3と同じ手順(SSH 接続、アップグレード、固定 IP、multi-user モード、公開鍵配置、動作周波数の調整、リブート)を再実行する。

7. 初期設定の完了と次の手順

これで初期設定は完了。

今回はここまで、次は GX10 同士を接続し、以下のレシピを適用する。

参考資料

2026年8月22日土曜日

Markdown と図を 1 つのファイルにまとめるエディタ「MaCa Editor」

MaCa Editor は、Markdown と図を Markdown Package Specification(mdpkg 仕様)に則った .mdpkg というひとつのファイルにまとめ、を閲覧・編集するためのデスクトップエディタです。 Markdown 文書の編集と SVG ベースの作図を 1 つのアプリケーションで行い、文章・画像・図をまとめて管理できます。

このツールが解決する問題

通常、文章と図は別々のツールで作ることが多いです。文章は Markdown エディタ、図は draw.io や Excalidraw などで作成し、最後に画像として貼り付けます。

例えば、技術資料を書いているときに、図を直したくなることがあります。 そのたびに、図ツールを開いて編集し、画像として書き出し、Markdown の images/ フォルダに置き直して、本文のリンク先が古い画像のままになっていないかを確認する、という手順を繰り返していました。 文章の修正が 1 行なのに、図の更新に数分かかることもあります。 しかも、書き出した画像と Markdown のリンクが別々に管理されているため、どちらかを更新し忘れると、資料全体の整合性が崩れます。

MaCa Editor は、この「文章と図を別々に管理する」手間を減らすことを目的としています。.mdpkg というパッケージ形式の中に、Markdown 文書・画像・SVG 図をまとめて保持し、1 つのアプリケーションで編集できるようにしています。

なぜ 1 つのアプリケーションにまとめるのか

文章と図を同じパッケージに保持すると、以下の利点があります。

  • 参照の整合性が保たれる: 図や画像のリンクがパッケージ内の相対パスで管理され、ファイルの移動や欠落を防ぎやすい
  • 編集の往復が減る: プレビュー上の図をクリックすると Drawing Editor が開き、その場で再編集できる
  • 配布が単純になる: .mdpkg 1 ファイルで文章・画像・図をまとめて持ち運べる

冒頭で挙げた「図を直すたびに書き出しと貼り直しを繰り返す」体験は、この設計でどのように改善されるのでしょうか。

まず、図の書き出しと貼り直しという手順自体がなくなります。 図は SVG としてパッケージ内に保持され、Markdown からはパッケージ内の相対パスで参照されます。 図を編集するときは、プレビュー上の図をクリックして Drawing Editor を開き、その場で書き出しなしに更新できます。 文章の修正が 1 行でも図の更新に数分かかる、という手間は、書き出しと貼り直しの往復が消えることで解消されます。

また、画像とリンクが別々に管理されていたために更新し忘れて整合性が崩れる問題も、構造上起こりにくくなります。 図とそれを参照する Markdown が同じパッケージにあり、リンクは相対パスで解決されるため、図を更新したときにリンク先を探し直す必要がありません。 ファイルの移動や欠落も、パッケージ内で管理されることで防ぎやすくなります。

つまり、この設計は「図の更新にかかる手間」と「図と文章の整合性を保つ手間」の両方を、1 つの場所で編集できるようにすることで削減しています。

主な機能

主な機能は以下の通りです。

  • Markdown の編集とプレビュー
  • ファイルと画像の管理
  • Drawing Editor
  • PlantUML・Mermaid

名称の由来

名称の MaCa は、Markdown と Canvas に由来します。Markdown による文章編集と、Canvas(描画領域)による SVG 作図を組み合わせた設計であることが、名称に表れています。

デモ動画

まとめ

MaCa Editor は、Markdown 文書と SVG 図を 1 つの .mdpkg パッケージにまとめて管理できるデスクトップエディタです。 文章・画像・図を同じ場所で編集・管理したい場合に適しており、図を多用する人にとってうれしいアプリケーションとなっています。