なぜFreeTokenを試したのか
手元のマシンは RTX 5060 Ti 16GB + DDR4 32GB。Local AI 環境として Ollama を使い、HermesAgent を動かしているのですが、30B クラス以上のモデルになると VRAM 不足・コンテキスト不足でまともに動作しませんでした。
- 30B超のモデルは 16GB VRAM に収まらず、CPUオフロードで極端に遅くなる
- コンテキストを伸ばすとさらに VRAM を食い、HermesAgent の長いプロンプトが
prompt is too longで弾かれる
こうなると選択肢は「GPUを買い替える」か「モデルを小さくして妥協する」の二択になりがちですが、もう一つの方向性として見つけたのが FreeToken でした。GPU・CPU・システムRAMをひとまとめのリソースプールとして扱い、VRAMに収まらない MoE (Mixture-of-Experts) モデルの一部をRAM側に置きながら推論する、というアプローチのエンジンです。
FreeTokenとは何か
FreeToken は、UC Berkeley / UT Austin 系のチームが公開した エッジ向けMoE推論エンジンです。
ポイントを整理すると:
- MoEモデルは推論時に一部の「Expert」しか使わない特性があり、FreeTokenはこのExpertをGPU側にキャッシュしつつ、必要なものだけをCPU/RAM側と協調して実行する
- 8GB VRAMのノートPCで35Bモデル、32GB VRAMのゲーミングデスクトップで284Bモデル、といったスケールでの動作が謳われている
- Windows/Linux向けにワンクリックのデスクトップアプリが配布されているほか、CLI (
uv pip install "freetoken[accel]") でも導入できる - OpenAI互換・Anthropic互換のAPIをローカルに立てられるため、既存のツールをそのまま向けられる
なお、公開されたばかり(記事執筆時点で公開から1週間程度)のベータ版であり、GitHub Issue には Windows版のインストール失敗や、GTX 10/20シリーズなど旧世代GPU未対応といった報告も上がっています。また一部のベンチマーク主張(他エンジンとの速度比較)について、比較の分母が揃っていないという指摘も出ているため、公称の倍率はそのまま鵜呑みにせず「参考値」として見るのがよさそうです。
⚠️ 公式サイトについての注意
ダウンロード先を検索すると freetoken.ai という紛らわしいドメインがヒットしますが、これは本記事で扱うMoE推論エンジンとは無関係の別サービス(アプリ開発者向けのオンデバイス+クラウドAI SDK)です。同様に SourceForge 上の「FreeToken」も別物です。
今回扱うエンジンの公式配布元は https://www.flashml.ai/ ですので、ダウンロードの際はドメインを必ず確認してください。
インストール手順(Windows / デスクトップアプリ版)
0. ダウンロード
- 公式:
https://www.flashml.ai/の Download から Windows版を取得 - ファイル名は
FreeToken-Desktop-Setup-v0.2.0-beta.14.exe(バージョンは今後変わる可能性あり)
1. Windows11の仮想メモリ変更
デフォルト設定のままだと、35Bクラスのモデルを動かした際にRAMが溢れて落ちることがありました。
Win11のデフォルトでは、以下の手順で開く仮想メモリ設定の「すべてのドライブのページングファイルのサイズを自動的に管理する」にチェックが入っており、C:ドライブに4〜6GB程度しかページングファイルが確保されません。この状態で FreeToken を使うと System RAM 27.8 / 31.8GB のようにRAMがほぼ埋まってエラーになりました。
仮想メモリ設定画面までの手順
-
設定 > システム > バージョン情報を開く - 「関連リンク」欄の「システムの詳細設定」をクリック(システムのプロパティが開きます)
- 「詳細設定」タブ → 「パフォーマンス」欄の「設定」をクリック
- 開いた「パフォーマンスオプション」で再度「詳細設定」タブ → 「仮想メモリ」欄の「変更」をクリック
対処として:
- 自動管理のチェックを外す
- 一番速いNVMe SSD(できればC:)を選択
- カスタムサイズを指定
- 初期サイズ:
32768MB - 最大サイズ:
65536MB
- 初期サイズ:
- 設定 → OK → PC再起動
※ RAMを32GB追加して64GBにした場合でも、初期16384 / 最大32768程度の仮想メモリは残しておくと安心です。
2. インストールと基本設定
- exeを右クリック →「管理者として実行」
- 左メニューの
ModelsからQwen3.6-35B-A3B NVFP4 ctx 262,144をDownload -
Settingsタブでポートを確認- Daemon:
127.0.0.1:1900(制御用) - API:
127.0.0.1:1919(OpenAI互換)
- Daemon:
3. 接続情報
HermesAgent や OpenWebUI などの外部ツールから接続する際の情報:
-
Base URL:
http://127.0.0.1:1919/v1 -
API Key: 認証チェックが無く、
freetokenやsk-no-keyなど何を入れても通ります -
Model名:
Modelsタブに表示されているIDをそのままコピペ(例:Qwen3.6-35B-A3B-NVFP4)
疎通確認は以下で行えます。
curl.exe -H "Authorization: Bearer freetoken" http://127.0.0.1:1919/v1/models
4. Consoleから起動する
Console タブで以下の手順を踏みます。
-
Qwen3.6-35B-A3B NVFP4を選択 -
Cache configでAgentプリセットをクリック →KV maxed (~50K) - MoE 2 layers - for agent long-contextという設定になり、それまで出ていたprompt is too long: 46918 > 8203のようなエラーが解消 - 右下の
Applyをクリック - 中央の
Startボタンを押す
ここが最初のハマりどころでした。 FreeTokenは
Startを押すまで API (:1919) がLISTEN状態になりません。daemon :1900はあくまで制御用の別プロセスで、OpenAI互換APIはモデルを起動して初めて立ち上がります。「設定は済んでいるはずなのにcurlが繋がらない」という場合は、大抵このStart押し忘れが原因でした。
ステータスが Running - just now になれば起動完了です。VRAM不足のエラーが出た場合は MoE expert cache の値(例: 4981 → 3000)を下げて再度Applyします。
画面右上に表示される Saved $0.31 のような数値は課金額ではなく、「同じ処理をクラウドAPIで行った場合にかかる想定コストをローカルで浮かせた」という試算表示です。実際の請求とは無関係なので、初見だと少し驚きますが気にしなくて大丈夫です。
HermesAgent側の設定 (config.yaml)
FreeTokenを起動したら、HermesAgent(~/.hermes/config.yaml)側にカスタムプロバイダとして追加します。
providers:
freetoken:
name: freetoken
base_url: http://127.0.0.1:1919/v1
discover_models: false
key_env: HERMES_CUSTOM_FREETOKEN_API_KEY # FreeTokenは認証不要なので中身は空でも可
models:
Qwen3.6-35B-A3B-NVFP4:
context_length: 32768
model:
provider: freetoken
default: Qwen3.6-35B-A3B-NVFP4
context_length: 32768
compression:
threshold: 0.5
注意点は3つ:
-
discover_models: falseにしないと、FreeToken側がcontext_lengthを正しく返さず、HermesAgentが「128Kまで使える」と誤認識してしまいます -
context_lengthの値は、FreeToken Consoleで設定したKVサイズと揃えておくこと -
key_envはproviders.<名前>の下に書くのが公式ドキュメント上の位置で、トップレベルのmodel:ブロックには置きません(認証不要なローカルサーバーなので省略しても動きます)
設定変更後は、HermesAgentを再起動し、新規セッションから使い始めてください。
なお、ここでの「HermesAgent」は NousResearch の hermes-agent を指しています。カスタムプロバイダの詳細仕様は公式の Providers ドキュメント にまとまっているので、細かいオプションを追加したい場合はそちらも参照してください。
使ってみた感想
これまで Ollama でHermesAgentを動かしていたときは、メモリ不足でエージェントの動作そのものが止まってしまい、正直なところ「実用にならないツール」という印象でした。FreeToken に切り替えてからは、同じ30Bクラスのモデルでもメモリ切れを起こさずに動作し続けるようになり、ようやく実務で使えるレベルになったという感触があります。
現状はRAM 32GBのままなんとか回している状態なので、今後は64GBへの増設も視野に入れています。RAMを増やせばFreeTokenのオフロード先にも余裕ができるので、もう一段階大きいモデルを試せるようになるはずです。このあたりは増設後に改めて記事化したいと思います。
まとめ
VRAM 16GB + RAM 32GBという環境でも、FreeTokenのRAMオフロードによって30Bクラスのモデルを HermesAgent 上で実用的に動かせるようになりました。特に効いたのは以下の3点です。
- 仮想メモリを事前に広げておくこと(RAM溢れ対策)
- Cache configの
AgentプリセットでKVサイズを長文脈向けに調整すること -
discover_models: falseでHermesAgent側のcontext_length誤認識を防ぐこと
まだ公開から日が浅いプロジェクトなので、Windows環境でのインストール不具合報告や、旧世代GPUの非対応など粗さも残っています。ベンチマークの数値も公式発表をそのまま鵜呑みにせず、自分の環境で計測し直すのがおすすめです。とはいえ「VRAMが足りないから諦める」という選択肢を減らしてくれるツールとして、しばらく追いかけてみる価値はありそうです。
参考
- FreeToken (GitHub): https://github.com/FlashML-org/FreeToken
- FreeToken 公式サイト: https://www.flashml.ai/
- HermesAgent (GitHub): https://github.com/NousResearch/hermes-agent
- HermesAgent Providers ドキュメント: https://hermes-agent.nousresearch.com/docs/integrations/providers