2026-08-25 機械学習勉強会
今週のTOPIC[paper] ACES: Evaluating Skills, Not Just Agents — Agentic Continuous Evaluation of Skills[paper] Tycho: Active Abstraction with Programmatic World Models for ARC-AGI-3[paper] Building Customer Support AI Agents at 100M-User Scale[tech report] Agent Lightning v1.0: Towards Harnessed Agentic RL[paper] Beyond Logprobs: A Multi-Signal Confidence Engine for LLM-Based Document Field ExtractionメインTOPICFreeToken: Efficient Edge-Native MoE Serving with Bandwidth-Adaptive Executionおさらい: Mixture of Experts (MoE)の概要主要な技術的課題提案手法: FreeTokenImplementation(時間あれば)評価LayerX社内GPU環境で軽く実験環境結果構成別の実測(すべて 1GPU / 同一条件)律速は expert の常駐率なぜ CPU で計算するのが速いのかTTFT も同じ律速感想
今週のTOPIC
※ [paper] [blog] など何に関するTOPICなのかパッと見で分かるようにしましょう。
技術的に学びのあるトピックを解説する時間にできると🙆(AIツール紹介等はslack channelでの共有など別機会にて推奨)
出典を埋め込みURLにしましょう。
@Naoto Shimakoshi
[paper] ACES: Evaluating Skills, Not Just Agents — Agentic Continuous Evaluation of Skills
一言でいうと (NVIDIA, 2026/08)
- エージェント向け skill( + スクリプトのパッケージ)を「ドキュメントとしてスキャンする」のではなく、実際にエージェントに実行させて価値を測る評価フレームワーク ACES の提案。実装は NVIDIA SkillEvaluator として OSS 公開
背景・課題: skill はスキャンされているが、誰も実行していない
- skill は Claude Code / Codex / Cursor 等で共通化が進み、社内リポジトリや公開レジストリに数千個ある。しかしレビューゲートは4クラスすべて静的スキャン(構造チェック / LLM-as-Judge / linter / セキュリティスキャナ)で、「本番と同じモデル・サンドボックス・採点条件で、この skill は本当にタスク遂行を助けるのか」という配備判断の問いに誰も答えていない
- 実際、145 本の実 skill を測ると frontmatter 契約はほぼ形骸化(99.3% が 未宣言)しているのに skill は普通に動く。さらに構造スコアと LLM-judge スコアは Spearman ρ=0.14 でほぼ無相関 — スキャン同士ですら別のものを測っている

- スキャンを通過しても実行時に失敗する 5つの失敗モード: (a) 発見されない / (b) 誤ったスクリプト・引数で呼ぶ / (c) 正しい出力を誤って解釈・報告 / (d) 同居 skill と衝突 / (e) モデル更新でのサイレントな劣化 — いずれも skill 単体からは観測できない。論文はこれを「 でコンパイルが通っても意図どおり動くとは限らない」と喩える
詳細: 静的スキャン4クラスの中身と実測
- 静的構造チェック: 約50ルールを4次元(Correctness 0.35 / Discoverability 0.25 / Reliability 0.25 / Efficiency 0.15)で重み付け減点、70点以上でゲート通過。145 skill の実測ではスコア範囲 61〜98(平均 79.2)、94.5% が通過するが 80点到達は 48.9%(成績でいう C から B への壁)
- 違反 Top-10 は frontmatter 契約に集中: 未宣言 99.3% / Limitations 欠落 97.9% / 欠落 97.2% / 欠落 91.7% → 契約は強制されておらず努力目標(strict-mode ゲートをオプション提供する動機)
- LLM-as-Judge: G-Eval 型の form-filling で 9+1 基準(description / instruction の明快さ、実例の質、スコープ定義、trigger simulation、workflow 完全性、error-handling 等)を temperature 0 で採点。「handle errors appropriately」のような語彙だけの指示は構造ルールを通るが judge で落ちる
- judge モデル間の差は 0–10 スケールで約 1.5 pt(Claude 3.7 Sonnet / 3.5 Haiku / 社内 9B)。相対順位はおおむね保持される
- 食い違いは2パターンにクラスタ: 「構造は通るが指示が曖昧」/「内容は良いがメタデータ欠落」— 2つのスキャンは skill 品質の別の側面を測っている
- 先行ツール(SkillsBench / SkillTester / In-the-Wild / Terminal-Bench 等)は、Artifact 採点・lift 測定・マルチ harness・CI・HITL の5能力のうち1〜2個しかカバーしない。全部入りが ACES
提案手法: paired live trial + Skill Lift
Skill Lift を直感的に — 「同じ問題を、skill を持たせた場合と持たせない場合の2回解かせて、点数の差を取る」。いわば A/B テスト。差が正なら skill が役に立った、負なら邪魔をしたということ
- harness = エージェントの実行環境(Claude Code / Codex など)。decoy = わざと置く「おとり」の無関係 skill。両条件に同じ decoy を置くことで「複数の skill の中から正しい 1 個を選べるか」まで含めて公平に測れる
- 同一タスク・同一 harness・同一 workspace・同一 scorer で「skill あり / なし」のペア実行を行い、reward の差分 = Skill Lift として skill の限界的寄与を測る。baseline 側にも decoy skill を置き、発見・ルーティングの負荷を両条件で揃える
- トラジェクトリは ATIF(harness 横断の共通 JSON トレース形式)に正規化し、6つのデフォルト指標で採点: 決定的な / / + LLM/RAGAS ジャッジの / /
ATIF とは? — ハーネスごとにバラバラな実行ログを揃える「共通中間表現」。トラジェクトリをステップの順序付きリスト( / / tool call(関数名+引数)/ / 最終応答)として表すバージョン管理された JSON スキーマ
- Claude Code / Codex はネイティブに出力でき、 のように stdout しか出さないハーネスはアダプタで合成 ATIF に変換する。ATIF にさえなれば同一の評価器で採点できるので、「評価器を1回書けばどのエージェントでも使える」を成立させる可搬性の要 (portability pivot)
- 評価データセット は skill リポジトリに同梱し、CI で skill 変更のたびに実行 — 「 は skill の 」という evaluation-native な開発フローを提案
- スキーマは6フィールドだけ: / (ユーザーの質問)/ (期待される skill。ネガティブケースでは null)/ (任意)/ (参照回答)/ (エージェントが示すべき観測可能な挙動の順序付きリスト)
expected_behavior が一番のキモ — 「実行前に を読んだ」「破壊的操作の前にユーザーに確認した」のような自由形式の文を並べるだけ。LLM ジャッジがトラジェクトリを読んで1件ずつ YES/NO 判定し、合格割合がスコアになる(G-Eval 系の rubric-anchored judging)
- 強い理由は3つ: 合成可能(文を足せばスキーマを変えずにカバレッジが増える)・可読(skill 作者が DSL を学ばずに直接書ける)・強制可能(挙動単位の pass/fail 粒度が得られる)
- 「ワークフローのどのステップを飛ばしたか」まで見えるので、accuracy では捉えられない改善・劣化を捕捉できる(behavior check の lift +0.298 はこの仕組みで測られている)

- 3つの設計原則:
- ① Write once, evaluate everywhere(skill ごとに1つの evaluation contract が全レイヤ・全エージェントを駆動)
- ② Differential measurement(品質は比較的性質 — 変えるのは対象 skill の有無だけ)
- ③ Developer-guided evaluation(自動生成はブートストラップであって oracle ではない。 の著者意図が LLM 生成物に常に優先)
- skill の価値は content 寄与(使うと決めた後の手順の質)と discovery / routing 寄与(複数候補から選ばれるか)に分解できる。対象 skill だけを置く isolation と decoy 同居の group の2モードで測り、差分が routing premium — ゼロ近傍なら「名前と説明が隣接 skill と差別化できていない」という実行可能なシグナルになる
Harbor とは? — ACES が実行基盤に使うサンドボックス実行フレームワーク(別プロジェクト。論文は自らの貢献とは主張していない)。タスクごとに隔離されたコンテナ環境を立ち上げてエージェントを走らせ、ログを ATIF で受け渡す
- 役割分担: ACES(adapter / task emitter)が「何をどういう条件で走らせるか」(ペアタスク発行・skill ステージング・verifier 注入)を決め、Harbor がコンテナの起動・実行・破棄を担う
- 各タスクは (プロンプト)/ (環境・MCP 宣言)/ / (注入する skill セット — with-skill 版と baseline 版で差をつける場所)/ 共有 verifier のコピーで構成される
- 「skill数×エージェント数×ケース数×試行数×2条件」分の新鮮な隔離環境が毎回要るので、この基盤なしにレジストリ規模の評価は成立しない。BYOT タスクを置く の名前の由来でもある

- ⚠️ ただし routing premium は手法として定義・提供されているものの、論文の実証評価に per-skill の実測値は報告されていない(本番 947 ケースの isolation / group 内訳も非明示)。手法の提案 ≠ 全機能の実証
- 代わりに報告されているのが routing ストレステスト(25 variant、本番集計とは別枠): 可視 skill 1〜20 では lift 0.133〜0.149 で安定だが wall time は 258→451 秒に増加。可視 50 で pass rate 0.55 まで低下し wall time 1,290 秒(約3倍超) — 「とりあえず全部載せる」は routing コストとして跳ね返る
詳細: 評価アセット・6指標・スケーリング
- ブートストラップは 4バケット生成: Explicit(直接指名)/ Implicit(「repo を origin と同期して」)/ Contextual(ノイズ付きの現実的プロンプト)/ Negative control(過剰発火の検出)。セキュリティ挙動は全エントリに自動追記
- 初回実行後は refine ステップが ATIF トラジェクトリから と を精緻化( は決して上書きしない)→ 以降のジャッジ分散が下がる
- 6指標 = 決定的3( / : activation・script_execution・workflow_order・error_recovery の4サブチェック / : routing・tool_efficiency)+ ジャッジ3( 5基準 / RAGAS / )。報告時は Security / Correctness / Discoverability / Effectiveness / Efficiency の5つのステークホルダ次元に写像
- 実行基盤は Harbor 上の adapter / task emitter。コンテナ実行数 ≤ 2NKCA(skill数×エージェント数×ケース数×試行数×2条件)でレジストリ規模に線形。BYOT / BYOG で製品固有タスク・独自 grader を持ち込める
主要結果(本番 64 skill 中 58 本、4 harness、947 ペアケース)
- 平均 composite Skill Lift = +0.2134(95% CI [0.1967, 0.2301])、72.8% のケースで正。つまり skill は総じて効く(絶対値では with-skill 0.7460 vs baseline 0.5326。符号分布は 正689 / ゼロ171 / 負87、中央値 0.1717 — 外れ値に押し上げられた平均ではない)
- ただし最大の伸びは最終回答の正しさ(accuracy +0.143)ではなく、プロセス指標: skill execution +0.326 / behavior check +0.298 / skill efficiency +0.276 — 「skill を読んだか・ワークフローに従ったか」はドキュメントスキャンでは原理的に観測できない信号

- negative lift はデバッグ信号: 947 中 87 ケースが負。トラジェクトリを見ると「実行の不安定性」と「clean negative(発見はしたが検証を飛ばした・余分なツールコールを消費した)」の2クラスに分かれ、「発見されなかった」と「発見されたが誤用された」を分離できる — 打つ手(description 改善 vs 手順本文の改善)が変わる
- 静的スコアはランタイム証拠にならない: 構造スコアと live lift の相関は ρ = −0.018、LLM-judge スコアとも ρ = −0.027(いずれもゼロと区別不能)。静的レビュー満点・accuracy 1.0 の skill でも、中間成果物にシークレット様文字列が残っていたケースあり
ここが一番のポイント — 「ドキュメントが綺麗に書けているか」と「実際に役立つか」は無相関。つまり「ドキュメントレビューが通った=安心して使える」ではない。精度の優劣ではなく、見ているもの自体が違うというのがこの論文の主張
- lift は harness 依存で大きく変わる(OpenCode +0.36 〜 Terminus-2 +0.09)。またモデルが強くなると baseline が上がるため lift は縮む(Codex で GPT-5.2→5.5 のスイープ: +0.09→+0.05)→ モデル更新のたびに再評価が必要

詳細: 指標別の数値・ストレステスト・限界
- 指標別 lift(括弧は正の割合): skill execution 0.326(64%)/ behavior check 0.298(56%)/ skill efficiency 0.276(42%)/ goal accuracy 0.217(57%)/ accuracy 0.143(37%)/ security 0.020(6%、baseline で既にほぼ満たされヘッドルームが小さい)
- skill efficiency は平均では3位なのに正の割合は 42% 止まり — 「正しさと引き換えに効率を犠牲にする run がある」高分散のトレードオフ
- harness 別カバレッジは不均一(Claude Code 251 / Codex 259 / OpenCode 211 / Terminus-2 226 ペアケース)なので、リーダーボードではなく per-skill / per-harness の診断として読む
- OpenClaw sanitization ケース: 静的レビュー 11/11 通過・89/100、accuracy / goal accuracy 両アーム 1.0 でも、中間成果物に合成カナリア が残存(最終ファイルだけ修復されていた)→ 最終成果物しか見ない grader はこの種の欠陥を構造的に見逃す
- 限界: コーパスは System Access / Deployment / Platform / Data Infra に偏り / lift は「宣言された workspace の下での限界的寄与」であって環境非依存の内在的価値ではない / ライブ採点での judge 間一致は未測定 / VPN 越しの内部エンドポイント依存 skill は絶対値が下限になる(差分は依然有効)
実務への示唆
- 静的スキャンとライブ評価は「精度の違い」ではなく観測対象の違い。スキャンは authoring 品質のゲートに使い、デプロイ判断はペア実行で測る
- 測定単位を「エージェント」でなく「skill」にする — 同じ skill でも harness 次第で +0.36〜+0.09 まで変わる
- プロセス指標を必ず含める — accuracy だけ見るとワークフロー遵守の改善(+0.326)を半分以下に過小評価する。逆に「skill を入れれば速くなる」は 42% しか当たらない
- lift の低下 ≠ skill の劣化。モデルが強くなると baseline が上がって lift は縮む(GPT-5.5 で +0.11→+0.05)ので、絶対スコアと併読し、モデル更新後に定期再評価する
- workspace に skill を置きすぎない: 可視 skill 20→50 で pass rate 0.55 に低下、wall time 約3倍。カタログが大きい組織では可視スキルの絞り込み自体が性能施策
- コストは二層で設計: スキャンは毎コミット、ライブペア評価はリリース候補・高リスク skill・レビュアー要求時
@Yuya Matsumura
[paper] Tycho: Active Abstraction with Programmatic World Models for ARC-AGI-3
AIの本質的な知能とは、既存の解法を大量に暗記することではなく、未知の環境にて限られた経験から新しいスキルをいかに効率的に取得できるか(Skill-acquisition efficiency)である。ルールもゴールも説明されない未知のゲーム環境を対象にしたベンチマーク(ARC-AGI-3ベンチマーク)において、「静的な推論能力」ではなく「対話的なスキル習得の効率性」を評価する。この課題に対し、自律的に世界モデルを構築・検証するエージェントシステム “Tycho” を提案。
そもそも ARC-AGI-3£™
ARC-AGI-3は、AIが新しいスキルをどれだけ効率的に獲得できるか(汎化能力)を測定するために設計された、インタラクティブ(対話型・逐次行動型)なグリッドベースのゲーム環境(ベンチマーク)
具体的には、以下のような特徴を持つ極めてユニークなパズル・シミュレーションゲームとなっています。
1. 基本的なプレイ環境
- プレイヤー(AIエージェント)は、16色のカラーピクセルで構成される 64×64 のグリッド画面を観察します。
- プレイヤーが行動(アクション)を選択して実行すると、ゲーム側からその結果として変化した「次のグリッド画面」が返されます。このターン制のサイクルを繰り返しながら、用意された複数のステージ(レベル)を順番にクリアしていきます。
2. 「説明」が一切与えられない手探り状態
- 最大の特徴は、ゲームのルール、自分が選ぶアクションがどんな挙動を起こすのか、そして何を達成すればクリア(ゴール)になるのかという説明が、自然言語やテキストを含め一切与えられない点です。
- プレイヤーは、目の前の画面の変化や、過去の行動に対するゲームの反応(移行履歴)から、ゲームの背後に潜むメカニズムやクリア条件を自分自身で推論・発見しなければなりません。
3. 「アクションの効率性」が命
- 単にクリアすれば良いわけではなく、「どれだけ少ない手(アクション数)でクリアできたか」が厳格にスコア化されます。
- 無限に試行錯誤を繰り返す力ではなく、わずかな経験から即座に正しいルールを脳内に構築(モデリング)し、最小限のアクションで正確にゴールを達成できる「スキル獲得の効率(知能の定義そのもの)」が問われます。
4. システム的な裏側(ムーアマシン)
- 学術的には、この環境は「レンダー付き決定性ムーアマシン(Rendered Deterministic Moore Machine)」として定式化されています。
- プレイヤーのアクションによって、画面上には見えないゲーム内部の「隠された状態(State:レイアウト、オブジェクトの位置、カウンターなど)」が更新され、それがカラーグリッドとして毎回描画(レンダリング)される仕組みになっています
こういうの。人間もプレイできるよ!

Tychoの中核概念は、能動的抽象化(Active Abstraction)

ARC-AGI-3のモデル化:現在の状態だけでは不十分
つまり、今見えている画面が同じでも、内部状態が異なれば、次に同じ行動をとっても結果が変わるという現象が起きる(非マルコフ性)。ので、過去の行動履歴であったり諸々を state S に突っ込んで推論に使う。

プログラム的世界モデルによる抽象化
Pythonベースの「実行可能な仮説」を用いることで、推論プロセスを計算機科学的に「検査可能」かつ「編集可能」な形式で外部化。


効率性を重視したアーキテクチャ
要するに、完璧にすべてを模倣する・完璧な世界モデルを構築するのではなく、タスクを解くのに必要な部分だけ性能が上がればいい。

オーケストレーションポリシーによる比較
推論リソースの割り当てを決定するメタ推論のポリシーを比較

実験結果
ポリシー比較では Orchestrator が一番強かった w/ Opus4.8(88.49)。最近の強いモデル(GPT-5.6, Opus5など)えは人間ベースライン(100)よりも効率性高し。


Triger と Orchestrator の比較
Triger は少しでもずれがあると自動で修復が入り、できるだけ完璧な世界モデルを作ろうとする。実際に、再現精度は一番高かった。一方で、ベンチマークの性能は、タスク達成・次の行動に役立つ際だけ世界モデルを更新する Orchestrator の方が高かった。
完璧に全部を理解するのではなく、タスクを解くのに必要な部分を理解するだけ良い。

@Shun Ito
[paper] Building Customer Support AI Agents at 100M-User Scale
- 1億人以上のユーザーを抱える銀行Nubankのカスタマーサポート(CS)AIエージェントの評価パイプライン事例紹介
- コーディング支援や検索エージェントと違い、CSエージェントには特有の難しさがある。論文は次の5点を挙げる。
- 品質基準が高い。 銀行で1回の誤対応が顧客の解約や損失に直結する。
- 機微なデータを扱う。 残高・取引履歴・住所などプライバシー規制の対象データを扱う。
- ツールセットが狭く深い。 汎用エージェントと違い、5〜15個程度のドメイン特化ツールだけを使うが、その中でのエッジケースは非常に多様。
- 人間への優雅な引き継ぎが必須。 自動化が失敗したら、会話の文脈を保ったまま人間のオペレーターに渡す必要がある。
- 評価駆動開発フレームワーク
- 「速いループ」の評価が信頼できるなら「遅いループ」を待たずに改善を速く回せる。そのための工夫を入れているフレームワーク。
- コンテキストエンジニアリング
- プロンプトを部品ごとにバージョン管理する
- Instructions: エージェントの役割・振る舞いのルール・コンプライアンス制約。
- Routines: 人間向けの業務マニュアル(SOP)を、エージェントが実行できる手順に変換したもの。例えば「カード配送調査ルーティン」は「① 挨拶して状況を把握 → ② 配送データ取得 → ③ 住所タイプ別の質問 → ④ 未解決なら再発行を提案」という順序で組まれる。
- Macros: よくある場面用の定型応答テンプレート(ゼロから文章を組み立てず、自然な言い換えは許す)。
- Tool定義とスクラッチパッド: 各ツールは名前・入力スキーマ・出力形式・呼び出し条件を明記して独立に管理する。スクラッチパッド(作業記憶)は会話中に集めた情報を保持し、同じツールを無駄に呼び直さないようにする。
- 各部品が独立にバージョン管理されているので、「v3のInstructions + v1のRoutines + v2のTools」のように組み合わせを選んで新しい設定を作れる。これにより、プロンプト全体を書き直すのではなく、失敗の原因になった一部品だけをピンポイントで直す、という開発ができる。
- LLM Judgeの信頼性担保
- Judgeプロンプト改善手順
- ドメイン知識を持つ人間のアナリスト3人が、実会話サンプル(数百件)に対して2値ラベル(成功/失敗など)と、その理由を説明するテキストを付与する。最終ラベルは多数決。
- この人間ラベル付きデータを使い、GEPAでLLM Judge用のプロンプトを最適化する。ベースモデルにGPT-4.1-mini、批評・改善役(reflection model)にGPT-5.1を使い、約500イテレーション回す。人間が書いた「なぜその判定にしたか」という自由記述の理由も最適化のヒントとして与える。
- 最適化後のJudgeプロンプトを、7種類の異なるLLM(GPT-4.1系、GPT-4o系、GPT-5、o3系)に適用し、モデル間の判定の一致度(Cohen's κ)を比較する。
- このJudgeを使って、E1(エージェントの再発行判断ミス)〜E5(回答の完結性)まで5種類の評価カテゴリでプロンプトを最適化した結果、正解率はすべてのタスクで多数派ベースライン・手書きプロンプトの両方を上回った

Cohen's κ(カッパ係数): 2人(または2つのモデル)の判定がどれだけ一致するかを、偶然の一致率を差し引いて測る指標
κ = (p_0 - p_e) / (1 - p_e) (po:観測された一致率、pe:偶然による期待一致率)
κ が 0.8 を超えると「高い一致度」とされ、その評価ラベルは信頼できるとみなせる。逆に κ が0に近い、または負であれば、評価者間でほぼ合意がなく、その評価基準(ルーブリック)自体が曖昧である可能性が高い。
改善の具体例
- 評価
- オフラインで評価が改善すると、実際にオンラインの顧客満足度・自動化率が改善するのか
- カード配送エージェントでオフライン評価で改善した結果、オンラインのNPSも改善
- オフラインの改善幅とオンラインの改善幅が相関
- ドメインへの汎化
- 概ねオンライン評価が改善傾向
- △人間tNPS差(AIエージェントのtNPS − 熟練human agentのtNPS)はマイナス傾向。特にDebt Management(負債管理)は悪い。複雑な多段階の数値推論は難易度高い。



@Kyohei Uto(kuto)
[tech report] Agent Lightning v1.0: Towards Harnessed Agentic RL
Microsoftが開発しているAgent用のRLフレームワーク
1年前からOSSとして公開されていたが最近Technical Reportが公開されたので読んだ
概要
- 実際にプロダクトで使うエージェント・ハーネスをそのままRL環境で使う
- これをHarnessed Agentic RLと呼んでいる
- 1つのrolloutが分岐する問題の対処に焦点を当てている
Harnessed Agentic RL
- 従来のAgentic RLはLLMが環境とトークンを介して相互作用する
- 実際のエージェントはclaude codeのような独自ハーネスがあり、ハーネス側でコンテキスト圧縮やtool call, sub agentなどを管理している
- LLM単体の性能を上げるだけでなくハーネスで動くLLMの性能を上げたいという背景がある
- 本フレームワークでは実際のハーネスをもとにrolloutを行い、そのハーネス上で良い振る舞いをするようにLLMのpolicyをRLする
- ※環境とハーネスはここでは別概念として扱う

システム設計
3つの軽量コンポーネントで構成している。Agents with Harnessの部分が独立してるのが特徴
- Trainer: と vLLM を実行し、学習サンプルを生成してポリシーを更新する
- API gateway: モデルへのリクエストを中継し、学習データを収集する
- Rollout Controller: エージェントをローカル環境またはKubernetesジョブとして実行する

1つのrolloutが複数の学習サンプルに分割される問題
シンプルに考えると1つのrolloutをそのまま学習サンプルとして使いたいが、ハーネス含めて学習すると以下のようなケースでは学習サンプルを分けた方が良いケースが出てくる。
事例1 sub agentの起動
- sub agentAとsub agentBで与えるコンテキストと軌跡が異なるので軌跡ごとに分ける

事例2 コンテキスト要約
- 要約したタイミングでコンテキストが変わるのでその前後で分ける

事例3 Retokenization
- LLMが生成したtextを次のターンでtokenizeして渡すとtoken idで見ると1ターン目と2ターン目でズレることがある
- この事象はRLではオフポリシー化を誘発するため本フレームワークではmismatchが発生したら分割するということをやっている
[kuto]ここまでちゃんとケアすべき問題なのかがよくわかっていないが論文ではこれをメインの問題として扱っている

サンプル分割問題への対応
アドバンテージ計算
- GRPOの1グループでrollout1とrollout2が生成されたとする
- rollout内部でサンプル分割が発生したrollout1のadvantageは過大評価されてしまう
- rollout単位でadvantageを計算すべきというのが本論文の主張(つまり右のような分割が発生しても左のようにみなしてadvantageを計算する)

損失の正規化
- バッチで損失計算するときにrolloutの長さや1つのrollout内の学習サンプル数はバラバラ
- 損失計算の粒度としてtoken単位、サンプル単位、rollout単位の3つがありadvantage計算に合わせてrollout単位で損失を計算する方法をとっている
- GLM5系に利用されているslimeもこの方式

- advantage計算をsample単位とrollout単位で行う場合を比較している
- rollout単位の方が報酬は高くなる傾向であることが確認されている

その他工夫
Collocated Async RL
- 同期RLだと全rolloutの完了を待って学習するのが非効率ということで非同期RLが現在は主流
- 完全な非同期RLはrolloutと学習用でGPUを分けてそれぞれを非同期に処理する
- 提案の非同期RLはGPU使用数を節約するためにGPUをrolloutと学習用で分けず交互に利用

[kuto] ハーネス前提の学習は今後広がっていきそう。cursorはcomposerの学習で実際にやってた
@Ryuhei Kawabata(monokemonoke)
[paper] Beyond Logprobs: A Multi-Signal Confidence Engine for LLM-Based Document Field Extraction
- 投稿: 2026/06/23
- 種別: IJCAI-ECAI 2026 RobustifAI Workshop 採択(Oral)
eli5 版
tl;dr
請求書や領収書から LLM でフィールドを抽出したとき、「どの抽出を人手レビューに回すか」を決める信頼度をどう作るかという話。著者らは、同じ文書を性質の違う 2 通りで読ませ、その食い違いを主シグナルにする ExtractConf を提案し、55 フィールドの請求書データで自動確定率 80% のとき精度 99.1% を達成したと主張している。
論点 1: 既存の信頼度は実務の閾値で機能しない
LLM 抽出の信頼度としてよく使われるのは 3 つで、トークンの対数尤度、モデルに自己申告させる言語化信頼度、複数回サンプリングして一致度を見る self-consistency がある。著者らの主張は、これらが実用的な閾値ではいずれも「ほぼ全部を正解扱いする」方向に潰れてしまうというもので、レビュー対象を絞り込む用途には使えない。ここが手法の出発点になっている。
論点 2: Hunter と Mapper の非対称性を信号に変える
中心のアイデアは、同じ文書に対して読み方の違う 2 種類の LLM 呼び出しを行い、その不一致を信頼度に使う点にある。
| 呼び出し | 読み方 | 起きやすい失敗 |
|---|---|---|
| Hunter | スキーマ主導。定義された項目を埋めきる圧力の下で抽出する | 存在しない項目の値を捏造する |
| Mapper | 文書主導。文書全体を走査し、根拠のある値を拾い上げる | 視覚的に目立たない値を取りこぼす |
同じモデルを 2 回叩くのではなく、あえて失敗の方向が逆になる 2 つの読み方を用意するのが肝で、両者が一致していれば正しい可能性が高く、食い違えば人手に回す、という判断が自然に立つ。self-consistency が同じ間違いを何度も再現して自信を持ってしまう問題を、この非対称性で回避している。
論点 3: 単一シグナルではなく 5 系統を分類器で統合する
ExtractConf が使うシグナルは以下の 5 系統で、ドメイン固有ルールや再学習を必要としない分類器で統合すると説明されている。
- 呼び出し間の不一致(cross-call disagreement)
- LLM 内部の不確実性
- OCR の情報
- 画像品質
- 空間レイアウト
文書ドメインが変わっても効くように、ルールではなく学習された分類器に寄せている点が実務では効いてくる。

結果
比較対象は logprob 平均のベースライン。
| 条件 | 指標 | 値 |
|---|---|---|
| DocILE(55 フィールド請求書) | ROC AUC | 0.928 |
| DocILE、logprob 平均比 | 選別後リスク | 70% 削減 |
| DocILE、カバレッジ 80% | 精度 | 99.1% |
| CORD 領収書(zero-shot 転移) | ROC AUC | 0.858 |
| Lasso による軽量な再較正後 | ECE | 89% 削減 |
| 同上 | Brier score | 43% 削減 |
「カバレッジ 80% で精度 99.1%」は、抽出結果の 8 割を自動確定に回し、残り 2 割を人手に送る運用にしたとき、自動確定側の精度が 99.1% だったという読み方になる。請求書で学習したものを領収書に無調整で当てて AUC 0.858 が出ている点も、横展開のしやすさを示す材料として置かれている。
monoke 感想
- シンプルで納得感のある信頼性推定の方法
- ベースライン手法同士ではそこまで変わらないのを確かめていて興味深い
メインTOPIC
FreeToken: Efficient Edge-Native MoE Serving with Bandwidth-Adaptive Execution
[pon] 話題になってるアレ。社内GPUでの計測も軽く紹介
- FreeTokenは、エッジデバイスにおいてMixture-of-Experts (MoE) モデルを効率的に推論するための、ハードウェアの帯域幅に適応した実行フレームワークです。

おさらい: Mixture of Experts (MoE)の概要
Mixture of Experts (MoE)の概要
- 動的かつ部分的な処理による効率化: MoEは、モデル内に「Expert」と呼ばれる多数のサブネットワーク(専門家)を保持し、各トークン(処理の最小単位)の処理時に、その中からごく一部のExpertだけを動的に選択してアクティブにする(ルーティングする)アーキテクチャ。
- パラメータ規模と計算量の両立: 例えば「DeepSeek-V4-Flash」では、各レイヤーに256個のExpertが存在するが、1つのトークンが通過するのはそのうちのわずか6個だけ。これにより、モデル全体のパラメータ数が284B(2840億)という巨大な規模でありながら、1つのトークンの処理時に実際に関与するのは13B(130億)相当に抑えられる。この「疎な活性化(Sparse Activation)」により、巨大モデルの高い表現力を維持したまま、1トークンあたりの計算量を大幅に削減できる
主要な技術的課題
ローカル環境におけるMoEの主な課題
計算量が少なくて済むMoEはローカル実行に適しているように見えますが、実用上、メモリ容量と転送・処理の帯域幅をめぐる以下の深刻な課題に直面します。
1. Prefillステージにおける転送と再計算のコスト
- 「疎」から「実質的な密」への変化と転送ボトルネック
- プロンプトを一度に読み込む「プリフィル」段階では、大量のトークンを並行処理するため、トークン全体が活性化させるExpertの和集合はほぼすべてのExpertをカバーすることになります。
- これによりMoEの強みである「疎な活性化」が失われ、実質的に高密度(Dense)なモデルを処理するのと同等の状態になります。
- 結果として、GPUメモリ(VRAM)に入り切らない膨大なExpert群を、メインメモリ(ホストメモリ)からCPU-GPU間のバス(PCIe)経由で繰り返しストリーミング転送する必要が生じ、GPUがアイドリング(待機)状態となって最初のトークン出力(TTFT)までに数秒〜数十秒の大きな遅延が発生します。
- エージェント処理における頻繁な再プリフィル(再計算)
- AIエージェントのワークロードでは、思考プロセスの削除やツール出力の変更など、コンテキスト(履歴)の部分的な編集が頻繁に行われます。
- このような編集が発生すると、ハイブリッドアテンションや回帰レイヤー(Recurrent layer)などで保持していた過去の圧縮状態(チェックポイント)が使えなくなり、最初から「再プリフィル(再計算)」が発生します。
2. デコード(Decode)ステージにおけるキャッシュミスとCPU帯域の限界
- 動的ルーティングによるキャッシュミス
- トークンを1文字ずつ生成する「デコード」段階では、トークンごとにアクティブになるExpertが刻々と変化します。
- 既存のエンジンが採用している、ロード時やプリフィル時に「よく使われるExpert」を固定して配置する静的なアプローチでは、ルーティングの動的な変化に追従できず、キャッシュミス(必要なExpertがGPUメモリ上に存在しない状態)が多発します。
- CPUメモリ帯域の極端な狭さ
- キャッシュミスしたExpertをCPU側で直接処理しようとする場合、消費者向けPCのCPUメモリ帯域幅(DDR4で約50GB/s、DDR5で約80〜90GB/s程度)は、GPUのメモリ帯域幅(RTX 4090や5090の1〜1.8 TB/s)に比べて桁違いに狭いため、デコードの生成スピードが極めて遅くなってしまいます。
- 環境依存の最適なワークロード分担
- キャッシュミスしたExpertを「PCIe経由でGPUに転送して実行する」か「CPU上でそのまま処理する」べきかの最適なバランスは、使用しているマシンのハードウェア構成によって異なり、一意な静的ルールでは解決できません。
3. エッジ環境特有のリソース管理問題
- 非専用リソースとVRAM容量の変動
- エッジ環境ではGPUやVRAMがOSのデスクトップ描画やブラウザ、ゲームなどの他のアプリケーションと共有されています。このため、サービングエンジンに割り当てられるVRAM容量は起動中にも常に変動し、KVキャッシュとExpertキャッシュのメモリ配分を動的に調整する必要があります。
- 巨大なモデルゆえの遅い起動
- エッジデバイスでは使いたい時だけエンジンを起動・終了することが一般的ですが、140GB(FP4のDeepSeek-V4-Flashなど)を超える巨大なExpertモデルをストレージからロードするだけで、初回起動に20秒以上の時間がかかり、これがユーザー体験を損ねます。
提案手法: FreeToken

1. 帯域適応型実行(Bandwidth-Adaptive Execution)
- プリフィル時:全レイヤー・ダブルバッファリング(Full-layer double buffering)
- プリフィル段階ではほぼすべてのExpertが活性化するため、オンデマンドでロードするとPCIe転送中にGPUがアイドル状態になります。
- FreeTokenは、GPUメモリ上に2レイヤー分のバッファを確保します。GPUがレイヤー の計算を実行している間に、バックグラウンドの専用ストリームが次のレイヤー の全Expert重みをPCIe経由で非同期にロードします。
- これにより、Expertの膨大な転送コストを背後の計算時間内に完全に隠蔽(パイプライン化)し、転送待ちによるGPUの空き時間をゼロにします。

- デコード時:協調処理を最適化する ポリシー
- デコード中に発生した 個のキャッシュミス(GPU上にないExpertへのルーティング)を処理する際、PCIeでGPUに転送して実行するセット(、個数 )と、DRAMから直接CPUで実行するセット()に動的に分割します。
- PCIe転送とCPU実行は、どちらもホストメモリの同じシステム帯域(DRAM)を消費するため、PCIe転送をフルに稼働させると、CPU側にはその「残りの帯域(残余帯域:)」のみが割り当てられます。
- FreeTokenは、事前に測定したPCIe転送帯域()と、CPU側の実行帯域()をバランスさせる以下の式の最適分割数 を毎ステップ瞬時に計算します
- これにより、GPU側の転送・計算時間と、CPU側の並行計算時間がちょうど一致するようにワークロードが完全に均等化され、ハードウェア全体の限界性能を引き出します。

2. セマンティック対応キャッシュ(Semantic-Aware Caching)
メモリ容量が逼迫する環境において、「何を守り、何を捨てるか」を、エージェントシステムの動作特性(セマンティクス)に基づいて決定します。
- デコード時:時間的局所性を活用した共有LRU Expertキャッシュ
- デコード処理中、隣接するトークンは高い確率で同じExpertを繰り返し呼び出すという「時間的局所性(Temporal Locality)」があります。
- FreeTokenは、特定のExpertを固定配置するのではなく、全レイヤーで共有される1つの弾力的なLRUキャッシュ空間をGPU上に構築します。
- ルーターがExpertを要求するたびに、このキャッシュを動的に更新・ヒットさせ、どうしてもキャッシュミスしたわずかな残余分のみを上述の ポリシーに送ることで、VRAMを最大限に活用します。

- プリフィル時:特殊トークンを基準とした「セマンティックアンカー(Semantic Anchors)」
- 近年のMoEモデル(Qwen3.6-35B-A3BやDeepSeek-V4-Flashなど)は、過去の長い履歴をコンパクトに圧縮して保持する「リカレントレイヤー」や「ハイブリッドアテンション」を採用しています。
- この圧縮された状態(Recurrent state)は、途中の1文字でも編集されると完全に無効化され、数千トークンの再プリフィルを余儀なくされます。
- AIエージェントの処理において、コンテキストの編集や切り詰めはランダムには行われません。通常、思考ブロックの開始/終了( )や、ツール呼び出し()、ツール出力()などの特別なトークンの境界(セマンティックアンカー)で行われます。
- FreeTokenは、これらの特別なトークンの位置に限定して、リカレント状態のチェックポイントを保存します。エージェントが過去の履歴を書き換えた際、生き残った最も深い(直近の)セマンティックアンカーから状態を即座に復元し、書き換わった末尾のサフィックス(接尾辞)だけを再計算(再プリフィル)します。これにより、無駄な大規模再計算をほぼ完全に排除します。

3. 弾力的なエッジリソース管理(Elastic Memory Management)
エッジPCではVRAMが専用ではなく、他のデスクトップ画面やWebブラウザ、ゲームなどにいつでも数GB単位で奪われる可能性があります。
- 実行時キャッシュの動的再構成(Runtime Cache Reconfiguration)
- FreeTokenでは「ホストメモリ上のExpertプール」が常に完全な真実のソース(Source of truth)として維持されているため、GPU上のメモリは「正しさ」ではなく「パフォーマンス」にのみ影響します。
- これを利用し、サービング実行中であっても、スケジューラーが安全なタイミング(安全点)に達するたびに、システムを再起動することなく、現在のVRAM予算に合わせてGPU内のExpertキャッシュとKVキャッシュの比率を動的にリサイズして再構築します。

- 高速なエンジン起動(Fast Bootstrap)
- 起動時のGPUのウォームアップ処理(通常数十秒かかる)を完全に省略し、コールドキャッシュ(最初はすべてキャッシュミスとしてCPUで処理)のまま即座にサービスを開始し、通常の推論を通じて徐々にキャッシュを温めます。

4. CUDA-Graphとの完全な統合による高速化
- 上記のような極めて動的な意思決定(キャッシュミス判定、Victim(追い出し)選択、GPU転送・CPU実行の振り分け)をホスト(CPU上のPythonなど)が毎レイヤー制御すると、CPU-GPU間の同期オーバーヘッドで処理が著しく停滞します。
- FreeTokenは、これらの動的な制御ロジックをすべてGPUカーネルにカプセル化し、データとして静的な「CUDA Graph」内に取り込むことで、ホストとの同期を完全に排除し、高速かつ安定した推論を実行可能にしています。
Implementation(時間あれば)
1. 既存のGPU型サービング基盤との統合
FreeTokenは、ゼロから完全に新しい推論エンジンを作るのではなく、既存の高性能なGPU中心型サービングシステムである SGLang および vLLM のアーキテクチャを基盤(サブストレート)として構築されています。
- メモリ・コンテキスト管理: paged KV cache管理や、Radixツリーに基づくプレフィックス再利用(Radix-based prefix reuse)などの洗練された機能をそのまま継承・統合しています1。
- カーネルライブラリの活用: アテンション演算やアテンションスケジューリングには、高性能なコミュニティライブラリである FlashInfer や Flash Linear Attention (FLA) を適宜取り入れています。
2. CUDA Graph完全対応のデバイス側(GPU)LRUキャッシュ
動的なExpertキャッシュ操作(キャッシュミス判定、追い出し、ロードなど)をホスト(CPU上のPythonスクリプト等)で制御すると、制御ステップごとにCPU-GPU間の同期(Device Synchronization)が発生し、致命的なオーバーヘッドとなります。FreeTokenは、動的な制御ロジックをすべてGPU側で完結させ、静的な「CUDA Graph」の中にカプセル化する手法を実装しています。
- デバイス側キャッシュ制御(Device-side Cache Control)
- 各レイヤーにおいて、1つのGPUカーネルが「重複トークン用のExpertデデュープ(重複排除)」「既存キャッシュテーブルとの比較(ヒット/ミス判定)」「帯域に基づく転送数 の算出」「追い出し対象(Victim)の選定」「論理IDから物理スロットIDへの書き換え」をすべて行います。
- LRUのトラップ回避(1パスによる追い出し候補の発見)
- 通常、LRUキャッシュから複数のスロットを追い出すにはキャッシュ全体を何度もスキャンする必要があります。FreeTokenでは、わずか1パス(Single-pass)のスキャンで「最も最近使われていない(LRU)上位 個の候補スロット」を一度に特定するカスタムGPUカーネルを実装しています4。ミスの転送要求 は、この特定された候補から順に消費されるため、ミス数に関わらず探索コストは常に1パス分で固定されます。
- 統合された転送カーネル(Fused Transfer)
- すべてのExpertバンクが同一の「論理Expert-スロット変換マッピング」を共有するため、デバイス側の一一のインデックスリスト(転送元/転送先)を使って、全Expertバンクに対する非同期DMA転送を1つの固定形状カーネルとして一括で起動できます(不使用スロットは有効カウントでマスク処理)。
3. CUDA Graphにネイティブ統合されたCPU実行CPU側で一部のExpertを並行実行する処理も、すべて同じCUDA Graphの中にグラフレジデント(Graph-resident)としてキャプチャされています。
- グラフ内の同期とシームレスな制御
- デコードのバッチサイズごとに、安定したピン留め(Pinned)I/Oバッファとタスク記述子が事前に確保されています5。CUDA Graphには「デバイス→ホストへのデータコピー」「ホスト関数(CPU実行用)のサブミットノード」「並行して走るGPU側の処理」「GPU-CPU同期ノード」「ホスト→デバイスへの出力書き戻しコピー」がひとまとめに登録されています5。これにより、Python側からの指示や毎トークンごとのスケジュール同期を一切介さずに、非同期・並列実行を高速にリプレイできます5。
- 常駐型C++ワーカープール(Persistent C++ Thread Pool)
- CPU処理の実体は、マシンの物理コア(Physical Cores)に強固にピン留めされた、常駐型のC++スレッドプールです。CPUワーカー内のカーネルは、ハードウェアに特化したSIMD命令およびインカーネルでの動的脱量子化(Dequantization)を用いてExpertの重みを直接ロード・計算します。これにより、処理をDRAMの最大帯域幅制限(Bandwidth-bound)に張り付かせ、無駄な計算オーバーヘッドを排除した状態で部分的な重み付き出力を計算します。
4. モデルの保存形式(FTW形式)と高速ロード
エッジPCは「使いたい時に起動し、終わったら閉じる」ことが多いため、ロードの高速化が極めて重要です。
- FTW(FreeToken Weight)フォーマットの導入: 様々なMoEモデル固有のチェックポイント構造を、レイヤーとExpertのフラットなID()をリード次元とする、統一されたいくつかの「Expertバンク(Expert Banks)」に正規化します8。事前にこのランタイムに最適なバンク構造へと重みを結合・整理して保存しておく独自形式「FTWフォーマット」を開発しました。
- ゼロ初期化(Zero-initialization)回避とダイレクトI/O
- 起動時にFTW形式を読み込む際、テンソル構成のパースやCPU側での重みの並べ替え(Repacking)は一切不要です8。アライメントされたデータを並列ダイレクトI/O(Parallel Direct I/O)により、ディスクからメモリ上へ直接、正確なサイズに切り出されたホストバンクに一括ロードします。
- さらに、あらかじめ空のメモリバッファを確保してピン留め(DMA可能にする処理)してからロードする従来の手法を改め、「ロード完了後に初めて物理メモリをピン留めする」というアプローチをとっています8。これにより、空メモリの確保時に発生する「OSがギガバイト単位のメモリページをゼロで初期化し、ページフォールトを解決する」という数十秒の余計な待ち時間を完全にスキップし、ディスク読み込み速度(例:NVMe SSDの物理限界である約7GB/sなど)を100%発揮させます。
5. プラットフォーム適応とフォールバック(Pure-CPU)
マシンの能力やOSのセキュリティ制限に柔軟に対応するための仕組みも組み込まれています。
- ロード時の動的ディスパッチ
- 起動時にハードウェア構成をプロファイリングし、GPUのアーキテクチャやCUDA環境、CPUのSIMD命令セット(AVX512やAMXなど)、物理コアレイアウトを自動検知して、最も最適な計算カーネルを動的にディスパッチしてマッピングします。
- Pure-CPUフォールバックモード
- 一部のOSやドライバのセキュリティ制限により、大容量のホストメモリ(数〜数百GB)をすべてピン留め(DMA登録)できない状況に直面することがあります。その場合、FreeTokenは自動的に「Pure-CPU MoEバックエンド」へフォールバックします。
- このモードでは、全Expert重みは通常の仮想メモリ(Pageable storage)上に置かれ、すべてのルーティング先ExpertがCPU上で実行されます。GPU上には非Expertレイヤーだけを常駐させ、CPU-GPU間はアクティベーションデータ、ルーティングのメタデータ、集計された出力データ(モデルのパラメータに比べて極めて軽量なデータ)のみをやり取りする設計をとることで、最悪の環境であっても推論サービス自体を確実に実行・デプロイできる互換性を担保しています。
評価
実験セットアップ(Experimental Setup)
評価は、MoEモデルの全エキスパートプールがGPUメモリ(VRAM)容量を超える厳しいエッジ環境を想定して設計されています。
合計6つのディスクリートGPU搭載システムが使用されました。これらは、現在のエッジハードウェアにおけるPCIe帯域およびホストメモリ帯域の多様性を網羅しています。

評価対象モデル
- DeepSeek-V4-Flash(284Bパラメータ、1トークンあたり13Bアクティブ)
- ネイティブのMXFP4量子化エキスパート版を使用
- Qwen3.6-35B-A3B(BF16精度)
- 8GBメモリの4060 laptopのみ公式のNVFP4量子化版を使用。
- GLM-5.2(753Bパラメータ、40Bアクティブ、NVFP4量子化エキスパート、容量433GB)
- フロンティア級モデルの検証用としてPRO 6000環境で評価。
評価タスク/ワークロード(Workloads)
エージェントの実環境をシミュレートする4つのシナリオを設定しています。
- W1: Math reasoning (AIME)
- 長文の思考プロセス(Chain-of-Thought)を伴う、シングルターンのデコード特化型タスク。
- W2: Coding agent (OpenCode)
- SWE-benchの課題を解決する、実際のツール実行を伴う3ターンのコーディングエージェントタスク。
- W3: Coding agent, native protocol (Claude Code)
- 同時リクエストやサブエージェントを生成し、コンテキストが56k〜65kトークンまで成長する高負荷タスク5。
- W4: Email/Calendar agent (OpenClaw)
- メールボックスを操作する13ターンの会話。初期コンテキストとして約24.5kトークンの床面を維持した状態で実行5。
比較対象(Baselines)
- llama.cpp、Ollama、KTransformers、および MoE-Infinity。
主要なエンドツーエンド評価結果

RTX 5090において、Qwen3.6-35BとDeepSeek-V4-Flashの2つのモデル、4つのワークロードすべてで他エンジンと比較評価されています。
- ① デコード・スループット(Figure 3 上段)
- スループットの圧倒的優位性: FreeTokenは、Qwen3.6で 77〜83 tok/s、DeepSeek-V4-Flashで 22〜25 tok/s のデコードスループットを維持しました。これは、最も強力な競合システム(ベースライン)と比較して、それぞれ 1.8〜2.3倍(Qwen3.6)、1.5〜1.9倍(DeepSeek-V4-Flash) の性能向上に相当します。
- 安定性
- シングルターンのW1から、コンテキストが極めて長いW2〜W4に移っても、FreeTokenの速度低下は 12%以内 に抑えられています。これに対し、競合のKTransformersはW2時点でW1から31%も速度が低下しています。
- ② ファーストトークン遅延:TTFT(Figure 3 下段)
- 平均TTFTの削減
- 複数ターンのワークロード(W2〜W4)のほぼすべて(6つのうち5つの評価枠)において、FreeTokenが最も低い平均TTFTを記録しました。
- テール遅延(ワーストケース)の回避
- 最も顕著な差はテール(最大)遅延に現れました。他エンジンはどれも、コンテキストの肥大化に伴う再計算などの影響で、どこかのタスクで150秒を超える致命的なストールを発生させています(llama.cpp:232秒、Ollama:179秒、KTransformers:946秒)。
- これに対し、FreeTokenはすべての評価枠において最悪のターンでも44秒未満に抑えており、リアルタイムエージェントがタイムアウトで切断される限界線を回避しています。
要素分析と複数ハードウェアでの検証(Breakdown & Cross-Hardware)
FreeTokenの優れた性能がどの個別手法によって達成されているかを分析しています。

- プリフィルの非同期オーバーラップ効果(Figure 4a)
- プロンプトの長さ(1K〜16Kトークン)に対するプリフィルの処理速度(TPS)をプロットしています。
- 結果: FreeTokenの「フルレイヤー・ダブルバッファリング」を有効にすると、PCIe 5.0 x16リンク(実測52.7GB/s)の物理限界にほぼ張り付く速度(1.19〜1.22秒で64.4GBのエキスパートプールを1回ストリーミング)で処理できます10。これにより計算時間が転送の背後に隠蔽され、16Kプロンプト時には 約6.7k tok/s に達します。
- Ablation (無効化時): このオーバーラップ機能をオフにすると、4Kで19%、8Kで25%、16Kでは26%のスループット低下が発生し、転送待ちによるGPUのアイドル時間が顕在化します。
- エキスパートキャッシュのヒット率と局所性(Figure 4b)
- 横軸に「キャッシュサイズ(エキスパートプールに対する%)」、縦軸に「デコード時のキャッシュミス率(%)」をとったグラフです。
- Qwen3.6-35BとDeepSeek-V4-Flashのそれぞれについて、ルーティング履歴を再生してシミュレーションしています。
- 結果: RTX 5090の割り当て容量(Qwen3.6で全体の37%、DSV4-Flashで11%)において、FreeTokenの「グローバル共有LRU」はミス率を16%(Qwen3.6)、39%(DSV4-Flash)に抑制します。これに対し、あらかじめホットなエキスパートを固定するKTransformers(Prefill Update)は41%/59%、静的分割のllama.cpp(Static)は62%/89%と、FreeTokenの動的キャッシュが大幅に優れていることが実証されました。
複数ハードウェア上でのデコード性能(Figure 5)
5つの異なる一般向けGPU環境(RTX 4060 laptop、RTX 3090、RTX 4090、RTX 5090、RTX 5090 desktop)におけるQwen3.6-35B(W2コーディングタスク)のデコードTPS、および最右列にRTX PRO 6000における巨大なGLM-5.2(753B)のデコードTPSを比較しています。

- 結果
- FreeTokenは、最強のベースラインシステムに対して RTX 3090/4090で1.3倍、5090サーバーで1.9倍、5090デスクトップで2.1倍、4060ノートPCで1.8倍 のリードを保ち、すべてのマシンで最速を達成しました。
- 特に、8GBメモリのRTX 4060 Laptop環境において、35Bモデル(NVFP4)を 39.3 tok/s という対話的な超高速で動作させており、これはRTX 4090デスクトップの実行速度の92%に達しています。
- また、5090のサーバー(マルチチャネルDRAM)から5090の一般デスクトップ(デュアルチャネルDRAM)にホストを移した際、CPU帯域の低下によりllama.cppが20%も減速したのに対し、FreeTokenは「 ポリシー」により、わずか4%の減速に留めました。
- フロンティア実証である 753BのGLM-5.2(RTX PRO 6000)においても、14.9 tok/s を記録し、llama.cpp(7.3 tok/s)に対して 2.0倍の速度向上を達成しています4。
LayerX社内GPU環境で軽く実験
FreeToken を使い、48GB の GPU 1 枚で DeepSeek-V4-Flash-0731(167GB)のモデルをmax_token=256, reasoning = lowで
- TTFT: 4,862 ms
- decode: 23.34 tok/s
環境
| ホスト | hg-srv-gpu-01 / Ubuntu 24.04.4 / kernel 6.8.0-110 |
| GPU | RTX 6000 Ada × 4(48GB, sm_89, PCIe 4.0 x16) |
| CPU | Xeon Gold 6530 × 2 ソケット = 物理 64 コア(HT 無効)、NUMA 4 ノード |
| RAM | 503 GiB(DDR5-4800 × 16 枚、16ch 全実装) |
| NVIDIA driver | 565.57.01 |
結果
構成別の実測(すべて 1GPU / 同一条件)
| 構成 | decode | TTFT | MoE キャッシュ |
|---|---|---|---|
| 64 threads(初期設定) | 13.09 tok/s | 5,900 ms | 30.3 GiB (22.1%) |
| 32 threads | 22.04 tok/s | 5,878 ms | 30.3 GiB (22.1%) |
| 32 threads + profile 取り直し | 22.50 tok/s | 5,906 ms | 30.3 GiB (22.1%) |
| 32 threads / | 18.94 tok/s | 5,888 ms | 30.3 GiB (22.1%) |
| 32 threads / | 15.98 tok/s | 5,874 ms | 6.4 GiB (4.7%) |
| (参考)32 threads 別インスタンス | 21.32 tok/s | 5,884 ms | 30.3 GiB (22.1%) |
| 32 threads + | 23.34 tok/s | 4,862 ms | 30.3 GiB (22.1%) |

も効いた( TTFT と decode の両方に効く)。
- prefill の prefetch 時に、キャッシュ常駐の expert は device 側でコピーし、miss だけを PCIe で流す(, CUDA ≥ 13.0)。
律速は expert の常駐率
expert プール 153.9 GB のうち、VRAM に載るのは 30.3 GiB = 22.1% だけです。1 トークンあたり 43 層 × 6 expert × 12.75 MB = 約 3.3 GB の expert に触ります。

なぜ CPU で計算するのが速いのか
バッチサイズ 1 の expert FFN は計算ではなくメモリ読み出しが律速です。12.75 MB の重みを読んで、やるのはベクトル 1 本との積だけです。
| 経路 | 12.75 MB あたり |
|---|---|
| PCIe で GPU に送る(25 GB/s) | 0.51 ms |
| CPU が自分の RAM から読む(60.6 GB/s) | 0.20 ms |

同じ expert 1 個を処理する 2 通り。 線の太さが PCIe を渡るデータ量。バッチ 1 の GEMV は計算がごく軽いため、重みを送るより手元で読んで結果だけ返す方が速い。CPU のローカル読み 60.6 GB/s が PCIe 25.0 GB/s を上回ることが、 が選ばれる根拠。
TTFT も同じ律速

30 語から 600 語まで、トークン数が 20 倍違うのに TTFT はほぼ横ばいです。これが expert 飽和の直接的な証拠になります。
prefill では各トークンが 256 expert のうち 6 個へバラバラにルーティングされるため、約 50 トークンで層あたりほぼ全 expert に触ります。そこから先は触る expert が増えないので、転送量が頭打ちになります。2,500 語を超えて初めて、per-token の計算量が支配的になります。
つまり TTFT の律速はトークン数ではなく、154GB のプールを舐める固定コストです。154GB ÷ 85.6 GB/s ≒ 1.8 秒が理論下限で、43 層ぶんの不完全な重ね合わせを考えれば 5 秒台は妥当です。

感想
[pon] MoE最適化の1手法として面白かった。もうちょい他にもモデルは試すと良いかも
