実行プログラムと拡張機能
最終更新
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から派生し、次のトークンを提案するモデルを調整
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枚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でした。
| GPU構成 | 散文生成 | 構造化出力 |
|---|---|---|
| RTX 5090 + RTX 5060 Ti | 354 tok/s | 665 tok/s |
| RTX 5090 | 316 tok/s | 585 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パックを使っています。どちらも開発者が公開した測定値です。

導入前に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.txtIQ3_XXSパックをリポジトリーにダウンロードします
BasaltはHugging Faceにある完成済みの.basaltファイルを直接読み込めるため、Qwenの重みを自分で変換する必要はありません。ここではIQ3_XXSパックを取得します。ファイルは74.4 GiBなので、ダウンロード前にストレージの空き容量を確保してください。
リポジトリーのルートにmodelsフォルダーを作成し、以下のコマンドを実行します。完了すると同じ名前のファイルがmodels内にできます。
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つずつ調整すると影響を追いやすくなります。
{
"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
最初の応答とよくある起動エラーを確認します
別のターミナルから/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で使えるモデルを探したり、複数エンジンの公開速度を確認したりするには、以下の関連ガイドを続けて読んでください。
用語の注釈
GPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。
本文に戻るプロンプト — モデルに送る入力文です。生成モデルでは作りたい結果を説明する文になり、出力の構成や内容を大きく左右します。
本文に戻るAPI — 別のコードからプログラムの機能を呼び出すための決められたインターフェースです。
本文に戻るVRAM — グラフィックカードのGPUが使うメモリです。モデルの重みや計算途中の値を保存します。
本文に戻るシステムRAM — プログラムの実行中にデータを一時保存するシステムメモリです。
本文に戻るMTP — 複数の将来トークンを一度に予測する学習目標、またはそれを行うモデル構成です。投機的デコーディングでは、その予測を候補トークンとして提案できます。
本文に戻るトークン — モデルが入力や出力を分けて処理する単位です。
本文に戻るMoE — 複数の専門家サブネットワークから入力に応じて一部を選ぶモデル構造です。総パラメータ数と1トークン処理時に有効な数は異なることがあります。
本文に戻るスループット — 一定時間に処理・生成した作業量です。トークン/秒やリクエスト/秒など、単位を合わせて比較します。
本文に戻る量子化 — モデルの重みや計算値を少ないビット数で表し、保存容量やメモリ使用量を減らす方法です。表現が粗くなるため、精度にも影響することがあります。
本文に戻るCPU — OSや一般的なプログラム命令を実行する中央処理装置です。AIでは前処理やデータ転送などの汎用処理も担います。
本文に戻るCUDA — NVIDIA GPUで汎用計算を行うソフトウェア基盤です。
本文に戻るコンテキスト長 — 1回のリクエストでモデルが扱える入力と生成内容のトークン範囲です。上限や実際のメモリ使用量はモデルと実行設定によります。
本文に戻るFP16 — 16ビット浮動小数点形式です。BF16とビット幅は同じですが、指数部と仮数部の配分が異なります。
本文に戻るKVキャッシュ — 過去トークンのAttention用キー・バリューを保存し、後続トークン生成で再利用するメモリです。容量はコンテキスト長やバッチサイズで変わります。
本文に戻るトークンのデコード — 入力とそれまでの回答をもとに、次の出力トークンを順に生成する段階です。
本文に戻るプリフィル — 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なので、ダウンロード前にストレージの空き容量を確保してください。
