QUICK SAVE
- FreeTokenはVRAMだけでなく、CPU・ホストRAM・PCIeをまとめて使うMoE推論エンジン
- RTX 5090と128GB RAMでも、モデル全体の重みと空きRAM次第では動かせない
- 今回の第一候補はQwen3.6-35B-A3B NVFP4。速度評価はまだ実施していない
RTX 5090があれば、大きなローカルLLMもだいたい動く。そんな気持ちでFreeTokenの論文を読み始めました。
論文には、RTX 5090を積んだゲーミングPCで284BのMoEモデルを対話的に動かしたとあります。VRAMは32GBです。数字だけを見ると、手元のPCでもDeepSeek-V4-Flashあたりまで狙えそうに思えます。
ところが、PCの構成を一つずつ確認すると、同じGPUでも話はまるで違いました。今回のPCはメインメモリが128GBしかなく、しかも32GBを4枚挿しているためDDR5-3600で動いています。FreeTokenでは、このRAM容量と帯域が脇役ではありません。
先に結論を書くと、このPCでFreeTokenを試すことはできそうです。ただし、第一候補は35BクラスのQwen。論文と同じRTX 5090でも、DeepSeek-V4-FlashはRAM不足で現実的ではありません。
なお、この記事を書いている時点ではFreeTokenのインストールもモデルの実行もまだ行っていません。ここで扱うのは、公式資料と実機構成を照らし合わせた導入前の判断です。速度については、これから測ります。
FreeTokenは「余ったVRAMへ載せる」だけの仕組みではない
FreeTokenは、FlashML-orgが2026年8月に公開したMoEモデル向けのローカル推論エンジンです。執筆時点の最新リリースはv0.1.2。一般的なLLMアプリのように、モデル全体をVRAMへ収めることを前提にしていません。
MoEには多数の「Expert」がありますが、1トークンの処理で使われるのは、そのうちの一部です。計算する部分だけならGPUへ載せられても、全Expertの重みをどこかに置いておく必要は残ります。
FreeTokenは、全ExpertをホストRAMに置き、よく使われるExpertをVRAMへキャッシュします。VRAMにないExpertが必要になったときは、PCIe経由でGPUへ送るか、重みがあるRAM側でCPUに計算させます。どちらへ回すかは固定せず、そのPCで測ったPCIe帯域とCPU側メモリ帯域をもとに分けます。
つまり、FreeTokenが見ているのはGPUだけではありません。
- GPUと空きVRAM
- ホストRAMの容量と帯域
- CPU側の処理速度
- CPUとGPUをつなぐPCIe
- モデルを読むストレージ
PC全体を一つの推論環境として使うのが、FreeTokenの面白いところです。同時に、「RTX 5090搭載」という一行だけでは性能が分からなくなる理由でもあります。
長いプロンプトとエージェント処理も意識している
FreeTokenの工夫は、ExpertをRAMへ逃がすことだけではありません。
長いプロンプトを最初に処理するPrefillでは、GPUが現在のレイヤーを計算している間に、次のレイヤーのExpertをPCIeで読み込みます。転送が終わるまでGPUを待たせず、計算とデータ移動を重ねる仕組みです。
さらに、ツール呼び出しや思考ブロック、会話ターンの境界に中間状態を残します。コーディングエージェントが古いツール出力を削ったり、会話履歴を書き換えたりしても、再利用できる地点から処理を再開するためです。
論文では、Qwen3.6-35B-A3BをRTX 5090上で77〜83 tok/s、DeepSeek-V4-Flashを22〜25 tok/sで生成したと報告しています。最悪条件のTime to First Tokenも44秒未満だったとしています。
ただし、これは開発チームによる評価です。公開から日が浅く、手元のPCで同じ数字が出る保証はありません。特に今回のPCは、論文のRTX 5090環境とCPUやRAM構成が異なります。
今回使うPCは、要件を満たしている
検証に使うPCの構成は次のとおりです。
| 項目 | 構成 |
|---|---|
| CPU | AMD Ryzen 7 9800X3D(8コア16スレッド) |
| GPU | NVIDIA GeForce RTX 5090 |
| VRAM | 32GB |
| GPU接続 | PCIe 5.0 x16 |
| メインメモリ | 128GB、Crucial 32GB×4枚 |
| メモリ動作速度 | DDR5-3600 |
| マザーボード | MSI PRO B650-S |
| SSD | Solidigm 2TB、Windows側空き約504GB |
| 実行環境 | WSL2 / Ubuntu 22.04 |
| WSLメモリ上限 | 96GB、スワップ16GB |
| GPUドライバー | 610.88 |
| CUDA | 13.0、nvcc利用可能 |
| Python | 3.10.12 |
公式のインストール要件は、x86_64 Linux、NVIDIA RTX 30シリーズ以降、r580以上のドライバー、CUDA 13、Python 3.10以上です。WSL2上の環境は、この条件を満たしています。
SSDの空きも約504GBあるので、候補モデルを一つずつ試す容量はあります。環境だけを見ると、導入を始めてよい状態です。
128GBあっても、空きRAMは96GB
ここで最初の勘違いがありました。物理メモリが128GBあっても、FreeTokenから128GBすべてを使えるわけではありません。
今回のWSL2には96GBの上限を設定しています。その中でUbuntu自体も動きますし、モデル以外のメモリも必要です。Windows側でブラウザやDocker、別のLLMを動かしていれば、余裕はさらに減ります。
128GBという容量自体も、いまは気軽に増設できる価格ではありません。購入を検討している場合は、別記事のDDR5 128GBの価格推移も参考にしてください。
DeepSeek-V4-Flashは、Expert重みだけで約140GBをホストRAMへ置く構成です。論文のRTX 5090デスクトップは192GBのRAMを搭載していました。こちらは物理128GB、WSL上限96GBなので、同じGPUでも重みを保持できません。
SSDやスワップへ逃がせば、読み込みだけは進む可能性があります。しかし、140GB規模の重みをスワップしながら対話速度を期待するのは無理があります。「起動した」と「使える速さで動いた」は分けて考えたいところです。
4枚挿しのDDR5-3600が、もう一つの気になる点
取り付けているメモリはDDR5-5600対応品です。それでも現在の動作速度は3600 MT/s。故障や偽物ではなく、32GBを4枚挿しているため、安定性を優先した速度が選ばれています。
AM5では、2枚構成より4枚構成の方がCPU内のメモリコントローラーへかかる負担が大きくなります。このPCでは4スロットすべてが埋まっており、容量を増やす場合も追加ではなく全交換です。
理論上のデュアルチャネル帯域を比べると、DDR5-3600は約57.6GB/s、DDR5-5600は約89.6GB/sです。実効帯域はこれより低くなりますが、差は小さくありません。
普段のゲームやWeb閲覧なら、ここまでRAM帯域を気にしないこともあります。FreeTokenは、VRAMにないExpertの重みをRAMから繰り返し読むため、この差が生成速度へ出やすいはずです。
とはいえ、BIOSで無理に5600 MT/sへ上げるつもりはありません。起動しても、長時間の推論でだけメモリエラーが出る設定ではベンチマークにならないからです。まず3600 MT/sの安定設定で帯域を測り、速度変更は別条件として試します。
最初に選ぶのはQwen3.6-35B-A3B NVFP4
公式の対応モデル一覧とメモリ条件を照らし合わせ、最初に試すモデルを次のように絞りました。
| モデル | 今回の位置づけ | 理由 |
|---|---|---|
openai/gpt-oss-20b |
動作確認用 | 小さく、APIやCUDAカーネルの確認をしやすい |
nvidia/Qwen3.6-35B-A3B-NVFP4 |
第一候補 | 32GB VRAMと128GB RAMで扱いやすく、日本語・コーディング用途を試せる |
Qwen/Qwen3.6-35B-A3B BF16 |
論文追試用 | 論文の中心モデルだが、約70GBの空きRAMが必要 |
openai/gpt-oss-120b |
追加検証 | 96GBのWSL枠で動く可能性はあるが、実測が必要 |
DeepSeek-V4-Flash-0731 |
今回は見送り | Expert重み約140GBを保持できない |
GLM-5.2-NVFP4 |
対象外 | 753Bクラスで、今回のRAM容量から大きく外れる |
本命はQwen3.6-35B-A3BのNVFP4版です。総パラメータ35B、1トークンあたりのアクティブパラメータは3BのMoEモデルで、FreeTokenの既知動作モデルに含まれています。
量子化によって必要メモリを抑えられ、モデル全体がVRAMへ完全に収まらないため、FreeTokenのExpertキャッシュとCPU・GPU協調実行も確認できます。日本語、コード生成、ツール呼び出しまで試すなら、最初の一台にはちょうどよさそうです。
導入はWindowsアプリではなく、WSL2のCLIから始める
FreeTokenにはWindows用デスクトップアプリもありますが、今回はWSL2へCLI版を入れる予定です。すでにCUDA 13とPython環境があり、仮想環境へ隔離できるためです。
もう一つ理由があります。Windows版インストーラーがWindows Securityで Trojan:Win32/Wacatac.C!ml と検出されたという未解決のIssue #94が報告されています。誤検知なのか、本当に問題があるのかは、このIssueだけでは判断できません。
少なくとも、Defenderを無効化して押し通す理由はありません。今回はLinux CLIを選びます。
公式手順の基本形は次のとおりです。
uv venv
source .venv/bin/activate
uv pip install "freetoken[accel]"
CUDAカーネルは初回利用時にJITコンパイルされます。インストールが終わっただけで準備完了とは考えず、軽いモデルでカーネル生成とAPI応答まで確認します。
「動いた」で終わらせないために測るもの
最初に実行する予定なのが、帯域校正コマンドです。
ft bench bw
FreeTokenのhybridバックエンドは、この測定結果を使い、VRAMにないExpertをPCIeでGPUへ送るか、CPU側で処理するかを分けます。スペック表から速さを予想するだけでなく、3600 MT/sで動いているRAMの実効値をここで確かめます。
その後、gpt-oss-20bでサーバーとOpenAI互換APIを確認し、Qwen NVFP4へ進みます。記録するのは生成速度だけではありません。
- モデル読み込み時間と初回JIT時間
- 起動前後のRAM、VRAM、スワップ使用量
- Time to First TokenとPrefill速度
- 平均・最低のDecode速度
- 長い日本語、コード生成、ツール呼び出しの品質
- OOM、クラッシュ、タイムアウトの有無
比較をするなら、モデル、量子化形式、プロンプト、コンテキスト長、生成トークン数を揃えます。NVFP4のFreeTokenと別形式のOllamaを並べて、エンジンだけの速度差として見せることはしません。
RTX 5090の次に確認するもの
FreeTokenの論文を読んだとき、最初に目へ入ったのは「RTX 5090で284B」という結果でした。PCを調べたあとでは、その後ろにある192GB RAMとPCIe 5.0、CPU側帯域の方が気になります。
ローカルLLMの上限は、VRAM容量だけでは決まりません。特にMoEモデルでは、使わないExpertも含めた全体の重みをどこに置くか、その重みを毎秒どれだけ動かせるかが効いてきます。
今回のPCなら、FreeTokenを試す入口には立てています。ただ、DeepSeek級を狙うにはRAMが足りず、Qwenでも4枚挿しDDR5-3600の帯域がどこまで影響するかは未確認です。
次は実際にWSL2へ導入し、ft bench bwとQwen NVFP4の結果を測ります。そこで初めて、「このPCで動く」ではなく「このPCで使える」と言えるかを判断します。