Kimi K3 の見出しになる数字は 2.8 兆パラメータだ。そしてこれは、レポートの中で最も面白くない数字でもある。
面白いのは、このアーキテクチャが規模とは無関係な問いを軸に組み立てられている点だ。情報はどこで流れなくなっているのか? 答えは三つに分かれる——系列に沿って、深さに沿って、幅に沿って。そしてそれぞれに専用の仕組みが用意されている。
同じ計算量で、scaling 効率はおよそ Kimi K2 の 2.5 倍。この数値はチーム自身がフィットさせた scaling law 曲線によるもので、第三者による再現ではない。だから彼らの主張として読むべきだ。ただし、その背後にある仕組みは反論できるほど具体的で、そこがこのレポートに時間を割く価値のある理由になっている。
本稿は Kimi K3 テクニカルレポート(Moonshot AI)のアーキテクチャ章を精読したものだ。以前長期タスク Agent の設計について書いたが、今回はもう一段下のレイヤーの話になる。
一つの数字ではなく、三つの方向
Transformer の各層は、情報を三つの方向に混ぜている。token をまたいで、90 万番目の位置が 1 番目に影響できるように。深さをまたいで、90 層目が 3 層目の気づきを使えるように。チャネルをまたいで、特徴を組み替えられるように。
規模を伸ばす仕事の多くは、この三つを一度に大きくする。K3 はそれらを切り離し、それぞれに別の仕組みを与えた。
- 系列——ハイブリッド注意:Kimi Delta Attention 3 層に対して Gated MLA を 1 層。
- 深さ——Attention Residuals:各層が一つの累積状態を引き継ぐのではなく、先行するすべての層の出力に対して注意を向ける。
- 幅——Stable LatentMoE:896 個のルーテッド専門家のうち、token あたり 16 個を起こす。
隠れ次元はまったく変わっていない。K2 で 7,168、K3 でも 7,168。何が大きくなったにせよ、それは層の幅ではない。
系列:四分の三の層が全文を読むのをやめた
標準的な注意機構は、新しい token ごとに前方全体を読み直す。100 万 token になると、破綻するのはこの請求書だ。
K3 はこの仕事を分担させる。KDA 3 層が固定サイズの状態を保持し——原文を読み直すというより、メモを取るのに近い——その後ろに完全なグローバル注意を行う Gated MLA が 1 層つく。このパターンが繰り返され、最後にもう一層 MLA が追加されて、最終層は常に全体を見る。93 層の内訳は KDA 69 層、MLA 24 層。
「固定サイズ」であることが要点だ。状態は系列長とともに増えないので、破裂しない。同時に損失があるので、メモが落としたものを取り戻すために 4 層ごとに全注意層が現れる。
そこに二次的な効果が生じる。この再帰状態は減衰を伴う——近い token ほど自然に濃く残る——ので、位置情報がついでに手に入る。結果として K3 はグローバル注意層に位置エンコーディングを一切与えていない。RoPE もないので、再スケールすべきものも存在しない。
つまり 100 万 token への拡張に、位置エンコーディングの手術は一切不要だった。文脈長拡張のためにこの分野が積み上げてきた補間の技法は、ここではどれも出番がない。補間する対象がそもそもないからだ。
GPU のコードパスを一本消した「下界」
ここがレポートで一番好きな箇所で、しかも読み飛ばせるくらい小さい。
再帰状態は進みながら忘れていく。これをチャンク単位で効率よく計算するには累積減衰で割る必要があり、累積減衰は 1 未満の数の積だ。放っておけば、限りなく 0 に近い数で割ることになる。
前世代はこれを、各チャンクを 16 token のタイルに分割し、対数空間で扱うことで回避した。動きはしたが、対角線上のタイルだけは位置ペアごとに評価する必要が残った——遅く、特別扱いで、Tensor Core を使えないパスだ。
K3 の対処はパラメータ化の一行だけ。対数減衰に下界を設ける。1 ステップで忘れられるのは保持量の 0.67% までで、それ以上は忘れられない。
そのまま辿ってみる。この下界のもとでは、16 token のタイル上の累積対数減衰は (−80, 0) に収まる。したがって逆数は e80 ≈ 5.5 × 1034 未満となり、BF16 の約 3.4 × 1038 の範囲に余裕で収まる。何もオーバーフローしない。だから対角タイルも他と同じ密行列積で計算できる。
特別なパスは最適化されたのではない。消えたのだ。
因果を逆向きに読むともっと面白い。ハードウェアのダイナミックレンジが許容区間を決め、区間が定数を決め、定数が「活性化関数は下に有界でなければならない」を決めた。数学が数値精度を選んだのではなく、数値精度が数学を選んでいる。
深さ:リレー競走からグループチャットへ
93 層の深さでは、標準的な残差の流れはリレー競走になる。50 層目が受け取るのは、49 層目から渡された一つの累積状態だけだ。1 層目から 48 層目までが個別に気づいたことは、その状態に足し込まれていて、もう取り出せない。
論文の見立ては、これは RNN が時間方向に抱えるボトルネックと同じもの、というものだ——そしてそちらは注意機構によってすでに解決済みである。Attention Residuals は同じ解法を深さ方向に適用する。各層が学習可能な擬似 query を持ち、先行するすべての層の出力に注意を向けて、何を読むかを自分で選ぶ。
文字どおりやると深さについて二次のコストがかかり、さらに悪いことに全層の出力をメモリ上に保持し、パイプライン並列ではステージ間で転送し続ける必要がある。そこで K3 はブロック版を使う。93 層を 12 層ずつのグループに分け、グループ内では和を取り、グループ間で全注意を行う。オーバーヘッドは層単位からグループ単位に下がり、推論時の状態も有界に保たれる。
幅:896 人の専門家、起きているのは 16 人
Mixture-of-experts は大きなプールを抱え、token ごとに数人だけ起こす。K2 は 384 のうち 8。K3 は 896 のうち 16——スパース度 56 だ。
プールをここまで広げると二つのものが壊れる。レポートはその両方について異例なほど率直だ。
通信。 従来の MoE では選ばれた専門家が全幅の token を受け取るので、通信量は選ぶ数に比例して増える。LatentMoE はこの二つを切り離す。ルーテッド専門家はモデル幅の半分の潜在空間で働き、全幅の共有専門家 2 名がすべての token に必要な処理を担う。プールを広げても、回線コストはついてこない。
安定性。 このスパース度ではルーテッド分岐がほぼ 4 連続の行列積の鎖になり、活性値が発散する。対処は二つ。専門家の集約と上方投影の間に RMSNorm を挟むこと、そして SiTU-GLU という新しい活性化関数で、SwiGLU の二つの因子それぞれにスケール付き tanh の上限をかけ、低精度でどちらも暴走しないようにすること。
負荷分散。 三つ目こそ盗む価値がある。約 900 人の専門家の負荷を均すには、毎ステップ専門家ごとのバイアスを調整する必要がある。標準手法は誤差の向きに固定幅で動かすだけなので、振動するか追随が遅れるかのどちらかになる。K3 は代わりに直接解く。top-k ではなく top-(k+1) を走らせると、余分に出てきた要素がそのままその token の参入閾値になる。この閾値を握れば、あるバイアスのもとで専門家が受け取る負荷は単調になるので、目標負荷を達成するバイアスはマージンの分位点にすぎない。順伝播 1 回で済み、調整すべきステップ幅もない。
実スケールではこの分位点が全 rank にまたがる数百万個の値に及ぶため、ヒストグラムで推定する。各 rank が自分の bin を数え、all-reduce 一回で合算し、プールされた計数から分位点を読む。計数は加算できるので、token がどう分割されていても推定値はバッチ全体の分位点に一致する。コストは専門家あたり数百の bin だけだ。
請求書はサービング側に回ってくる
ここまでのどれも無料ではない。レポートの誠実な部分はインフラ章で、コストはそこに落ちる。
固定サイズの再帰状態は保存も転送も安いが、更新は逐次的で、しかも単純に足し合わせられない。この二つの性質がそれぞれ仕事を生む。
- 系列を複数デバイスに分割する。 通常の線形注意なら各デバイスがゼロから局所状態を計算し、足し合わせればよい。だが KDA は token 依存の遷移を入力状態に作用させるので、和では答えが合わない。解法は各区間を「累積遷移」と「ゼロ始まりの状態」——合成可能な二つの量——に分解し、prefix scan と固定サイズの all-gather 一回で各デバイスの入力状態を復元することだ。
- リクエストをまたいで prefix を再利用する。 キャッシュの半分は token 単位のページ、もう半分はリクエストごとに一つの固定状態で、ヒットするには両方が同じ境界で復元できなければならない。彼らの答えは粒度の分離だ。ハッシュは 512 token 単位、確保は 1024〜6144 単位、再帰状態のチェックポイントはハッシュ端点の疎な部分集合にだけ置く。
- 投機的デコーディング。 状態はその場で更新されるので、ドラフトが棄却されても巻き戻せない。そこで状態そのものよりずっと小さい「投影後の入力」だけをキャッシュし、オンチップで再構築する。
三つに共通するパターンは、あの減衰の下界と同じものを逆向きに走らせたものだ。アーキテクチャが表現を選び、その表現がシステム側の仕事を規定した。
レポートが静かに手放した業界の慣習
K3 はネイティブにマルチモーダルで、その視覚エンコーダは next-token prediction によってゼロから訓練されている。SigLIP による初期化も対比的事前学習もない——それが標準レシピであり、同チームの前世代モデルもそうしていたにもかかわらず。
挙げられている理由は品質ではなく安定性だ。対比的に初期化したエンコーダは同時最適化の際に勾配ノルムが一貫して高く、スパイクも頻発した。一方ゼロから訓練したものは終始平坦だった。視覚評価の成績は互角。
互角だったからこそ、この発見は勝っていた場合より鋭い。ゼロからの方が良ければ「より良いレシピ」で済む。互角だった——つまり主張は、このスケールでは業界が必須と見なしている工程が実は任意だ、ということになる。
これらのモデル上で Agent を動かす立場から見ると
我々はマルチ Agent のデスクトップクライアントを作っている。だから見ているのはリーダーボードの首位ではなく、長期タスクを回し続けて採算が合うかどうかだ。
効いてくる数字はコンテキスト窓の大きさではなく、100 万 token をサービングするのにいくらかかるかだ。層の四分の三が固定サイズの状態を持つので、会話とともに増えるキャッシュは同じ深さの全注意モデルの四分の一で済む。BrowseComp でレポートが示すのは 91.2%、1 タスクあたり約 2 ドル——最も近い商用スコアのおよそ半分のコストで、最大推論設定の Claude 系より一桁安い。
数百回のツール呼び出しを回す Agent にとって、この比率はそのタスクに着手する価値があるかどうかを直接決める。かつては純粋な研究に見えたアーキテクチャの仕事が、いまや「その長い実行が経済的に正気か」に直結している。
ここから持ち帰るもの
二つある。どちらも転用できる。
一つ目は問いの立て方。情報はどこで流れなくなっているのか? は、あとどれだけ大きくできるか? とはまったく違う仕事を生む。しかも分解可能だからこそ、三つの仕組みを個別に開発し、個別に測定できた。
二つ目は減衰の下界。表現力をほとんど犠牲にしない制約が、カーネルから特別扱いのパスを丸ごと取り除いた。速いパスではなく、パスなしだ。この取引の機会は実際に取られるよりずっと頻繁に存在していて、そして数学とハードウェアを同時に握っている人にしか見えない。
レポートも重みも GitHub で公開されている。アーキテクチャ章は 8 ページ、じっくり読む価値がある。
