Thinking Machines が Hugging Face で「Inkling」発表
AI 研究機関 Thinking Machines が Hugging Face Blog を通じて、新しい言語モデル「Inkling」の導入を発表した。
キーポイント
新モデル発表
Thinking Machines によって「Inkling」と名付けられた新たな言語モデルが正式に登場した。
発表プラットフォーム
今回の導入情報は、AI 開発者コミュニティのハブである Hugging Face Blog を介して公開された。
重要な引用
新しい言語モデル「Inkling」の導入を発表した
影響分析・編集コメントを表示
影響分析
このニュースは、新しい研究機関が LLM 市場に参入したことを示す重要な指標ですが、具体的な技術的優位性や実用ケースの詳細が不明であるため、業界全体への即時的なインパクトは限定的です。今後のモデル詳細発表やベンチマーク結果次第で評価が大きく変動する可能性があります。
編集コメント
「Inkling」という名称のモデルは、AI 業界の急速な進化に伴う新たな試みの一つとして注目されます。詳細な性能やアーキテクチャが明らかになるまで、その実力については慎重に見守る必要があります。
Inkling は、画像・テキスト・音声の 3 つの入力をネイティブに受け付ける大規模(1 トリオンパラメータ!)なオープンモデルです。
要約すると、Thinking Machines 社が Hugging Face で公開した「Inkling」は、画像・音声・テキストすべてのモダリティを理解できる巨大なマルチモーダル LLM です。エージェント機能も備え、100 万トークンという超長文脈に対応可能。BF16 フル精度版に加え、よく調整された NVFP4 量子化版も用意されており、推論速度を向上させるための予測 MTP レイヤーも搭載されています。また、transformers、SGLang、llama.cpp への Day-0 サポートも提供されています。
Inkling の特徴とは?
Inkling は、画像・テキスト・音声の入力をネイティブに受け付けながら、約 1 トリオンパラメータと 100 万トークンのコンテキストウィンドウを備えた、世界初の大型オープンモデルです。学習には、テキスト・画像・音声・動画を合わせた計 45 トリオントークンが使用されました。
このモデルは、音声・画像・テキスト間での推論に特化しており、ファインチューニングによるドメイン適応も想定されています。私たちはデモの構築やアーキテクチャの探求を通じてこのモデルを改良してきましたが、新しいマルチモーダル推論アプリの構築に適していると確信しています。
全体像とアーキテクチャ
Inkling は、総パラメータ数 9750 億、アクティブパラメータ数 410 億のデコーダー専用マルチモーダル Mixture-of-Experts モデルです。複雑な要素が多く含まれているため、それぞれの部分を詳しく解説しましょう。
- デコーダー専用: これは、最新の LLM で一般的に見られる因果的自己回帰生成をサポートするアーキテクチャであることを意味します。
- マルチモーダル: このモデルは、テキスト、音声、画像をすべて入力可能です。
- エキスパートの混合 (MoE): 各層内のフィードフォワードネットワークはスパース構造になっており、任意の時点でアクティブになるパラメータが 410 億個だけであるため、推論速度が向上しています。後ほど詳しく説明しますが、このモデルには合計 256 のエキスパートが用意されています。
以下にアーキテクチャの概要を示します。
相対アテンション: トランスフォーマーモデルに位置情報を付与する一般的な手法である RoPE を採用せず、インクリングは相対アテンションを用いて位置情報を符号化しています。各アテンション層では、位置情報はアテンションロジット内で直接学習されます。キー・クエリ・バリューに加え、トークンごと・ヘッドごとの相対特徴 R を生成する第 4 の射影行列が存在します。この射影テンソルは、キーベクトルとクエリベクトルの距離情報を用いて調整され、アテンションモジュールへ伝播されます。
ハイブリッドアテンション: デコーダー層は、グローバルアテンション(全コンテキスト長を一度に参照)とスライディングウィンドウアテンション(固定されたコンテキストウィンドウをスライドさせながら参照)を交互に配置しています。このアーキテクチャでは、5 層のスライディングウィンドウアテンションに対して 1 層のグローバルアテンションという比率で構成されています。このハイブリッドなアテンションスキームにより計算効率が向上します。最終層はグローバルアテンションを採用し、特徴量の豊かな表現を構築しています。
短縮畳み込み(Short Convolution): このモデルは、隠れ状態に対して特徴的な 1 次元の短縮畳み込み、すなわち SConv を採用しています。SConv は現在のトークンと、直前の W-1 個の隠れ状態を読み取ります。ここで W はスライディングウィンドウのサイズを意味します。この設計の狙いは、SConv が局所的な注意機構(ローカルアテンション)を担うことで、アテンション層や MoE モジュールが局所的な表現に縛られるのを防ぎ、それぞれの役割を明確に分けることにあります。
共有エキスパートを持つ MoE: Inkling では、ルーターがルーティング対象のエキスパートと共有エキスパートの両方にスコアを付与します。トップ k 選択は、6 つのエキスパートに加え、常に活性化する 2 つの共有エキスパートを含めた合計 8 個に対して行われます。
ビジョン理解: このモデルには、単純な階層型 MLP パッチファイアが含まれています。これは複数の線形層で構成され、各層が順次ピクセルをマージしていき、最終層でパッチごとに 1 つの埋め込みベクトルを生成します。
オーディオ理解: 本アーキテクチャでは離散化されたメルスペクトログラムを採用しています。100 ミリ秒ごとの音声チャンクはまずメルスケールに変換され、その後、正確なメルスペクトログラムのビンに分類されます。
マルチモーダル・タワーは、各モダリティに個別のエンコーダーを採用する他のモデルとは異なり、比較的シンプルなモジュールです。画像パッチは画像埋め込みタワーを通過し、音声チャンクは音声埋め込みタワーを通過することで、それぞれのメディア埋め込みが生成されます。動画処理においては、画像入力には追加で時間次元が含まれます。この機能は後続のファインチューニングに有用になると期待していますが、現状ではそのままの状態で動画性能を評価していません。
タワーはパッチグリッドを折りたたみ、隣接するトークンの小さなローカルブロックをチャネル次元に積み重ねてから hMLP を通します。音声波形はメルスケールに変換され、その後離散化されたメルビンに分類されます。これらのメルビンの値は音声埋め込みタワーで埋め込まれ、最終的な音声入力を構築するために埋め込みベクトルが加算されます。
Inference Support
Inkling は Day-0 のトランスフォーマーに対応しており、SGLang や vLLM といった主要な推論エンジンでもサポートされています。
このモデルは非常に巨大です。bf16 チェックポイントには VRAM 2TB が必要ですが、nvfp4 バージョンでは 600GB で済みます。Inference Providers のようなサーバーレス推論ルーターを通じてモデルを試すか、llama.cpp を用いて ggml 量子化版をローカル環境でデプロイすることも可能です。
Transformers
トランスフォーマーを直接推論する最も簡単な方法は、any-to-any パイプラインを利用することです。16 ビット版の「thinkingmachines/Inkling」モデルは Hopper 以降の GPU で動作し、量子化された NVFP4 チェックポイントである「thinkingmachines/Inkling-NVFP4」は Blackwell 搭載の NVIDIA GPU で利用できます。なお、推論には最新の transformers ライブラリが必要です(本日よりバージョン 5.14.0 がリリースされていますので、pip install -U transformers で更新してください)。
from transformers import pipeline
model_id = "thinkingmachines/Inkling"
model_id = "thinkingmachines/Inkling-NVFP4"
pipe = pipeline("any-to-any", model=model_id)
パイプラインを初期化したら、以下のようにプロンプトを渡します。
image_url = (
"https://huggingface.co/datasets/merve/vl-test-suite/"
"resolve/main/pills.jpg"
)
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": image_url,
},
{
"type": "text",
"text": "このサプリメントの成分同士は相互作用しますか?",
},
],
},
]
output = pipe(
messages,
max_new_tokens=2000,
return_full_text=False,
reasoning_effort="medium",
)
output[0]["generated_text"]
さらに低レベルの機能として、Auto クラスを利用できます。推論時には、モデルには AutoModelForMultimodalLM クラスを、プロセッサには AutoProcessor クラスを使用します。
異なる推論タスクでは、トークナイザーに reasoning_effort 引数を指定できます。現在利用可能な推論レベルは "none"(なし)、"minimal"(最小)、"low"(低)、"medium"(中)、"high"(高)、"xhigh"(超高)、そして "max"(最大)の 7 つです。
from transformers import AutoModelForMultimodalLM, AutoProcessor
model_id = "thinkingmachines/Inkling"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForMultimodalLM.from_pretrained(
model_id,
dtype="auto",
device_map="auto",
)
messages = [
{"role": "system", "content": "You should only answer with a number."},
{"role": "user", "content": "What is 17 * 23?"},
]
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
reasoning_effort="high",
).to(model.device)
output = model.generate(**inputs, max_new_tokens=2000)
generated_tokens = output[0][inputs["input_ids"].shape[1] :]
print(processor.decode(generated_tokens, skip_special_tokens=False))マルチモーダル推論においても、同じクラスを使用できます。モデルカードには、各異なるモダリティに対応したサンプルコードを掲載しています。
テキストと画像を組み合わせた推論
from transformers import AutoModelForMultimodalLM, AutoProcessormodel_id = "thinkingmachines/Inkling"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForMultimodalLM.from_pretrained(
model_id,
dtype="auto",
device_map="auto",
)
image_url = (
"https://huggingface.co/datasets/merve/vl-test-suite/"
"resolve/main/pills.jpg"
)
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": image_url,
},
{
"type": "text",
"text": "Do any of the components in this supplement interact?",
},
],
},
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
reasoning_effort="medium",
return_dict=True,
return_tensors="pt",
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=2000)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
processor.parse_response(response)
Inkling also takes in audio input. Below is an example inference snippet, which still uses the same AutoModelForMultimodalLM class.
Text with audio inference
from transformers import AutoModelForMultimodalLM, AutoProcessor
model_id = "thinkingmachines/Inkling"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForMultimodalLM.from_pretrained(
model_id,
dtype="auto",
device_map="auto",
)
audio_url = (
"https://huggingface.co/datasets/merve/vl-test-suite/"
"resolve/main/example_audio.mp3"
)
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "Transcribe the following speech to text."},
{
"type": "audio",
"audio": audio_url,
},
],
},
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
return_dict=True,
return_tensors="pt",
add_generation_prompt=True,
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=512)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
processor.parse_response(response)
複数のノードからなるクラスターでより現実的な並列展開を行う場合は、以下の Slurm セクションを参照してください。
SGLang
SGLang は、リリース時点で Inkling に対応する最も高速なデプロイメントフレームワークの一つです。これは独自の実装モデルを含んでいるためです。以下の起動コマンドは、モデルを 8 枚の GPU にシャードし、ポート 30000 で OpenAI と互換性のある API を提供します。
pip install sglang
python3 -m sglang.launch_server \
--model-path thinkingmachine/Inkling \
--tp-size 8 \
--served-model-name inkling \
--host 0.0.0.0 \
--port 30000
--tp-size は利用可能な GPU の数に合わせて調整してください。KV キャッシュに余裕を持たせる必要がある場合は、--mem-fraction-static(例:0.85)を追加します。
vLLM は本番環境での推論サービスに強く推奨されます。単一の vllm serve コマンドを実行するだけで、モデルの重みを Hugging Face Hub からダウンロードし、テンソル並列処理を使って GPU 間でモデルを分割(シャード)した上で、OpenAI と互換性のあるサーバーがポート 8000 で起動します。
pip install vllm
vllm serve thinkingmachine/Inkling \
--tensor-parallel-size 8 \
--served-model-name inkling
実際の運用では、複数のノードが必要になるため、SLURM などの分散管理ツール(後述)の併用が一般的です。重要なパラメータとして、--tensor-parallel-size は利用する GPU の数に合わせて設定し、KV キャッシュのメモリ制限に達した場合は --max-model-len でコンテキストウィンドウの長さを制限してください。
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "inkling",
"messages": [{"role": "user", "content": "Hello!"}]
}'
Hugging Face の推論プロバイダーを利用したリモート推論
このモデルは、Hugging Face を介して複数の推論プロバイダーで利用可能です。消費方法のコードスニペット一覧は こちら で確認できます。以下に、OpenAI クライアントを利用した具体的な使用方法を示します。
import os
from openai import OpenAI
client = OpenAI(
base_url="https://router.huggingface.co/v1",
api_key=os.environ["HF_TOKEN"],
)
completion = client.chat.completions.create(
model="thinkingmachines/Inkling:auto",
messages=[
{
"role": "user",
"content": "What is the capital of France?",
},
],
)
print(completion.choices[0].message)
「:auto」サフィックスを使用すると、設定で指定したプロバイダーが自動的に選択されます。また、「cheapest」(最安)や「:fastest」(最速)を指定することも可能です。今回のリリースでは、誰でも 2 時間分の推論コストを負担します。
※音声機能のサポートは現在開発中で、近日中に追加される予定です。
llama.cpp と Unsloth を使ったローカル推論
限られたハードウェア環境でも、llama.cpp を使ってモデルの量子化版を実行できます。Unsloth によってこのモデルは 1 ビット精度まで量子化されており、元のモデルと比較して VRAM の消費量を 95% 削減しています。
llama serve -hf unsloth/inkling-GGUF:UD-IQ1_S
これにより、http://localhost:8000/v1 で OpenAI 互換サーバーが起動します。お好みのツールやクライアントからこの URL に接続すれば、すぐにチャットを開始できます。さらに、お気に入りの MCP(Model Context Protocol)を設定したり、画像やファイルを簡単に渡して使用したりすることも可能です。
llama.cpp には、ツールの利用、MCP のサポート、エージェントワークロードの実行に対応したビルトイン UI も用意されています。llama app で 1 ビット精度で動作する Inkling をぜひお試しください:
Inkling の GGUF ファイルは、Unsloth Studio でも実行可能です。動的な 1 ビット GGUF を使用することで、サイズを 86% 削減しながらも、トップ 1% の精度を約 74.2% 維持しています。
ユースケース
Pi との連携によるエージェント型コーディング
Pi は、さまざまな言語モデルと連携して使用できる最小限のコーディングエージェント用フレームワークです。インストール後、~/.pi/agent/models.json に設定を追加すれば、llama.cpp などの推論エンジンサーバーのエンドポイントや、Hugging Face の Inference Providers を利用できます。
{
"providers": {
"inference-providers": {
"baseUrl": "https://router.huggingface.co/v1",
"api": "openai-completions",
"apiKey": "hf_...",
"models": [
{
"id": "thinkingmachines/Inkling"
}
]
}
}
}
設定が完了したら、プロジェクトディレクトリで pi コマンドを実行するだけで利用開始できます。今回のデモでは、モデルに難解な数学的推論問題を提示しましたが、Pi が提供するツールを活用して見事に解決しました。
Inkling は広範なマルチモーダル推論とトークン消費量の削減を重視しているため、ドキュメント処理や音声タスクなどでもぜひお試しください。
多トークン予測ドラフター (Multi Token Prediction Drafters)
MTP(Multi Token Prediction)は、モデルに追加層を追加し、次の 1 トークンだけでなく複数のトークンを同時に予測できるようにする技術です。推論時には、この追加層が「ドラフター」として機能し、性能を損なうことなく生成速度を向上させるスペキュレーティブ・デコーディング(speculative decoding)を実現します。
MTP を採用すれば、生成される出力は従来通り正確に保たれたまま、VRAM 上のメモリコストを最小限に抑えつつ、生成速度を大幅に加速できます。Thinking Machines では今回のリリースに合わせて、専用の MTP ドラフターも提供しています。
import torch
from transformers import AutoModelForMultimodalLM, AutoProcessor
processor = AutoProcessor.from_pretrained("thinkingmachines/Inkling")
model = AutoModelForMultimodalLM.from_pretrained(
"thinkingmachines/Inkling",
dtype=torch.bfloat16,
device_map="auto",
)
Preprocess the inputs.
...
generated = model.generate(
**inputs,
max_new_tokens=1000,
do_sample=False,
use_mtp=True,
)
print(processor.decode(generated[0], skip_special_tokens=True))
多モーダル・ビジョン
専門家のソースや大学入試問題から選んだ推論クイズのセットを用意しました。画像にはスクリーンショットに特有の透かしが含まれており、モデルの能力を試すためのものとなっています。このモデルは高難易度の課題をほぼすべて解決し、最高および中程度の推論努力が必要なケースで 1 つだけ失敗しました。
モデルがどのように回答するかを確認していただきたく、各問題の解答例と、それを解くために消費したトークン数をご紹介します。なお、これらの評価(バイブス・eval)ではシステムプロンプトは使用しておらず、本来は適切なシステムプロンプトを指定して実行すべき推論クイズです。
詳細な画像と結果は こちら で確認できます。
| カテゴリ | 質問内容 | トークン数(中程度の推論努力) | トークン数(高レベルの推論努力) | トークン数(最大限の推論努力) |
|---|---|---|---|---|
| オープンエンド型薬物相互作用 | ここでどの成分が相互作用していますか? | 1,893 ✅ | 2,367 ✅ | 3,688 ✅ |
| 物理問題 (MMMU-Pro) | 画像内の質問に答えてください。 | 1,357 ✅ | 3,323 ✅ | 3,314 ✅ |
多言語物理問題
画像に表示されたトルコ語の質問に答えてください。
1,435 ✅
2,129 ✅
3,162 ✅
司法試験問題
画像内の質問に答えてください。
1,117 ✅
2,137 ✅
1,676 ✅
インフォグラフィックからの自由記述型質問回答
提示された情報に基づき、北極の将来の温暖化期間が、すでに観測されている実質的な温暖化期間のおよそ何倍になるでしょうか?
1,378 ❌
3,859 ✅
6000(トークン予算超過)
いくつかの観察点:
- 画像内のインフォグラフィックに直接回答するのではなく、モデルはまず画像内のテキストを抽出してテキスト化し、文脈を把握しようとしています。
- トークンを節約するために推論プロセスで適切なプロンプト設計が重要です。例えば、薬の裏面の画像に対して「ここでどの部品が相互作用しているか?」といった曖昧な質問をすると、モデルはまず「相互作用」という言葉が何を指すのかを理解する必要があります。
- 多肢選択式(MCQA)の問題回答は、モデル自身 reasoning の構造を構築する上で大きな助けとなりました。一方、自由記述型問題では MCQA に比べて苦戦しており、これは多くのモデルに共通する課題です。一般的な思考プロセスは、「OCR でテキスト抽出 → 特徴の特定 → 各選択肢の評価 → 回答」という流れでした。
- 推論の強度を「0.7(中程度)」に設定すると、コストと精度のバランスが良好な結果をもたらすようです。
多モーダル音声
BigBenchAudio から選ばれたいくつかの音声推論例と、GlobeAudio の多言語音声データ(ロシア語と中国語で、転写テキストの最後の単語を当てる多肢選択問題)を用いて、モデルの「バイブ評価」を行いました。テスト対象とした BigBenchAudio の例題は、論理的な命題や質問で構成されています。具体的には、音声に含まれる文脈から論証が論理的に導き出せるか(形式上の誤謬の検出)、あるいは音声内に複数の明確な物体が登場する中で特定の物体の総数を数える(オブジェクトカウント)といったタスクです。
このベンチマークは本来「音声入力に対する音声出力」の推論を目的として作られていますが、今回はモデルが持つ「音声そのものへの推論能力」を確認したかったため、そのままテストに用いました。一方、GlobeAudio の質問は比較的シンプルだったため、推論コスト(effort)を 0.1 と低い設定で実行しました。各言語の最初の例題ずつを試しましたが、最低限のコスト設定における「形式上の誤謬」に関する 2 つ目の例題以外ではすべての質問・設定でテストに合格しました。
そのため、ここでは各質問で消費されたトークン数と推論コストの関係のみを報告します。バイブ評価の結果詳細や音声ファイルは こちら で確認できます。
GlobeAudio
| 質問 | 完了トークン数(推論コスト:最低) | 完了トークン数(推論コスト:中程度) |
|---|
ロシア語(最後の単語を問う)
オーディオ録音の最後の単語は何ですか?1. ロシア 2. 証人 3. モスクワ 4. イベント。正しい選択肢を一つ選び、その正確なテキストで答えてください。
130
179
ロシア語(話者の職業を問う)
話者は誰である可能性が高いですか?1. レポーター 2. ブロッガー 3. 歴史の教師 4. エンターテインメント番組の司会者。正しい選択肢を一つ選び、その正確なテキストで答えてください。
105
136
中国語(話速の変化を問う)
アナウンサーの話し方に変化はありますか?1. 突然速くなる 2. 突然遅くなる 3. 変わらない 4. 時速が変動する。正しい選択肢を一つ選び、その正確なテキストで答えてください。
111
289
Big Bench Audio の結果
完了トークン数(最低)
完了トークン数(中程度)
完了トークン数(最高)
形式論理の誤り (10)
285
335
444
形式論理の誤り (39)
275(失敗)
555
778
物体数え上げ (680)
150
233
161
いくつかの観察点:
- 視覚モデルと同様に、このモデルはまず音声を文字起こししてから質問に答えます。
- 紛らわしい選択肢にも惑わされません。ロシア語のテストでは、音声内に他の選択肢が含まれていたにもかかわらず、正解を正確に選びました。
- 視覚モデルと同じく、思考プロセスは「文字起こし→特徴の特定→各選択肢の評価→回答」という流れになります。
- このアプローチは推論能力を高めるものであり、単なる聴覚処理とは異なります。音声に対する質問応答は、画像の場合に比べてコストが大幅に低いことも特徴です。
Post-training で Inkling を活用したい場合、Thinking Machines が提供する「tinker」という管理ツールがあります。これはオープンウェイトモデルの Post-training 向けのツールで、ファインチューニング、蒸留、強化学習に関するサンプルコードが用意されています。
私たちは tinker と、エージェント型強化学習環境を提供する「OpenEnv」を用いて Inkling の Post-training を実施しました。ここでは ECHO アルゴリズムを採用し、検証器(verifier)を必要とせずに環境の挙動を予測できるモデルを学習させます。具体的には、環境から生成されたトークンに対して次トークンのクロスエントロピー損失を適用しつつ、エージェントの行動に対する通常のポリシー学習も併せて行います。これにより、追加のモデルや教師、あるいはロールアウトを増やすことなく、ポリシーに暗黙的な世界モデル(world model)を習得させることが可能になります。
詳細な実装例は こちら で確認できます。
tinker と OpenEnv を使った強化学習のサンプル
git clone https://github.com/huggingface/OpenEnv.git
cd OpenEnv
.env ファイルに TINKER_API_KEY=... を追加し、以下を実行:
uv run --env-file .env \
examples/echo_world_model/backends/tinker_echo_demo.py
Transformer ベースの強化学習に取り組む場合、知識蒸留(Knowledge Distillation)の教師モデルとして Inkling の利用を推奨します。具体的には、Inkling の文書理解能力を活用して、オンデバイス向けに最適化された小規模モデルのパフォーマンスを向上させることが可能です。
こちらの例 では、Transformer 強化学習ライブラリと GOLD アルゴリズムを用いて知識蒸留を行っています。GOLD は異なるトークナイザー間のトークンロジットを一致させるため、Hugging Face Hub 上の任意のモデルへ知識を蒸留できる点で非常に便利です。
SLURM スクリプト
クラスター上で Inkling をデプロイする際、Transformers API でサービスを提供するための SLURM スクリプトと、異なるモダリティでエンドポイントをクエリする方法を用意しています。コマンドを更新することで、vLLM や SGlang への対応も可能です。これらのスクリプトは こちら で確認できます。
- 推論ジョブの送信
- Python による生成スクリプト
ベンチマーク結果
| Benchmark | GLM-5.2 | GLM-5.1 | Qwen3.7-Max | MiniMax M3 | DeepSeek-V4-Pro | Claude Opus 4.8 | GPT-5.5 | Gemini 3.1 Pro |
|---|---|---|---|---|---|---|---|---|
| Reasoning | ||||||||
| HLE | 40.5 | 31 | 41.4 | 37 | 37.7 | 49.8* | 41.4* | 45 |
| HLE (w/ Tools) | 54.7 | 52.3 | 53.5 | - | 48.2 | 57.9* | 52.2* | 51.4* |
| CritPt | 20.9 | 4.6 | 13.4 | 3.7 | 12.9 | 20.9 | 27.1 | 17.7 |
| AIME 2026 | 99.2 | 95.3 | 97 | - | 94.6 | 95.7 | 98.3 | 98.2 |
| HMMT Nov. 2025 | 94.4 | 94 | 95 | 84.4 | 94.4 | 96.5 | 96.5 | 94.8 |
| HMMT Feb. 2026 | 92.5 | 82.6 | 97.1 | 84.4 | 95.2 | 96.7 | 96.7 | 87.3 |
| IMOAnswerBench | 91.0 | 83.8 | 90 | - | 89.8 | 83.5 | - | 81 |
| GPQA-Diamond | 91.2 | 86.2 | 90 | 93 | 90.1 | 93.6 | 93.6 | 94.3 |
Coding
SWE-bench Pro
62.1
58.4
60.6
59
55.4
69.2
58.6
54.2
NL2Repo
48.9
42.7
47.2
42.1
35.5
69.7
50.7
33.4
DeepSWE
46.2
18
18
20
8
58
70
10
ProgramBench
63.7
50.9
-
-
47.8
71.9
70.8
39.5
Terminal Bench 2.1 (Terminus-2)
81.0
63.5
75
65
64
85
84
74
Terminal Bench 2.1 (Best Reported Harness)
82.7
69
-
-
-
78.9
83.4
70.7
FrontierSWE (Dominance)
74.4
30.5
-
-
29.0
75.1
72.6
39.6
PostTrainBench
34.3
20.1
-
-
-
37.2
28.4
21.6
SWE-Marathon
13.0
1.0
-
-
-
26.0
12.0
4.0
Agentic
MCP-Atlas (Public Set)
76.8
71.8
76.4
74.2
73.6
77.8
75.3
69.2
Tool-Decathlon
48.2
40.7
-
-
52.8
59.9
55.6
48.8
原文を表示
Inkling is a large (1T params!) open model to natively accept image, text, and audio inputs.
TLDR; Inkling by Thinking Machines is out on Hugging Face. Inkling is a huge multimodal LLM that understands all modalities (image, audio, text), has agentic capabilities, and supports 1M context. It comes in full BF16 and a well-calibrated NVFP4 variant, and includes speculative MTP layers for faster inference. There’s day-0 support in transformers, SGLang, and llama.cpp.
What makes Inkling special?
Inkling is the first large open model with ~1T parameters and 1M context window to natively receive image, text, and audio inputs, trained on 45 trillion tokens of text, images, audio and video. It’s focused on reasoning across modalities such as audio, images, and text; and is intended for domain adaptation via fine-tuning. We’ve tinkered with this model to build some demos and explore the architecture, and we think it’s great for building a new wave of multimodal reasoning apps.
Overall Capabilities and Architecture
Inkling is a decoder-only multimodal Mixture-of-Experts model with 975B total and 41B active parameters. There are a lot of things going on, so let’s break each part down:
- Decoder-only: This means that the architecture supports causal autoregressive generation, like in most state-of-the-art LLMs.
- Multimodal: The model can ingest text, audio, and images.
- Mixture of Experts (MoE): The feed forward networks inside each layer are sparse, achieving faster inference because only 41B parameters are active at any given time. The model has 256 experts, as we’ll see later.
Here’s a quick glance of the architecture.
Relative attention: Instead of RoPE, which is the usual method to inject positional information in transformers models, Inkling uses relative attention to encode position information. Each attention layer learns position directly in the attention logits. Aside from key-query-values, there's a fourth projection producing a per-token, per-head relative feature R. This projection tensor is then tweaked with distance information (distance between the key and the query vector) and propagated into the attention module.
Hybrid attention: The decoder layers alternate between global attention (attending to the full context length at once) and sliding window attention (attending to a fixed context window in a sliding fashion). The architecture has a pattern of 5:1 sliding window to global attention layers. This hybrid attention scheme provides efficiency in computation. The final layer uses global attention to help build feature-rich representations.
Short convolution: The model uses a distinctive short 1D convolution, or SConv over the hidden states. SConv reads the current token and the previous W-1 hidden states, with W being the sliding window size. The intuition here is that SConv helps with local attention while freeing the attention and MoE modules from local representations.
MoE with shared experts sink: In Inkling, the router scores both routed experts and shared experts. Top-k selection is performed over 6 experts, plus 2 shared experts always active.
Vision understanding: The model includes a simple hierarchical MLP patchifier consisting of several linear layers. Each layer merges pixels progressively, until the final layer produces one embedding per patch.
Audio understanding: The architecture employs a discretized mel spectrogram, where each of the audio chunks (of 100 ms) are converted to the mel scale and then classified into the exact mel spectrogram bin.
The multimodal towers are relatively simple modules, unlike other models that employ separate encoders for each modality. Each image patch passes through the image embedding tower and the audio chunk is passed through the audio embedding tower to get both media embeddings. Image inputs also include an additional temporal dimension for video processing. We expect this capability to be useful for downstream fine-tuning, but we haven’t evaluated out-of-the-box video performance. The tower folds the patch grid, a small local block of neighboring tokens is stacked into the channel dimension and goes through hMLP. The audio waveform is converted to mel scale, which is then classified into a discrete mel bin. These mel bin values are embedded in the audio embedding tower and the embeddings are then summed to construct the final audio input.
Inference Support
Inkling comes with day-0 transformers support and is supported in major inference engines like SGLang and vLLM.
This model is huge. The bf16 checkpoint requires 2 TB of VRAM, while the nvfp4 version requires 600 GB of VRAM. You can try the model through serverless inference routers like Inference Providers, or use ggml quants for local deployment with llama.cpp.
Transformers
The easiest way to infer with transformers directly is to use the any-to-any pipeline. You can use either the 16 bit "thinkingmachines/Inkling" on Hopper or later GPUs, or the quantized NVFP4 checkpoint "thinkingmachines/Inkling-NVFP4" on Blackwell Nvidia GPUs. Make sure to have the latest version of transformers (5.14.0 was released today) (pip install -U transformers).
from transformers import pipeline
model_id = "thinkingmachines/Inkling"
# model_id = "thinkingmachines/Inkling-NVFP4"
pipe = pipeline("any-to-any", model=model_id)
After initializing the pipeline, you can pass in the prompt as follows.
image_url = (
"https://huggingface.co/datasets/merve/vl-test-suite/"
"resolve/main/pills.jpg"
)
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": image_url,
},
{
"type": "text",
"text": "Do components in this supplement interact with each other?",
},
],
},
]
output = pipe(
messages,
max_new_tokens=2000,
return_full_text=False,
reasoning_effort="medium",
)
output[0]["generated_text"]
Going one level lower, you can use Auto classes. For inference, you can use the AutoModelForMultimodalLM class for models and AutoProcessor class for processors. For different reasoning tasks, the tokenizer takes in a reasoning_effort argument. Existing options for reasoning effort are "none", "minimal", "low", "medium", "high", "xhigh", and "max".
from transformers import AutoModelForMultimodalLM, AutoProcessor
model_id = "thinkingmachines/Inkling"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForMultimodalLM.from_pretrained(
model_id,
dtype="auto",
device_map="auto",
)
messages = [
{"role": "system", "content": "You should only answer with a number."},
{"role": "user", "content": "What is 17 * 23?"},
]
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
reasoning_effort="high",
).to(model.device)
output = model.generate(**inputs, max_new_tokens=2000)
generated_tokens = output[0][inputs["input_ids"].shape[1] :]
print(processor.decode(generated_tokens, skip_special_tokens=False))
For multimodal inference, you can use the same classes. We provide example snippets for each different modality in the model card.
Text with image inference
from transformers import AutoModelForMultimodalLM, AutoProcessor
model_id = "thinkingmachines/Inkling"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForMultimodalLM.from_pretrained(
model_id,
dtype="auto",
device_map="auto",
)
image_url = (
"https://huggingface.co/datasets/merve/vl-test-suite/"
"resolve/main/pills.jpg"
)
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": image_url,
},
{
"type": "text",
"text": "Do any of the components in this supplement interact?",
},
],
},
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
reasoning_effort="medium",
return_dict=True,
return_tensors="pt",
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=2000)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
processor.parse_response(response)
Inkling also takes in audio input. Below is an example inference snippet, which still uses the same AutoModelForMultimodalLM class.
Text with audio inference
from transformers import AutoModelForMultimodalLM, AutoProcessor
model_id = "thinkingmachines/Inkling"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForMultimodalLM.from_pretrained(
model_id,
dtype="auto",
device_map="auto",
)
audio_url = (
"https://huggingface.co/datasets/merve/vl-test-suite/"
"resolve/main/example_audio.mp3"
)
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "Transcribe the following speech to text."},
{
"type": "audio",
"audio": audio_url,
},
],
},
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
return_dict=True,
return_tensors="pt",
add_generation_prompt=True,
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=512)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
processor.parse_response(response)
For more realistic parallel deployment in a cluster of several nodes, please refer to the Slurm section below.
SGLang
SGLang is one of the fastest deployment frameworks for Inkling at the time of release, as it includes a custom model implementation. The launch command below shards the model across 8 GPUs and serves an OpenAI-compatible API on port 30000.
pip install sglang
python3 -m sglang.launch_server \
--model-path thinkingmachine/Inkling \
--tp-size 8 \
--served-model-name inkling \
--host 0.0.0.0 \
--port 30000
Match --tp-size to your GPU count. Add --mem-fraction-static (e.g. 0.85) if you need to leave more headroom for the KV cache.
vLLM
vLLM is strong for production serving. A single vllm serve command downloads the weights from the Hub, shards the model across your GPUs with tensor parallelism, and starts an OpenAI-compatible server on port 8000.
pip install vllm
vllm serve thinkingmachine/Inkling \
--tensor-parallel-size 8 \
--served-model-name inkling
In practice, you will need multiple nodes and a distribution tool like SLURM (see below). Key parameters are --tensor-parallel-size to the number of GPUs on your node, and use --max-model-len to cap the context window if you hit KV-cache memory limits.
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "inkling",
"messages": [{"role": "user", "content": "Hello!"}]
}'
Remote Inference with Hugging Face Inference Providers
You can infer with this model using several inference providers through Hugging Face. You can see all the code snippets to consume here. Below you can see how to use with the OpenAI client.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://router.huggingface.co/v1",
api_key=os.environ["HF_TOKEN"],
)
completion = client.chat.completions.create(
model="thinkingmachines/Inkling:auto",
messages=[
{
"role": "user",
"content": "What is the capital of France?",
},
],
)
print(completion.choices[0].message)
Using the “:auto” suffix routes to your preferred provider in your settings; you can also use “cheapest” or “:fastest” as well. For this release, we cover the inference costs for 2 hours within the release for everyone.
Note: audio support in Inference Providers is work in progress and will be added shortly.
Local Inference with llama.cpp and Unsloth
You can use llama.cpp to run quantized versions of the model on limited hardware. Unsloth have quantized the model down to 1-bit precision, reducing VRAM consumption by 95% over the original model.
llama serve -hf unsloth/inkling-GGUF:UD-IQ1_S
This starts an OpenAI-compatible server running at http://localhost:8000/v1 that you connect to in your preferred tool or clients. Heading there, you can start chatting with the model, and set it up with your favorite MCPs, pass in images or files conveniently and more!
Llama cpp also ships with a built-in UI that supports tools, mcp, and agentic workloads. Checkout Inkling running at 1-bit precision in the llama app:
Inkling GGUFs are also runnable in Unsloth Studio with dynamic 1-bit GGUFs which retain ~74.2% of top-1% accuracy whilst being 86% smaller.
Use Cases
Agentic coding with Pi
Pi is a minimal coding agent harness you can use with different language models. You can use Pi with either an inference engine server endpoint, such as llama.cpp, or with Inference Providers on Hugging Face by adding this to your ~/.pi/agent/models.json after installation.
{
"providers": {
"inference-providers": {
"baseUrl": "https://router.huggingface.co/v1",
"api": "openai-completions",
"apiKey": "hf_...",
"models": [
{
"id": "thinkingmachines/Inkling"
}
]
}
}
}
Then you can start Pi in your project directory by calling pi and you’re good to go! In this demo, we give the model a hard math reasoning problem and it uses tools in pi to solve it.
Inkling is focused on broad multimodality reasoning and low token consumption, so try it out with document processing or audio tasks.
Multi Token Prediction Drafters
MTP adds extra layers to the model that predict several tokens at once, not just the next one. During inference, the extra layers act as “drafters” for speculative decoding, speeding up generation without compromising performance. With MTP, you get the exact same generated outputs, multipliers in generation speed-up at small memory cost in VRAM (due to serving the drafter). Thinking Machines also provides an MTP drafter with this release.
import torch
from transformers import AutoModelForMultimodalLM, AutoProcessor
processor = AutoProcessor.from_pretrained("thinkingmachines/Inkling")
model = AutoModelForMultimodalLM.from_pretrained(
"thinkingmachines/Inkling",
dtype=torch.bfloat16,
device_map="auto",
)
# Preprocess the inputs.
...
generated = model.generate(
**inputs,
max_new_tokens=1000,
do_sample=False,
use_mtp=True,
)
print(processor.decode(generated[0], skip_special_tokens=True))
Multimodal Vision
We have prepared a small suite of reasoning questions from expert-level sources and university entrance exams. We have taken photos of the screen with watermarks in the screenshot to challenge the model. The model has solved all of them on high one, failed one in highest and medium reasoning efforts, so we provide a link to the model answers for you to check out how the model sounds and provide the number of tokens the model has taken to solve each of them. Note that we provide no system prompts in these vibe evals, and these reasoning questions should often be run with a good system prompt. The vibe eval images and results live here.
Category
Question
Number of Tokens (Reasoning Effort Medium)
Number of Tokens (Reasoning Effort High)
Number of Tokens (Reasoning Effort Max)
Open-ended Drug Interactions
Which components interact here?
1,893 ✅
2,367 ✅
3,688 ✅
Physics Question (MMMU-Pro)
Answer the question in the image.
1,357 ✅
3,323 ✅
3,314 ✅
Multilingual Physics Question
Answer the Turkish question given in the image.
1,435 ✅
2,129 ✅
3,162 ✅
Bar Exam
Answer the question in the image.
1,117 ✅
2,137 ✅
1,676 ✅
Infographics Question Answering (Open-ended)
Based on the information presented, approximately how many times larger is the projected summer warming period in the Arctic than the time over which substantial Arctic warming has already been observed?
1,378 ❌
3,859 ✅
6000 (exceeded token budget)
Few notes on vibes:
- Instead of directly answering the question on infographic, the model first turns text on image to text to ground itself.
- Prompting matters a lot to save tokens in reasoning, for instance, asking vague questions like “which components interact here?” with an image of the back of a pill, the model first needs to see what we mean by interactions here.
- Multi-choice question answers helped the model a lot in structuring its own reasoning, for open-ended questions the model struggled compared to MCQA, however, this is a common issue for many models. The usual chain of thought was OCR → characterize → evaluate each option → answer.
- 0.7 reasoning effort (medium) seems to provide a good trade-off.
Multimodal Audio
We have vibe-evaluated the model on some audio reasoning examples from BigBenchAudio and a few multilingual audio examples of GlobeAudio (Russian and Chinese multi-choice questions asking the last word in transcription). The BigBenchAudio examples we tested consist of logical statements and questions that either ask for formal fallacies (whether an argument can be logically deduced from the context given in audio) or object counting (stating multiple distinctive objects in the audio, asking for the total count of a certain one). Although this benchmark is initially made for speech-to-speech reasoning, we just want to see audio reasoning capabilities of this model. For GlobeAudio, the questions are relatively straightforward, so we ran with reasoning efforts of 0.1. We ran the first example of each language within GlobeAudio. All tests pass on all questions and efforts, except for second formal fallacy example on lowest effort, so we only provide the number of tokens spent in each question against reasoning effort. Vibe eval results and audio files live here.
GlobeAudio
Question
Number of completion tokens (Reasoning effort lowest)
Number of completion tokens (Reasoning effort medium)
Russian (asks for last word)
Какое последнее слово в аудиозаписи? 1. Россия 2. Свидетелем 3. Москва 4. Событий Choose the single correct option and answer with its exact text.
130
179
Russian (asks for profession of the speaker)
Кем, скорее всего, работает говорящая? 1. Репортершей 2. Блоггершей 3. Учительницей истории 4. Ведущей развлекательного шоу Choose the single correct option and answer with its exact text.
105
136
Chinese (asks for speaking rate)
播报员的语速有何变化? 1. 突然变快 2. 突然变慢 3. 保持不变 4. 时快时慢 Choose the single correct option and answer with its exact text.
111
289
Big Bench Audio
Completion Tokens (lowest)
Completion Tokens (medium)
Number of completion tokens ( highest)
Formal Fallacy (10)
285
335
444
Formal Fallacy (39)
275 (fails)
555
778
Object Counting (680)
150
233
161
Some notes on the vibes:
- Similar to vision, the model first transcribes the speech before answering the question.
- It resists decoys: in Russian test, the model picked the right answer despite other answers appearing in the audio.
- Similar to vision, usual chain of thought is transcribe → characterize → evaluate each option → answer.
- The effort helps reasoning and not hearing. Audio question answering was much cheaper than images.
Post-training
If you would like to use Inkling for post-training, Thinking Machines have built tinker, a managed tool for post-training open weight models. Their cookbook includes examples for fine-tuning, distillation, and reinforcement learning.
We post trained Inkling with tinker and OpenEnv, an agentic RL environment tool. We used the ECHO algorithm that trains a model to predict the environment without a verifier, applying next-token cross-entropy loss to tokens produced by the environment, alongside the usual policy learning on agent actions. This teaches the policy an implicit world model without requiring a separate model, teacher, or additional rollouts. Check out the example.
RL Example with Tinker and OpenEnv
git clone https://github.com/huggingface/OpenEnv.git
cd OpenEnv
# Add TINKER_API_KEY=... to .env, then run:
uv run --env-file .env \
examples/echo_world_model/backends/tinker_echo_demo.py
If you’re working with Transformers Reinforcement Learning we suggest using Inkling as a teacher model in a knowledge distillation setup. For example, take advantage of Inkling’s document understanding abilities to improve the performance of a smaller (on-device) model. In this example, we use the transformer reinforcement learning library and the GOLD algorithm to distill knowledge. GOLD is handy here because it matches token logits between different tokenizers, so you can distill to any model on the hub.
Slurm Scripts
To deploy Inkling on a cluster, we provide SLURM scripts serving with transformers API, as well as how to query the endpoint with different modalities. You can adapt these scripts to vLLM or SGlang by updating the commands. These scripts live here.
- Submit inference job
- Python generation script
Benchmark Results
Benchmark
GLM-5.2
GLM-5.1
Qwen3.7-Max
MiniMax M3
DeepSeek-V4-Pro
Claude Opus 4.8
GPT-5.5
Gemini 3.1 Pro
Reasoning
HLE
40.5
31
41.4
37
37.7
49.8*
41.4*
45
HLE (w/ Tools)
54.7
52.3
53.5
-
48.2
57.9*
52.2*
51.4*
CritPt
20.9
4.6
13.4
3.7
12.9
20.9
27.1
17.7
AIME 2026
99.2
95.3
97
-
94.6
95.7
98.3
98.2
HMMT Nov. 2025
94.4
94
95
84.4
94.4
96.5
96.5
94.8
HMMT Feb. 2026
92.5
82.6
97.1
84.4
95.2
96.7
96.7
87.3
IMOAnswerBench
91.0
83.8
90
-
89.8
83.5
-
81
GPQA-Diamond
91.2
86.2
90
93
90.1
93.6
93.6
94.3
Coding
SWE-bench Pro
62.1
58.4
60.6
59
55.4
69.2
58.6
54.2
NL2Repo
48.9
42.7
47.2
42.1
35.5
69.7
50.7
33.4
DeepSWE
46.2
18
18
20
8
58
70
10
ProgramBench
63.7
50.9
-
-
47.8
71.9
70.8
39.5
Terminal Bench 2.1 (Terminus-2)
81.0
63.5
75
65
64
85
84
74
Terminal Bench 2.1 (Best Reported Harness)
82.7
69
-
-
-
78.9
83.4
70.7
FrontierSWE (Dominance)
74.4
30.5
-
-
29.0
75.1
72.6
39.6
PostTrainBench
34.3
20.1
-
-
-
37.2
28.4
21.6
SWE-Marathon
13.0
1.0
-
-
-
26.0
12.0
4.0
Agentic
MCP-Atlas (Public Set)
76.8
71.8
76.4
74.2
73.6
77.8
75.3
69.2
Tool-Decathlon
48.2
40.7
-
-
52.8
59.9
55.6
48.8
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み