実行プログラムと拡張機能

BasaltでQwen3.8 Flash-Nextが665 tok/s?導入とGPU要件

BasaltでQwen3.8 Flash-Nextを速く動かすには?

BasaltはLinux x86-64とBlackwell(sm_120)GPU1でQwen3.8-Flash-Nextを実行する推論エンジンです。.basaltモデルパックとプロンプト2を受け取り、OpenAI・Anthropic互換API3からテキスト回答を返します。VRAM4に収まらない専門家重みはシステムRAM5から読み込みます。

Linux PCで用意済みのQwen3.8-Flash-NextモデルパックをBasaltサーバーに接続してプロンプトを送ると、ローカルAPIから回答が返ります。対応条件を確認し、IQ3_XXSモデルをダウンロードしてサーバーをビルドし、最初の応答を受け取るまでを説明します。

Strataから派生し、次のトークンを提案するモデルを調整

BasaltはStrataから派生したエンジンです。IQ3_XXS・IQ3_S・Q2_0パックには、Qwen3.8 Flash-Next自身の出力で追加学習したMTP6ドラフトモデルが入っています。次のトークン7を複数提案し、本モデルが検証するため、採用率が高いほど生成速度を上げられます。

BasaltはStrataから派生したエンジンで、このモデルを実行するサーバーと互換APIを提供します。チャット画面が必要なら、OpenAIまたはAnthropic互換クライアントを接続します。

RAMとVRAMが専門家重みを分けて保持します

Qwen3.8-Flash-Nextはmixture-of-experts(MoE8)モデルです。入力トークンごとに全専門家を計算するのではなく、選ばれた専門家を使います。Basaltは頻繁に使う専門家をGPUメモリー(VRAM)のキャッシュに置き、VRAMに収まらない専門家重みをシステムRAMに常駐させ、必要なときに読み込みます。モデルファイル全体をVRAMに載せずに実行できますが、残りの重みを保持できるRAMが必要です。

IQ3_XXSファイルは74.4 GiBで、専門家重みが40.0 GiBを占めます。IQ3_Sはそれぞれ81.0 GiBと46.8 GiBです。まずファイル全体を保存できるストレージを用意し、実行時にはGPUキャッシュ、RAMに残る専門家重み、OS用メモリーを確保します。

空白のモニターとキーボードがある机に、小型ワークステーションとメモリーモジュール2枚が置かれています。
Basaltはモデル重みの一部をGPUメモリーに、残りをシステムメモリーに置きます。

2枚GPU構成では散文354、構造化出力665 tok/sでした

以下はQwen3.8-Flash-Next GSQ-RCO IQ3_XXSを1件ずつ生成した速度です。RTX 5090 1枚の構成では散文316 tok/s、構造化出力585 tok/sと報告され、専門家用の追加層としてRTX 5060 Tiを加えた構成では、それぞれ354 tok/s、665 tok/sでした。

Basalt開発者が公開したIQ3_XXSの速度
GPU構成散文生成構造化出力
RTX 5090 + RTX 5060 Ti354 tok/s665 tok/s
RTX 5090316 tok/s585 tok/s

2枚GPUの構成はRyzen 9 9950X、RAM 32GB、GPU電力制限400Wで測定されました。モデルカードの別の同時処理結果では、IQ3_Sの散文スループット9を1件で338 tok/s、8件の合計で623 tok/sと報告しています。623 tok/sはリクエストごとの速度ではなく合計処理量で、表のIQ3_XXSとは別の量子化10パックを使っています。どちらも開発者が公開した測定値です。

オープン型ワークステーションのケース内に、グラフィックスカードが上下に2枚搭載されています。
RTX 5090 1枚の結果と、RTX 5090+RTX 5060 Ti構成の結果は分けて読みます。

導入前にLinuxとGPUの条件を確認します

Basaltのビルドとサーバー実行には、Linux x86-64、AVX2 CPU11、compute capability 12.0(sm_120)のNVIDIA Blackwell GPU、CUDA12 13、CMake 3.24以降、C++20コンパイラーが必要です。PythonサーバーにはPython 3.10以降と、リポジトリのrequirements.txtにあるパッケージも必要です。

VRAMに収まらない専門家重みはシステムRAMに置かれます。選択したモデルパックの残りの重みとOSが使う分のRAMがあるか確認してください。

リポジトリーのルートでReleaseビルドとPythonサーバー環境を準備します。ビルド後、実行ファイルbin/basaltが生成されます。

エンジンのビルドとサーバーパッケージの導入
git clone https://github.com/jesdga95/basalt.git
cd basalt
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt

IQ3_XXSパックをリポジトリーにダウンロードします

BasaltはHugging Faceにある完成済みの.basaltファイルを直接読み込めるため、Qwenの重みを自分で変換する必要はありません。ここではIQ3_XXSパックを取得します。ファイルは74.4 GiBなので、ダウンロード前にストレージの空き容量を確保してください。

リポジトリーのルートにmodelsフォルダーを作成し、以下のコマンドを実行します。完了すると同じ名前のファイルがmodels内にできます。

IQ3_XXSモデルのダウンロード
mkdir -p models
curl -fL --output models/Qwen3.8-FN-GSQ-RCO-IQ3_XXS.basalt https://huggingface.co/jesdga/Qwen3.8-Flash-Next-Basalt/resolve/main/Qwen3.8-FN-GSQ-RCO-IQ3_XXS.basalt

まずlocalhostでサーバーを起動します

最初は127.0.0.1だけで待ち受けるようにサーバーを設定します。他のPCから接続する場合は、起動時に--api-keyを指定して認証を有効にしてください。APIキーはコマンドライン専用のオプションで、構成ファイルには保存できません。

モデルとエンジン設定を1つの構成ファイルに記述します

モデルファイルにはエンジン設定が含まれていません。現在のリポジトリーREADMEによると標準値は文脈長134096、fp1614 KVキャッシュ15、投機的デコード16なし、専門家キャッシュなしです。公開設定に近づける場合は明示的に設定してください。モデルパスとサーバーポートはserverに、キャッシュ・prefill17・投機的デコード・文脈長はengineに記述します。

以下のJSONをリポジトリーのルートにbasalt_config.jsonとして保存します。最初はmax-contextを16384、expert-cacheとprefillをautoにします。spec: 7は最大7個のドラフトトークンを提案し、spec-min-p: 0.5はその確率閾値です。応答を確認してから文脈長とキャッシュを調整します。

コンソールの[server] engine:行で適用設定を確認します。専門家重みを常駐させる十分なRAMがある場合だけresident-expertsを追加し、そうでなければ自動キャッシュで起動してください。応答を確認した後、max-contextとキャッシュ設定を一度に1つずつ調整すると影響を追いやすくなります。

初回起動用のbasalt_config.json
{
  "server": {
    "model": "models/Qwen3.8-FN-GSQ-RCO-IQ3_XXS.basalt",
    "alias": "Qwen 3.8 FN",
    "gpu": "0",
    "host": "127.0.0.1",
    "port": 8080
  },
  "engine": {
    "expert-cache": "auto",
    "prefill": "auto",
    "spec": 7,
    "spec-min-p": 0.5,
    "max-context": 16384,
    "kv": "int8",
    "vram-reserve-mib": 700
  }
}
設定ファイルを指定してサーバーを起動
bin/basalt serve --config basalt_config.json
机の上にグラフィックスカード2枚とメモリーモジュール2枚があり、横にノートが置かれています。
まずモデルパックと空きRAMを照らし合わせ、その後GPUキャッシュと文脈設定を調整します。

最初の応答とよくある起動エラーを確認します

別のターミナルから/v1/modelsを開き、モデルIDが表示されることを確認してから簡単なリクエストを送り、応答を確認します。この例のモデルIDはQwen 3.8 FNです。サーバーの応答にはメッセージに対するモデル生成テキストが含まれます。ブラウザーでhttp://127.0.0.1:8080/を開くと、処理速度とリクエストログを含む統計画面が表示されます。

モデル一覧にQwen 3.8 FNが表示され、2つ目のリクエストでchoices[0].message.contentを含むJSONが返れば、最初の呼び出しは成功です。

モデル一覧が空なら、設定内のmodelパスが実際のファイルを指しているか、ダウンロードが完了しているかを先に確認してください。CUDAエラーやGPU未検出のメッセージが出た場合は、ドライバー・CUDA 13・カードのcompute capabilityが要件に合っているか確認します。サーバーは起動してもモデルが読み込まれない場合、コンソール最初の警告からRAM不足、VRAM reserve、KVキャッシュの使用量を確認し、文脈長を短くして再起動してください。

モデル確認と最初のチャットリクエスト
curl http://127.0.0.1:8080/v1/models
curl http://127.0.0.1:8080/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"Qwen 3.8 FN","messages":[{"role":"user","content":"Explain what a mixture-of-experts model is in one sentence."}],"max_tokens":80}'

対応ハードウェアと関連する実行方法

Linux、対応GPU、モデルに必要なRAMを用意できたら、まずIQ3_XXSファイルでlocalhost APIを実行します。リクエストが成功したら、実際の作業に必要なコンテキストとキャッシュが安定して動くか確認し、設定を調整します。

Strata系の別の実行方法やGPU構成を比較したり、RTX 5090で使えるモデルを探したり、複数エンジンの公開速度を確認したりするには、以下の関連ガイドを続けて読んでください。

用語の注釈

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

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

    本文に戻る
  3. API — 別のコードからプログラムの機能を呼び出すための決められたインターフェースです。

    本文に戻る
  4. VRAM — グラフィックカードのGPUが使うメモリです。モデルの重みや計算途中の値を保存します。

    本文に戻る
  5. システムRAM — プログラムの実行中にデータを一時保存するシステムメモリです。

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

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

    本文に戻る
  8. MoE — 複数の専門家サブネットワークから入力に応じて一部を選ぶモデル構造です。総パラメータ数と1トークン処理時に有効な数は異なることがあります。

    本文に戻る
  9. スループット — 一定時間に処理・生成した作業量です。トークン/秒やリクエスト/秒など、単位を合わせて比較します。

    本文に戻る
  10. 量子化 — モデルの重みや計算値を少ないビット数で表し、保存容量やメモリ使用量を減らす方法です。表現が粗くなるため、精度にも影響することがあります。

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

    本文に戻る
  12. CUDA — NVIDIA GPUで汎用計算を行うソフトウェア基盤です。

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

    本文に戻る
  14. FP16 — 16ビット浮動小数点形式です。BF16とビット幅は同じですが、指数部と仮数部の配分が異なります。

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

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

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

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
BasaltはLinux x86-64とBlackwell(sm_120)GPUでQwen3.8-Flash-Nextを実行する推論エンジンです。.basaltモデルパックとプロンプトを受け取り、OpenAI・Anthropic互換APIからテキスト回答を返します。VRAMに収まらない専門家重みはシステムRAMから読み込みます。
必要なメモリはどのくらいですか?
Qwen3.8-Flash-Nextはmixture-of-experts(MoE)モデルです。入力トークンごとに全専門家を計算するのではなく、選ばれた専門家を使います。Basaltは頻繁に使う専門家をGPUメモリー(VRAM)のキャッシュに置き、VRAMに収まらない専門家重みをシステムRAMに常駐させ、必要なときに読み込みます。モデルファイル全体をVRAMに載せずに実行できますが、残りの重みを保持できるRAMが必要です。
選ばないほうがよいのはどのような場合ですか?
BasaltはHugging Faceにある完成済みの.basaltファイルを直接読み込めるため、Qwenの重みを自分で変換する必要はありません。ここではIQ3_XXSパックを取得します。ファイルは74.4 GiBなので、ダウンロード前にストレージの空き容量を確保してください。