新项目发布,具体功能和用途需查阅原文了解。
Inkling 是由 Thinking Machines 推出的大规模(1T 参数!)开源模型,能原生接收图像、文本和音频输入。
要点总结: Inkling 由 Thinking Machines 推出,现已在 Hugging Face 上线。Inkling 是一个巨型多模态 LLM,能理解所有模态(图像、音频、文本),具有 AI 智能体能力,并支持 1M 上下文。它提供完整的 BF16 版本和经过精心校准的 NVFP4 变体,并包含推测性 MTP 层以实现更快的推理。Transformers、SGLang、vLLM 和 llama.cpp 提供了第 0 天的支持。Thinking Machine Labs 还发布了 Inkling-Small,总参数数 276B,活跃参数 12B,并支持 MXFP8 和 NVFP4 权重,架构与 Inkling 相同。
Inkling 是第一个拥有约 1T 参数和 1M 上下文窗口的大型开源模型,能原生接收图像、文本和音频输入,训练数据包含 45 万亿个文本、图像、音频和视频 token。它专注于跨音频、图像和文本等模态的推理,旨在通过微调实现领域适配。我们已经尝试用这个模型构建了一些演示并探索了其架构,我们认为它非常适合构建新一代多模态推理应用。
Inkling 是一个仅解码器多模态混合专家模型,总参数 975B,活跃参数 41B。这里面有很多东西,让我们逐一分解:
仅解码器: 这意味着架构支持因果自回归生成,就像大多数最先进的 LLM 一样。
多模态: 该模型可以接收文本、音频和图像。
混合专家 (MoE): 每层内的前馈网络是稀疏的,因为任何时刻只有 41B 参数是活跃的,因此实现了更快的推理。该模型有 256 个专家,我们稍后会看到。
以下是架构的快速概览。
相对注意力: Inkling 使用相对注意力编码位置信息,而不是 RoPE(这是在 Transformer 模型中注入位置信息的常见方法)。每个注意力层直接在注意力 logits 中学习位置。除了 key-query-values 外,还有第四个投影产生每个 token、每个头的相对特征 R。然后用距离信息(key 向量和 query 向量之间的距离)调整这个投影张量,并将其传入注意力模块。
混合注意力: 解码器层在全局注意力(一次性关注完整上下文长度)和滑动窗口注意力(以滑动方式关注固定上下文窗口)之间交替。该架构采用 5:1 的滑动窗口与全局注意力层的模式。这种混合注意力方案提供了计算效率。最后一层使用全局注意力来帮助构建特征丰富的表示。
短卷积: 该模型在隐藏状态上使用独特的短 1D 卷积(SConv)。SConv 读取当前 token 和前 W-1 个隐藏状态,其中 W 是滑动窗口大小。这里的直觉是,SConv 有助于局部注意力,同时让注意力和 MoE 模块不用处理局部表示。
带共享专家汇聚的 MoE: 在 Inkling 中,路由器对路由专家和共享专家都进行评分。Top-k 选择在 6 个专家上执行,加上 2 个始终活跃的共享专家。
视觉理解: 该模型包含一个简单的分层 MLP patchifier,由多个线性层组成。每层逐步合并像素,直到最后一层为每个 patch 生成一个嵌入。
音频理解: 该架构采用离散化的梅尔频谱图,其中每个音频块(100 毫秒)被转换为梅尔标度,然后分类为精确的梅尔频谱图 bin。
多模态塔是相对简单的模块,与那些对每种模态采用单独编码器的其他模型不同。每个图像 patch 通过图像嵌入塔,每个音频块通过音频嵌入塔以获得两个媒体嵌入。图像输入还包括用于视频处理的额外时间维度。我们预期这种能力对下游微调很有用,但我们还没有评估开箱即用的视频性能。塔折叠 patch 网格,将相邻 token 的小局部块堆叠到通道维度中并通过 hMLP。音频波形被转换为梅尔标度,然后分类为离散梅尔 bin。这些梅尔 bin 值在音频嵌入塔中被嵌入,然后求和以构建最终的音频输入。
Inkling 提供了第 0 天的 Transformers 支持,并在 SGLang 和 vLLM 等主要推理引擎中得到支持。
这个模型非常大。bf16 检查点需要 2 TB VRAM,而 nvfp4 版本需要 600 GB VRAM。你可以通过 Inference Providers 等无服务器推理路由器尝试该模型,或使用 ggml 量化版本通过 llama.cpp 进行本地部署。
直接使用 Transformers 推理的最简单方法是使用 any-to-any pipeline。你可以在 Hopper 或更新的 GPU 上使用 16 位的 "thinkingmachines/Inkling",或在 Blackwell Nvidia GPU 上使用量化的 NVFP4 检查点 "thinkingmachines/Inkling-NVFP4"。确保你有最新版本的 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": "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"]
往下一层,你可以使用 Auto 类。对于推理,你可以使用 AutoModelForMultimodalLM 类用于模型,AutoProcessor 类用于处理器。对于不同的推理任务,tokenizer 接受 reasoning_effort 参数。现有的推理力度选项有 "none"、"minimal"、"low"、"medium"、"high"、"xhigh" 和 "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))
对于多模态推理,你可以使用相同的类。我们在模型卡中为每种不同的模态提供了示例片段。
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 也接受音频输入。以下是一个示例推理片段,仍然使用相同的 AutoModelForMultimodalLM 类。
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 是部署 Inkling 速度最快的框架之一,因为它包含自定义模型实现。下面的启动命令会将模型分片到 8 块 GPU 上,并在 30000 端口提供兼容 OpenAI 的 API。
```shell
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 命令即可从 Hub 下载权重,通过张量并行将模型分片到多块 GPU 上,并在 8000 端口启动兼容 OpenAI 的服务器。你可以在此查看该模型的 vLLM Recipe,并根据自己的硬件进行定制。
# Requires nightly or vllm>=0.26 (once released)
uv pip install -U vllm --pre \
--extra-index-url https://wheels.vllm.ai/nightly/cu130 \
--extra-index-url https://download.pytorch.org/whl/cu130 \
--index-strategy unsafe-best-match
vllm serve thinkingmachines/Inkling-NVFP4 \
--trust-remote-code \
--tokenizer-mode inkling \
--tensor-parallel-size 8 \
--enable-auto-tool-choice \
--tool-call-parser inkling \
--reasoning-parser inkling \
--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 Inference Providers 进行远程推理
你可以通过 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 小时的推理费用。
注意:Inference Providers 的音频支持仍在开发中,很快就会加入。
使用 llama.cpp 和 Unsloth 进行本地推理
你可以使用 llama.cpp,在硬件资源有限的环境中运行该模型的量化版本。Unsloth 已将该模型量化至 1 位精度,与原始模型相比可减少 95% 的显存占用。
llama serve -hf unsloth/inkling-GGUF:UD-IQ1_S
这会启动一个运行在 http://localhost:8080/v1 的 OpenAI 兼容服务器,你可以通过自己偏好的工具或客户端连接它。打开该地址后,你就可以开始与模型对话,还可以为其配置自己常用的 MCP,方便地传入图像或文件,等等!
Llama cpp 还内置了一个支持工具、MCP 和智能体工作负载的 UI。来看看以 1 位精度运行在 llama 应用中的 Inkling:
Inkling GGUF 也可以在 Unsloth Studio 中运行,其中的动态 1 位 GGUF 在体积缩小 86% 的同时,仍能保留约 74.2% 的 top-1% 准确率。
使用 Pi 进行智能体式编程
Pi 是一个极简的编程智能体框架,可以搭配不同的语言模型使用。安装完成后,将以下内容添加到 ~/.pi/agent/models.json,即可让 Pi 使用 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,一切就绪!在这个演示中,我们给模型出了一道高难度数学推理题,它会使用 Pi 中的工具来求解。
Inkling 专注于广泛的多模态推理和较低的 token 消耗,因此可以尝试将其用于文档处理或音频任务。
多 Token 预测起草器
MTP 会为模型添加额外的层,使其能够一次预测多个 token,而不只是预测下一个 token。在推理期间,这些额外层会充当推测解码的“起草器”,在不影响性能的情况下加快生成速度。使用 MTP 后,生成的输出完全相同,只需付出少量显存成本(用于部署起草器),即可获得数倍的生成速度提升。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))
我们从专家级资料和大学入学考试中整理了一小套推理题。为了增加模型面临的挑战,我们拍摄了带有屏幕水印的照片。模型在 high 推理强度下答对了所有题目,在 highest 和 medium 推理强度下各有一道题失败。因此,我们提供了模型答案的链接,供你了解模型的回答风格,同时也列出了模型解决每道题所消耗的 token 数量。请注意,在这些凭感觉评测中,我们没有提供任何系统提示词,而这类推理题通常应该搭配优质的系统提示词运行。凭感觉评测的图像和结果位于此处。
模型不会直接回答信息图中的问题,而是先将图像中的文字转换为文本,以此建立理解基础。
提示方式对减少推理过程中的 token 消耗影响很大。例如,面对一张药片背面的图像,如果提出“这里有哪些成分会发生相互作用?”这种含糊的问题,模型首先需要弄清楚我们所说的“相互作用”究竟指什么。
多项选择题的答案选项非常有助于模型组织自己的推理。与多项选择题相比,模型在开放式问题上的表现更为吃力,不过这也是许多模型普遍存在的问题。通常的思维链是:OCR → 描述特征 → 评估各个选项 → 作答。
0.7 的推理强度(medium)似乎能提供良好的权衡。
我们使用 BigBenchAudio 中的一些音频推理示例,以及 GlobeAudio 中的少量多语言音频示例(俄语和中文的多项选择题,要求回答转录文本中的最后一个词),对模型进行了凭感觉评测。我们测试的 BigBenchAudio 示例由逻辑陈述和问题组成,这些问题要求判断形式谬误(即某个论点是否能从音频所给的上下文中通过逻辑推导得出),或进行物体计数(在音频中陈述多个不同物体,并询问其中某类物体的总数)。虽然该基准最初是为语音到语音推理设计的,但我们只是想看看这个模型的音频推理能力。GlobeAudio 的问题相对直接,因此我们使用了 0.1 的推理强度。我们运行了 GlobeAudio 中每种语言的第一个示例。除第二个形式谬误示例在最低推理强度下失败外,所有测试在各种问题和推理强度下均通过,因此我们只提供每道题在不同推理强度下消耗的 token 数量。凭感觉评测的结果和音频文件位于此处。
关于实际体验的一些说明:
与视觉任务类似,模型会先转录语音,然后再回答问题。
它能够抵御干扰项:在俄语测试中,即使音频中出现了其他答案,该模型仍然选出了正确答案。
与视觉任务类似,通常的思维链是:转录 → 描述特征 → 逐一评估每个选项 → 作答。
额外的推理投入有助于推理,而不是听觉识别。音频问答的成本远低于图像问答。
如果你想使用 Inkling 进行后训练,Thinking Machines 构建了 tinker,这是一款用于对开放权重模型进行后训练的托管工具。其 cookbook 中包含微调、蒸馏和强化学习的示例。
我们使用 tinker 和 OpenEnv 对 Inkling 进行了后训练。OpenEnv 是一个面向 AI 智能体的强化学习环境工具。我们采用了 ECHO 算法,它训练模型在不使用验证器的情况下预测环境:对环境生成的 token 应用下一 token 交叉熵损失,同时对 AI 智能体的动作进行常规策略学习。这使策略能够学习隐式世界模型,而无需单独的模型、教师模型或额外的 rollout。请查看该示例。
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
如果你正在使用 Transformers Reinforcement Learning,我们建议在知识蒸馏设置中将 Inkling 用作教师模型。例如,可以利用 Inkling 的文档理解能力来提升较小型(端侧)模型的性能。在这个示例中,我们使用 transformer reinforcement learning 库和 GOLD 算法进行知识蒸馏。GOLD 在这里非常实用,因为它可以在使用不同 tokenizer 的模型之间匹配 token logits,因此你可以将知识蒸馏到 Hub 上的任意模型。
下面列出了 Inkling 的各个检查点及其 VRAM 要求。
为了在集群上部署 Inkling,我们提供了通过 transformers API 提供服务的 SLURM 脚本,以及使用不同模态查询端点的方法。你可以通过更新命令,将这些脚本适配到 vLLM 或 SGlang。这些脚本可在此处获取。
你可以使用 Inference Endpoints 部署 Inkling-Small 的 NVFP4 检查点。我们提供了一套经过预先测试的配置,可将其部署到 8 张 RTX PRO 6000 上,总 VRAM 为 768 GB,为 KV cache 提供了充足空间;每小时运行成本为 22 美元(不使用时可缩容至零)。要进行部署,请使用 Hugging Face CLI 运行 hf endpoints catalog deploy --repo thinkingmachines/Inkling-Small-NVFP4,或者前往 https://endpoints.huggingface.co/new/thinkingmachines/Inkling-Small-NVFP4。使用此配置,你可以获得 140 TPS(单用户推理,并通过连续批处理支持多用户场景)。
端点启动后,可以按如下方式进行查询。
curl "YOUR_ENDPOINT_HERE" \
-X POST \
-H "Authorization: Bearer $HF_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "huggingface/Inkling-Small-NVFP4",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://endpoints.hf.co/media-examples/img1.png"
}
},
{
"type": "text",
"text": "Describe this image in one sentence."
}
]
}
],
"stream": true,
"max_tokens": 100
}'
本文提及的模型 1
本文提及的数据集 2
本文提及的 Spaces 1
本文提及的合集 1
使用 Sentence Transformers 训练和微调多模态嵌入与重排序模型
使用 Sentence Transformers 的多模态嵌入与重排序模型
· 注册或登录后发表评论
本文提及的模型 1
本文提及的数据集 2
本文提及的 Spaces 1
本文提及的合集 1