実行プログラムと拡張機能
最終更新
NInferでQwen3.8をローカル実行:RTX 5090とMTP・DFlash2
11.18GBのNInfer専用モデルファイルを取得し、RTX 5090サーバーで質問に回答させます。
NInferは.ninferモデルファイルをNVIDIA GPU1で実行し、OpenAI互換API2で回答を返すCUDA3推論エンジンです。Underdog SalukiをDockerサーバーで起動して短い質問を送り、同じリクエストでMTP4とDFlash2のドラフト生成を比較できます。
NInferはモデルファイルからAPIで回答します
NInferはNInfer形式のモデルファイルをNVIDIA GPUで計算し、サーバーに送られたチャットリクエストへ回答する推論エンジンです。入力はモデルアーティファクトとテキストリクエスト、出力はOpenAI互換APIの回答です。ここでは低ビットQwen3.8-27B派生モデルのUnderdog Salukiを1枚のRTX GPUで動かし、短い質問を送ります。
変換ファイルは元のGGUF5テンソルブロックを保持し、MTPヘッドとDFlash2アダプターも含みます。重みあたり約2ビットの混合精度構成で、サイズは11,180,119,296バイト(10.41GiB)です。標準のNInferビルドは内部のgguf_*形式を扱えないため、統合リポジトリのビルドが必要です。
MTP(Multi-Token Prediction)は別の次トークン6ヘッドが複数候補を提案し、メインモデルが検証します。DFlash2は別のドラフトアダプターが候補を提案し、メインモデルが確認します。提案が受理されると1回の検証で多くのトークンを出せますが、速度差は入力、ドラフト数、GPUによって変わります。

Dockerでモデルを取得してサーバーを起動
LinuxでDocker、NVIDIAドライバー580以降、NVIDIA Container Toolkitを用意します。ここで使うDockerイメージはCUDA 13系です。Toolkitの公式サンプルワークロードでコンテナからGPUが見えることを確認し、Hugging Face CLI7のhfコマンドを用意してください。11.18GBのモデルとサーバーイメージの保存領域、モデルとKVキャッシュ8を載せるGPUメモリを確保します。
ダウンロードコマンドは11.18GBの.ninferファイルをmodelsフォルダーに保存します。hf downloadが見つからない場合はHugging Face HubパッケージのCLIをインストールして再実行してください。
サーバーは127.0.0.1:8080だけでリクエストを受け付けます。文脈長965,536トークン、MTPドラフト3個で起動します。現在のmodelsフォルダーをコンテナ内の/modelsにマウントします。
mkdir -p models
hf download satoshifukimoto/Underdog-Saluki-27B-1.0-IQ2-mix-NInfer-v3 Underdog-Saluki-27B-1.0-IQ2-mix-ninfer-v3.ninfer --local-dir modelsdocker run --rm --gpus all -p 127.0.0.1:8080:8080 --ulimit memlock=-1 \
-v "$PWD/models:/models" -v ninfer-cache:/cache \
ghcr.io/iamwavecut/ninfer-all serve /models/Underdog-Saluki-27B-1.0-IQ2-mix-ninfer-v3.ninfer \
--model-id underdog-saluki --max-context 65536 --kv-capacity 65536 --kv-dtype rk8v4 \
--gdn-state-fp16 --spec mtp --draft-tokens 3 --lm-head-draft --vision
最初の質問を送り、応答を確認
サーバーのターミナルを動かしたまま、別のターミナルを開きます。モデル一覧にunderdog-salukiが表示されれば準備完了です。次のリクエストはOpenAI互換チャットエンドポイントへ短い英語の質問を送り、出力上限を128トークンにします。
正常な応答ではchoices[0].message.contentに回答が入ります。connection refusedはサーバー起動前またはポート未割り当てが主な原因です。モデルIDのエラーはリクエストのmodelとサーバーの--model-idが一致しない場合に起こります。
curl -sS http://127.0.0.1:8080/v1/models
curl -sS http://127.0.0.1:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"underdog-saluki","messages":[{"role":"user","content":"Explain why a local model server uses a context window in two sentences."}],"max_tokens":128}'MTPとDFlash2はドラフト候補の作り方が異なります
最初のリクエストが成功したら、同じモデルと質問でドラフト方式を比較できます。MTPはモデル内の次トークンヘッドを使い、DFlash2は同じアーティファクト内の別アダプターを使います。設定を1つずつ変え、--spec mtp --draft-tokens 3 --lm-head-draftを--spec dflash2 --draft-tokens 5に置き換えてサーバーを再起動します。
ドラフト数を増やすと1回の検証でより多くのトークンを提案できますが、受理されない候補にも計算を使うことがあります。短いチャットではDFlash2の5個が向く場合があり、MTPは通常3〜5個で良好ですが、SalukiのMTP受理率はリクエストにより30〜100%と報告されています。文章、コード、言語で結果が変わるため、最速の1回ではなく同じ質問を複数回送った分布を比べてください。
生成速度を比べるときは質問と回答の長さを揃えます。同じサーバーを再起動し、同じ質問を複数回送り、出力トークン数と経過時間を記録してキャッシュやGPU温度の変化を区別してください。通常生成に戻すには--spec、--draft-tokens、--lm-head-draftを外して再起動します。

RTX 5090コミュニティ測定結果
表ではSalukiのdecode10・prefill11速度とメモリ・読み込み時間を分けて示します。
| 処理項目 | コミュニティ測定値 |
|---|---|
| 512出力トークン・MTPドラフト3個 | 223 tok/s |
| 512出力トークン・DFlash2ドラフト5個 | 209 tok/s |
| 約9.7K入力トークンのprefill | 3,955 tok/s |
| 65K KV・MTPドラフト3個の待機時メモリ | 約14.3 GB |
| モデル読み込み | 20.2秒 |
2026年10月9日のコミュニティ単一実行:Windows RTX 5090(sm_120aビルド)、rk8v4 KV、thinking off。decodeは512トークン出力、prefillは約9.7K入力、待機時メモリは65K KV・MTP-3の条件です。Underdog Salukiモデルカード
最初のエラーでは形式とGPU接続を確認
unsupported modelやブロック形式エラーが出たら、NInfer-allのエンジンを使っているか確認してください。このIQ2-mixアーティファクトはNInfer-all専用のgguf_*ブロックを使うため、標準NInferビルドでは開けません。コンテナからGPUを使えるかはNVIDIA Container Toolkit公式サンプルワークロードで確認し、ファイルパスと.ninfer拡張子も確認します。
no CUDA deviceやGPUアーキテクチャエラーでは、コンテナランタイム12またはビルド対象を確認します。対応対象の86、89、120aはそれぞれGPUアーキテクチャです。このガイドのWindows RTX 5090結果はsm_120aビルドで得られたため、5090で再現するにはこのアーキテクチャが必要です。WindowsネイティブビルドにはCUDA 13、CMake、Visual Studio C++ツール、vcpkg依存関係が必要で、リポジトリの最新手順に従います。
メモリ不足で読み込みや長いリクエストが止まる場合は、文脈上限を65,536未満にするか、--kv-capacityを下げてKVキャッシュ領域を減らします。GPUメモリが足りない状態で長さを増やすと、モデルが解放されたりサーバーが失敗したりします。ターミナルでCtrl+Cを押すとコンテナが停止します。モデルファイルは残るので、設定を直して再起動できます。
既存APIサーバーと並行して短く試す
現在のモデルサーバーは維持し、NInferをローカルアドレス127.0.0.1:8080で試します。モデル一覧と短い回答を確認してから、実際に使う韓国語の質問、コード、長文の順に試し、回答内容とメモリ使用量を記録してください。速度とともに、作業の正答率やツール呼び出し13も比較できます。
NInferアーティファクトと通常のGGUFでは実行形式が異なります。別のチェックポイント14を変換する場合は、NInfer-allのモデル別レシピとMTP・DFlash2・Vision構成要素への対応を確認してください。準備済みSalukiファイルは上記コマンドで実行できます。
速い設定を選んだら、よく使う質問を揃えて回答内容も比べましょう。要約で抜けた内容、コードの実行結果、ツールへの引数を記録すると、次のモデル更新でも同じ作業で確認しやすくなります。
別の推論エンジンも比べたい場合は、以下のllama.cppガイドを参考にしてください。Salukiガイドでは通常のGGUFの導入と量子化15ファイルの選び方を説明しています。
用語の注釈
GPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。
本文に戻るAPI — 別のコードからプログラムの機能を呼び出すための決められたインターフェースです。
本文に戻るCUDA — NVIDIA GPUで汎用計算を行うソフトウェア基盤です。
本文に戻るMTP — 複数の将来トークンを一度に予測する学習目標、またはそれを行うモデル構成です。投機的デコーディングでは、その予測を候補トークンとして提案できます。
本文に戻るGGUF — モデル情報を格納するファイル形式で、llama.cpp系のツールで広く使われます。
本文に戻るトークン — モデルが入力や出力を分けて処理する単位です。
本文に戻るCLI — Command-Line Interfaceの略です。ターミナルにコマンドを入力してプログラムを操作する方式です。
本文に戻るKVキャッシュ — 過去トークンのAttention用キー・バリューを保存し、後続トークン生成で再利用するメモリです。容量はコンテキスト長やバッチサイズで変わります。
本文に戻るコンテキスト長 — 1回のリクエストでモデルが扱える入力と生成内容のトークン範囲です。上限や実際のメモリ使用量はモデルと実行設定によります。
本文に戻るトークンのデコード — 入力とそれまでの回答をもとに、次の出力トークンを順に生成する段階です。
本文に戻るプリフィル — LLMが入力プロンプトを読み、各トークンの内部表現を計算する段階です。プロンプトが長いほど処理するトークンが増えます。
本文に戻るランタイム — プログラムの実行時に必要な機能を提供するソフトウェア環境です。ローカルAIではモデル実行エンジンを指すこともあります。
本文に戻るツール呼び出し — ファイル読み取り、検索、コマンド実行などの外部機能を、名前と引数でモデルが要求する形式です。実行の有無はエージェントランタイムと権限設定が決めます。
本文に戻るチェックポイント — 学習済みモデルの重みなどを保存したファイルです。同じモデル系列でも、版や用途によって異なるチェックポイントを使うことがあります。
本文に戻る量子化 — モデルの重みや計算値を少ないビット数で表し、保存容量やメモリ使用量を減らす方法です。表現が粗くなるため、精度にも影響することがあります。
本文に戻る
よくある質問
- この記事で最初に確認すべきことは何ですか?
- NInferは`.ninfer`モデルファイルをNVIDIA GPUで実行し、OpenAI互換APIで回答を返すCUDA推論エンジンです。Underdog SalukiをDockerサーバーで起動して短い質問を送り、同じリクエストでMTPとDFlash2のドラフト生成を比較できます。
- 必要なメモリはどのくらいですか?
- 現在のモデルサーバーは維持し、NInferをローカルアドレス`127.0.0.1:8080`で試します。モデル一覧と短い回答を確認してから、実際に使う韓国語の質問、コード、長文の順に試し、回答内容とメモリ使用量を記録してください。速度とともに、作業の正答率やツール呼び出しも比較できます。
