Kimi Linearで100万トークンを обычная GPUに収める方法
LLMで長いテキストを処理すると、なぜこんなにコストがかかるのだろうと思ったことはありますか?それはすべてKV-キャッシュのせいです。巨大なドキュメントをモデルに投入すると、その「メモリ」(キャッシュ)は異常なサイズに膨れ上がり、VRAMを食い尽くします。MoonshotAIの人々は、これに手を打つ時が来たと判断し、Kimi Linearをリリースしました。これは単なる「改善された」モデルではありません。サーバーファームを購入せずに100万トークンのコンテキストで作業できるように、アテンションアーキテクチャを再考するための試みです。
標準アテンションの問題点
標準のFull Attentionメカニズム(古典的なTransformerのもの)は、貪欲な獣です。その複雑さはテキスト長に対して二乗的に増加します。コンテキストを2倍に大きくしたい?リソースを4倍にする準備をしてください。Flash AttentionやDeepSeekのMLA(Multi-head Latent Attention)のような一般的なソリューションは助けにはなりますが、真に長いシーケンスに関しては根本的な解決策にはなりません。
Kimi Linearは異なるアプローチを取ります。開発者はTransformerとRNN的な構造の強みを組み合わせたハイブリッドメソッドを使用しました。
Kimi Delta Attentionの仕組み
このプロジェクトのコアはKimi Delta Attention(KDA)メカニズムです。ハードコアな数学には触れずに、これはGated DeltaNetの進化版です。主なコツはスマートな「忘れる」ことです。
標準的なRNNでは、メモリは固定のstateサイズに制約されます。KDAは、この圧縮されたstateに保持すべき過去の情報と破棄できる情報を決定するゲーティングメカニズムを採用しています。これにより、従来の線形モデルが「ドリフト」して物語の糸を見失い始めるような広大な距離でも、モデルが高い精度を維持できます。
これがもたらす実践的な効果
開発者は、KDAとMLA(Global Attention)を3:1の比率でブレンドしたアーキテクチャを導入しました。この組み合わせにより、いくつかの印象的な結果が達成されました:
- メモリ節約。 KV-キャッシュの要件が75%削減されました。これはモデルを自有のハードウェアにデプロイする際に非常に重要です。
- 生成速度。 100万トークンのコンテキストでは、標準的なアーキテクチャと比較してトークンスループットが最大6倍向上します。
- 正直なコンテキスト。 RULERベンチマークテストでは、モデルは128k(最大1M)トークン全体で情報を実際に「見て」使用していることが示されています。
以下のグラフは、コンテキスト長が増加するにつれてKimi Linear(青い線)が速度でどのように先行するかを示しています:
試してみる
MoonshotAIは惜しげもなくHugging Faceでモデル weights をリリースしました。ベースバージョンと480億パラメータのInstructバリアントがあります。Mixture-of-Experts(MoE)アーキテクチャにより、計算中にアクティブになるのは30億パラメータのみで、クラスとしては驚くほど軽量です。
始めるには、最新版のPyTorchとfla-coreライブラリが必要です。コードは、Transformerで作業したことがある人にとってはかなり標準的なものです:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "moonshotai/Kimi-Linear-48B-A3B-Instruct"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto",
trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
# Обычный чат-шаблон
messages = [
{"role": "system", "content": "You are a helpful assistant provided by Moonshot-AI."},
{"role": "user", "content": "Расскажи, в чем преимущество линейного внимания перед обычным?"}
]
input_ids = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device)
generated_ids = model.generate(inputs=input_ids, max_new_tokens=500)
response = tokenizer.batch_decode(generated_ids)[0]
print(response)
プロダクションにデプロイする必要がある場合、モデルはvLLMとうまく連携します。1つのターミナルコマンドでOpenAI互換APIを起動し、大規模なmax-model-lenを指定できます。
ダウンロードする価値はあるか
このプロジェクトは、RAGシステムの構築や長いログやドキュメントの分析を行う人々に有望に見えます。
ぜひ注目すべき人:
- 長いコンテキストで作業する際にGPUのメモリ上限に達した人。
- リアルタイムで応答速度(TPOT)を気にする開発者。
- 標準的なTransformerの代替を探している研究者。
欠点としては、アーキテクチャが比較的新しいものであり、サードパーティツール(量子化や特定のオプティマイザーなど)でのサポートがすぐに利用できない可能性があります。しかし、FLAライブラリに готовые KDAカーネルがあることは心強いです。
Kimi Linearは、アルゴリズムの最適化が単に より多くのテラフロップを積み重ねるよりも大きな利益をもたらすことができる良い例です。ライブラリ全体や大規模なコードベースを1パスで「消化」する必要がある場合—これは現在利用可能な最も興味深いツールの1つです。
関連プロジェクト