モデル別実行レシピ

Qwen3.8 Flash-NextをDGX Sparkで動かす:SGLang・PLE・MTPレシピ

DGX Spark 1台でQwen3.8 Flash-Nextを実行します

Qwen3.8-Flash-Nextはプロンプト1と長い文脈を受け取り、テキストを生成するモデルです。DGX Spark 1台でこのレシピを再現するには、専用NVFP42 checkpoint3、PLE4 tableをNVMe5へoffload6するpatch、SGLang設定、MTP7値を組み合わせます。ファイルを取得・準備してserverを起動し、各経路が適用されたかlogで確認します。

まず再現する構成を決めます。公開スクリプトの32K単一request profileと長文脈テストでは、メモリ比率とprefill8 chunkが異なります。モデル名が同じでも実行条件が同じとは限りません。この手順では専用PLE offload経路を準備し、適用を確認します。

実行条件と要点
  • 公開launch scriptはメモリ比率0.85、prefill chunk 2,048、文脈32Kから始まります。
  • 262K単一request構成ではメモリ比率0.79、prefill chunk 1,024を使います。
  • MTP steps 3とdraft tokens 4は別の設定です。NVFP4重みとBF16 KV cacheも区別します。
機器別の実行設定へ移動

checkpointとPLE offload経路をまとめて準備します

このレシピはQwen3.8-Flash-Next用の特定NVFP4 checkpointを使います。全tensorを一律4bitにしたファイルという意味ではありません。attention9やMTPなど高い精度を保つ部分もあるため、ファイル全体と実際の読み込みを確認します。

Sparkのユニファイドメモリ10はCPU11とGPU12で共有されます。この構成の中心は、大きなPLE tableをNVMeに置き、必要な項目を参照する専用mmap patchです。stock SGLangにオプションを足すだけでは同じメモリ配置になりません。table全体を常にメモリに置く必要はありませんが、requestごとに必要項目を探して移動する時間は発生します。

repositoryとpatchのversionや内容を確認し、本番環境とは分けて準備します。downloadと変換用の一時領域も必要です。scriptが示すNVMe空き容量約140GB以上を目安にしつつ、現在のdownloadファイルサイズを再確認します。NVMeの保存容量と、実行中のpage cacheや他processが使うメモリは別々に確認します。

手の緑のブロックから複数のブロック構成と設定カードへ分かれる図
checkpoint・patch・実行設定を合わせて同じ構成を再現します。

まず32K単一request profileでserverを起動します

公開scriptはTP 1、メモリ比率0.85、prefill chunk 2,048から始まります。prefill backendはTriton、decode13 backendはtrtllm_mhaです。MTPはNEXTN、3 steps、top-k 1、draft token14 4つに設定します。この値は再現するprofileであり、公開測定時の全条件が確認できたという意味ではありません。

最初のcommand群でrepositoryと重みを取得し、patch済み環境を準備し、server portをlocal addressだけに公開します。Dockerと約140GB以上のNVMe空き容量が必要です。準備後にverify.pyでserver応答を確認します。起動時にscripts/serve.shはrepository付属の設定を読むため、別の場所のファイルを混在させないようpathを確認します。

取得と準備は最初のターミナルで進めます。起動後はログのターミナルを残し、リポジトリフォルダーで2番目を開いてpython3 verify.pyを実行してください。ブロック末尾の確認も2番目で送ります。

DGX Spark 1台の32K実行を準備・確認
git clone https://github.com/hashd1ve/qwen38-flash-next-one-dgx-spark.git
cd qwen38-flash-next-one-dgx-spark

./scripts/download.sh
./scripts/prepare.sh
sed -i.bak 's/-p "$PORT":30000/-p "127.0.0.1:$PORT:30000"/' scripts/serve.sh
MEMFRAC=0.85 PREFILL=2048 CTX=32768 ./scripts/serve.sh
# In a second terminal opened in this repository folder:
python3 verify.py
downloadと準備後にportをlocalだけへbindし、32K serverへ確認requestを送ります。
公開scriptのSGLang主要設定
# Publish the Docker port only on 127.0.0.1:30000
--tp-size 1
--prefill-attention-backend triton
--decode-attention-backend trtllm_mha
--quantization modelopt_fp4
--ple-offload-embedding
--mamba-radix-cache-strategy extra_buffer
--mem-fraction-static 0.85
--chunked-prefill-size 2048
--max-running-requests 4
--speculative-algorithm NEXTN
--speculative-num-steps 3
--speculative-eagle-topk 1
--speculative-num-draft-tokens 4
--speculative-draft-model-quantization unquant
PLE mmap patchのないstock SGLangでは、これらのoptionだけで同じメモリ配置にはなりません。

長文脈では文脈上限とprefill chunkを合わせて調整します

長文脈profileではメモリ比率0.79とprefill chunk 1,024を使い、メモリpeakに余裕を作るところから始めます。公開された長文脈測定はメモリ比率0.85、request 1件の条件なので、以下のcommandはその測定を正確に再現するものではありません。文脈上限を262,144に設定できても、すべての機器や文書でその長さを安定処理できるという意味ではありません。

まず短い入力で正常動作を確認し、8K・32K・128Kのように段階的に増やします。各長さで文書の途中に答えを知っている文を置き、実際に見つかるか確認します。prefill chunkを小さくするとメモリpeakを下げられますが、短い入力の処理量が下がる場合があります。chunk sizeは一度に処理する単位を調整するもので入力token自体をなくさないため、後半の根拠も回答に反映されるか確認します。

単一request profileは同時処理量の測定ではありません。同時requestを増やすと、それぞれのprefillとKV cache15が機器資源を共有します。まずrequest 1件で文脈長16ごとのメモリと初回token待ちを確認し、実運用で同時処理が必要なら別途試験します。CTX=262144はserverの許容上限であり、実際に送信した入力長とは分けて記録します。

長い会議記録の途中に出てくる決定日を探す必要があるなら、入力を増やすたびにその日付を原文と照合します。前半は正しくても中盤や後半の条件を見落とすなら、server設定だけでなく根拠が入力に含まれていたか確認します。設定可能な最大文脈と実際の文書作業の成功は別の確認項目です。

長い文脈へ切り替える前にサーバーターミナルでCtrl+Cを押し、コンテナーも終了したか確認します。下のブロックはリポジトリの親フォルダーで開いた新ターミナル用です。すでに中ならcd行を省略します。新サーバーの準備後、別ターミナルから確認してください。

DGX Spark 1台での262K文脈テスト
# Run after completing the download, preparation, and local port setup above
# Server address: http://127.0.0.1:30000
cd qwen38-flash-next-one-dgx-spark
sed -i.bak 's/--max-running-requests 4/--max-running-requests 1/' scripts/serve.sh
MEMFRAC=0.79 PREFILL=1024 CTX=262144 ./scripts/serve.sh
# In a second terminal opened in this repository folder:
python3 verify.py
prefill chunkを小さくすると短い入力の処理量が下がる場合があります。
色ブロックの容器から大きな棚と分割されたブロックへ矢印が伸びる様子
文脈上限だけでなくprefill chunkとrequest数も設定します。

実行経路と回答を確認してから速度を比較します

準備後、実行logで意図したNVFP4 checkpointとPLE fileが開かれたか、prefill・decode backendが選択されたか確認します。実際の経路が設定値と異なるなら、runtime17がdefault pathを使った可能性があります。適用logを先に確認すると、patch未適用と正しい経路で性能が期待と異なる問題を分けられます。

公開scriptが許可する最大同時request数は、実際に同時送信した数とは異なります。まずrequest 1件でserverが対象文書を処理するか確認します。Docker portが127.0.0.1だけに公開されているかも確認します。共有serverにする場合はアクセス制御とfirewallを別途準備します。

公開実行記録では英語コードが約41.5 tok/s、スペイン語の一般文が約22.8 tok/sと報告されています。言語と回答形式が異なるため、差し引いたり割ったりして直接比較しません。prefill 1,910 tok/sの記録は、入力cache再利用による測定汚染が原文で示され、cacheを消した反復試験が完了していないため比較基準から除外します。tok/sはその条件での生成区間の記録であり、韓国語PDF依頼の全体完了時間ではありません。

表は別途報告されたoMLX 0.7.0の実行結果で、Qwen3.8-Flash-Next oQ4e、temperature 0、Lightning MTP、TurboQuant KV 8bit、aggressive memory guardを使用しています。各点は1台のMacで1回実行した結果なので、DGX SparkのSGLang実験と同条件で比較できません。

左右にスクロールして各項目を比較できます。

別のMac・oMLX実行記録の測定条件
コンテキストプリフィルデコード記録項目
4K4,949 tok/s143.8 tok/soMLX code_python、最大出力128token
16K5,701 tok/s未報告:モデルが16token前に停止この点で1回実行
32K5,672 tok/s114.6 tok/sM5 Ultra 256GB、80コアGPU
長い文脈で速度はどう変わる? — M5 Ultra 256GB · Flash-Next oQ4e · oMLX 0.7.0.dev2 · MTP 3
モデルをメモリに載せた後の公開記録です。SSDからのロード時間は含みません。
文書入力とブロック処理からserverと確認表へ続く流れ
意図したPLE・prefill・decode経路を確認してから作業を比較します。

実作業でこのレシピが必要か判断します

専用patchで大型モデルをSpark 1台に載せることと、毎日快適に使うことは異なる目標です。実際の文書やコードを処理し、完了時間とメモリ状態を確認します。安定したSpark 1台の構成で業務が完了するなら、2台目を追加する理由は小さくなります。より長い文脈や同時requestが必要なら、その条件を別に試します。

最後にNVFP4 file、PLE配置経路、実行環境の組み合わせを記録します。モデルファイルを変えるとPLEのメモリ配置や必要容量が変わる場合があります。vLLM・SGLang用のNVFP4配布物を選ぶときも、checkpoint形式とruntimeの対応を合わせて確認します。

NVFP4配布版を実行するときに確認します

NVFP4でPLE tableをどう読み込むかは実行環境とpatchによって異なります。Spark 1台では専用offload経路が適用されたかlogを確認します。vLLMやSGLang用の配布版を選ぶときは、取得したnvidia/Qwen3.8-Flash-Next-NVFP4 checkpointがruntimeに合うか先に確認します。

用語の注釈

  1. プロンプト — モデルに送る入力文です。生成モデルでは作りたい結果を説明する文になり、出力の構成や内容を大きく左右します。

    本文に戻る
  2. NVFP4 — NVIDIAが定義した4ビット浮動小数点データ形式です。対応状況はGPU世代、モデル、ソフトウェア実装によって異なります。

    本文に戻る
  3. チェックポイント — 学習済みモデルの重みなどを保存したファイルです。同じモデル系列でも、版や用途によって異なるチェックポイントを使うことがあります。

    本文に戻る
  4. PLE埋め込みテーブル — Per-Layer Embeddingの略で、モデルの特定の層に埋め込み情報を加える構造です。Qwen Flash-Next系はn-gramテーブルを使い、対応する実行環境ではRAMやSSDへオフロードできます。

    本文に戻る
  5. NVMe — SSDがPCI Express経由で通信する際に使うストレージ用プロトコルです。

    本文に戻る
  6. オフロード — 容量が足りないとき、モデルデータの一部をGPUメモリからシステムRAMやストレージへ移して処理する方法です。データ転送が追加されます。

    本文に戻る
  7. MTP — 複数の将来トークンを一度に予測する学習目標、またはそれを行うモデル構成です。投機的デコーディングでは、その予測を候補トークンとして提案できます。

    本文に戻る
  8. プリフィル — LLMが入力プロンプトを読み、各トークンの内部表現を計算する段階です。プロンプトが長いほど処理するトークンが増えます。

    本文に戻る
  9. Attention — 入力トークン間の関連度を計算し、各位置の情報を現在の表現に反映するニューラルネットワーク演算です。

    本文に戻る
  10. ユニファイドメモリ — CPUとGPUが同じ物理メモリ領域を共有する構造です。

    本文に戻る
  11. CPU — OSや一般的なプログラム命令を実行する中央処理装置です。AIでは前処理やデータ転送などの汎用処理も担います。

    本文に戻る
  12. GPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。

    本文に戻る
  13. トークンのデコード — 入力とそれまでの回答をもとに、次の出力トークンを順に生成する段階です。

    本文に戻る
  14. トークン — モデルが入力や出力を分けて処理する単位です。

    本文に戻る
  15. KVキャッシュ — 過去トークンのAttention用キー・バリューを保存し、後続トークン生成で再利用するメモリです。容量はコンテキスト長やバッチサイズで変わります。

    本文に戻る
  16. コンテキスト長 — 1回のリクエストでモデルが扱える入力と生成内容のトークン範囲です。上限や実際のメモリ使用量はモデルと実行設定によります。

    本文に戻る
  17. ランタイム — プログラムの実行時に必要な機能を提供するソフトウェア環境です。ローカルAIではモデル実行エンジンを指すこともあります。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
Qwen3.8-Flash-Nextはプロンプトと長い文脈を受け取り、テキストを生成するモデルです。DGX Spark 1台でこのレシピを再現するには、専用NVFP4 checkpoint、PLE tableをNVMeへoffloadするpatch、SGLang設定、MTP値を組み合わせます。ファイルを取得・準備してserverを起動し、各経路が適用されたかlogで確認します。
必要なメモリはどのくらいですか?
SparkのユニファイドメモリはCPUとGPUで共有されます。この構成の中心は、大きなPLE tableをNVMeに置き、必要な項目を参照する専用mmap patchです。stock SGLangにオプションを足すだけでは同じメモリ配置になりません。table全体を常にメモリに置く必要はありませんが、requestごとに必要項目を探して移動する時間は発生します。

実行レシピ

機器別の設定

1人で使う場合

使う機器を選ぶと、起動コマンドと調整できる設定が表示されます。

使用可能メモリ: 114GB / 帯域幅: 546GB/s

プロファイル

Apple Mac Studio M4 Max (128GB)

メモリに収まる

推奨ランタイム: oMLX (MLX 4ビット(GGUF Q4_K_Mとは別形式)) · ドキュメントに基づくランタイム設定

インストール後の初回実行や、毎日安定して使いたいときに

プロファイルのコンテキスト長

8,192 トークン

ランタイムの文書に基づく設定Studio M4 Max 128GB · Q4 · 要求 1個

ランタイムのドキュメントに基づく初期設定です。下の手順に沿って調整し、速度を比べてください。

デコード速度の推定値

34.2 ~ 48.1 tok/s

1人で使う場合の推定値

最初のトークンまでの推定時間

8.8 ~ 17.1秒

プリフィル: 479 ~ 936 tok/s

推定メモリ使用量

約 107.55GB / 114GB

残余の余裕:少ない 6.5GB

サーバーアドレス

http://127.0.0.1:8000

ローカルのみ · 127.0.0.1

推定値は、計算ツールが推奨する量子化・高速化設定と 8,192トークンを基準にしています。上記の実行設定を測定した値ではありません。

このプロファイルの設定

設定値この設定にする理由
重みMLX 4ビット(GGUF Q4_K_Mとは別形式)MLXモデルのディレクトリを使います。Q4_K_MのGGUFとはファイル形式が異なります。
入力長の確認8,192リクエスト前にモデル設定の入力上限を確認してください。この起動コマンドではコンテキスト長を指定していません。
KVキャッシュモデル設定で確認この起動コマンドではKVキャッシュの精度を指定していません。
プリフィルのバッチサイズランタイム設定で確認llama.cppのbatch-sizeとubatch-sizeを、MLXの設定値としてそのまま使わないでください。
同時リクエスト数11件のリクエストの速度を測ります。複数リクエストを合わせた処理量とは分けて確認します。
メモリの余裕2GB以上モデルの読み込み後に、実際のメモリ使用量とスワップの有無を確認します。

Studio M4 Max 128GB 実行コマンド(oMLX)

Apple Silicon · MLX モデル · メモリ ガード
MODEL_DIR="$HOME/.omlx/models"
omlx serve \
  --model-dir "$MODEL_DIR" \
  --host 127.0.0.1 \
  --port 8000 \
  --max-concurrent-requests 1 \
  --memory-guard balanced
まずこの設定で基準速度を記録し、その後は下の手順に沿って一項目ずつ変更します。

起動後の確認

  1. 01起動ログで、モデルの読み込み完了と実際のコンテキスト長を確認します。
  2. 02ウォームアップ後はリクエストを1件ずつ送ります。同じ長さの異なる入力を3つ使い、キャッシュを再利用しない初回の処理時間を記録します。
  3. 03同じ入力を繰り返した結果は、キャッシュ再利用の記録として分けます。初回入力の結果と混ぜないでください。
  4. 04プリフィルtok/s、デコードtok/s、ピークメモリをまとめて記録し、その後は一項目ずつ変更します。

変わる点と注意点

  • コンテキスト長と同時リクエスト数を控えめにしているため、機器の最大処理量より低い結果になることがあります。

使う際の注意点

  • PLE n-gramテーブルのRAM・SSD配置によってロード時のメモリー量が変わります。速度画面に表示された配置とメモリーの余裕を基にコンテキスト長を決めます。

1つずつ調整

高速化の手順

複数の値を一括で変更すると原因を特定するのが難しいです。

  1. STEP 1

    基準値を保存

    初回入力とキャッシュ再利用を分け、それぞれ3回記録します。プリフィル、デコード、ピークメモリを一緒に比較します。

    とき: エラーがある場合やメモリの余裕が2GB未満の場合は、次の段階へ進まないでください。

  2. STEP 2

    プリフィルのチャンクサイズを調整

    1,024 → 2,048 → 4,096の順に増やし、長い入力のTTFTとピークメモリを比べます。

    とき: TTFTが短くならない場合やピークメモリが急増する場合は、直前の値へ戻します。

  3. STEP 3

    KVキャッシュ調整

    コンテキスト長を確保したいときだけ、同じ質問でQ8キャッシュとF16/BF16の基準値を比較します。

    とき: 出力に差が出る場合や、必要なコンテキスト長をすでに確保できている場合は、標準の精度を維持します。

  4. STEP 4

    MTP・投機的デコーディング

    対応モデルだけで有効にし、コードと通常の文章を分けて、採用率と実際のデコードtok/sを測定します。

    とき: 3回の中央値が基準値より良くならなければ、無効に戻します。

  5. STEP 5

    コンテキスト拡張

    実際に必要な長さまで段階的に2倍ずつ伸ばし、入力途中の情報を見つけられるかと、スワップの有無を確認します。

    とき: 情報を探す精度が落ちたり、スワップ・メモリ圧縮が始まったりしたら、一段階短くします。

自分の機器の測定記録を送る

同じ条件で3回以上測定したJSONを読み込んでください。送信ボタンを押すまでは、このブラウザ内でのみ確認します。

受け付けるのは機器・モデル・実行条件と測定値だけです。プロンプト・回答・元のログ・ファイルパスは含めないでください。

記録ファイルがなければ、起動中のローカルサーバーと測定ツールで作成できます。Node.js 20以上が必要です。結果の自動送信は行いません。

内容を確認したユーザーの投稿記録です。このサイトが直接測定した結果とは区別しています。

設定の問題を報告

この設定でどこにつまずいたかを教えてください。報告を読めるのは管理者だけです。

報告する設定 · Studio M4 Max 128GB · Qwen3.8-Flash-Next · バランス

変更履歴

サイトの説明を変更した記録です。インストール済みのエンジンやモデルのバージョンを自動で確認した結果ではありません。

  1. Flash-Nextの記事と実行プロファイルの設定を統一

    本文のプリフィルチャンクを公開スクリプトと同じ2,048に修正し、長いコンテキストのコマンドにもリクエスト上限1件を反映しました。公開測定の言語条件と、余裕を見た開始設定を区別しています。

  2. Spark 1台でのFlash-Nextプリフィル値を訂正

    キャッシュ再利用が混在した1,910 tok/sを、初回入力のプリフィル速度として示していた記述を削除しました。キャッシュを再利用しない条件での再測定が必要な状態に変更しました。

  3. Flash-Next長文脈設定のリクエスト上限を調整

    Spark 1台の262K文脈用コマンドで、実行リクエスト上限を4件から1件に減らしました。古いQSAパッチによる誤った出力を確認する手順も追加しました。

  4. Macのモデル形式と実行設定を訂正

    MacのMLX実行経路をGGUF Q4_K_Mと区別し、エンジン名・モデル形式・コマンドの表記を揃えました。コマンドで指定していないKVキャッシュ精度とプリフィルのバッチ設定は、モデル・ランタイム設定で確認する案内に変更しました。

    コマンドは同じなのにバッチだけが大きくなるように見えていたMLX速度プロファイルも削除しました。

  5. 初回入力とキャッシュ再利用の記録を分離

    検証手順を変更し、初めて読む入力と同じ入力を繰り返した結果を別々に記録するようにしました。キャッシュの効果を初回プリフィル処理量や機器の差に含めません。

  6. 機器・プロファイルの保存と再表示を追加

    実行可能なプロファイルを機器の選択と一緒にこのブラウザに最大5件保存し、ガイド一覧から再び開けるようにしました。保存後に公開設定が変わったりプロファイルの提供が終了したりした場合は、実行前の再確認を案内します。

  7. 実行エンジンの説明へのリンクを追加

    設定に表示されるエンジン名から、該当する実行プログラムの説明へ移動できるようにしました。エンジンを特定できない経路に、推測で別のプログラムをリンクすることはありません。