嵌入向量模型决定了智能体能够看到哪些文本段落。英伟达发布了 Nemotron 3 Embed 模型,专门作用于这一层面。该模型面向生产级 RAG、智能体检索、代码检索以及智能体记忆等场景。
什么是 Nemotron 3 Embed?
该模型系列包含三个开放检查点。Nemotron-3-Embed-8B-BF16 是精度优先的选项。Nemotron-3-Embed-1B-BF16 将相同的设计移植到更小的模型规模中。Nemotron-3-Embed-1B-NVFP4 则是针对 Blackwell 优化的 4 比特路径。
三者均为采用双向注意力掩码训练的 Transformer 编码器。最终的嵌入向量通过对 token 级表示进行平均池化得到。每个检查点的最大序列长度均为 32,768 个 token。
每个模型均在 34 种语言上进行了评估。三者均采用 OpenMDW 许可协议 1.1 版本(OpenMDW-1.1)。值得注意的是,其基础模型均为 Mistral 模型。8B 版本基于 Ministral-3-8B-Instruct-2512 构建。两个 1B 变体均使用 Ministral-3-3B-Instruct-2512。
性能表现
截至 2026 年 7 月 17 日,Nemotron-3-Embed-8B-BF16 在检索嵌入基准测试 RTEB 上总体排名第一。评估涵盖其 16 项公开任务。下表中的所有数值均为模型序列长度 4096 时的平均 NDCG@10。
| 模型 | 参数量 | 嵌入维度 | RTEB | ViDoRe-V3 文本 | MMTEB(检索) |
|---|---|---|---|---|---|
| Nemotron-3-Embed-8B-BF16 | 约 8B | 4096 | 78.46 | 60.60 | 75.45 |
| Nemotron-3-Embed-1B-BF16 | 1.14B | 2048 | 72.38 | 57.74 | 71.04 |
| Nemotron-3-Embed-1B-NVFP4 | 1.14B | 2048 | 72.00 | — | — |
| llama-nemotron-embed-vl-1b-v2 | — | — | 61.98 | 52.54 | 59.71 |
| llama-nemotron-embed-1b-v2 | — | — | 60.47 | 52.10 | 59.58 |
有两个差距值得注意。1B 模型相比上一代基线 llama-nemotron-embed-vl-1b-v2,在 RTEB 上提升了 10.4 分。另外,NVFP4 相比其 BF16 基础模型,仅损失了 0.38 个 RTEB 分数,相当于保留了 99.5% 的性能。
1B 模型是如何构建的?
这些 1B 模型的分数来自一个压缩流程,而非更小规模的训练过程。其基础模型是 nemotron-3-embed-3b,经过两轮迭代的剪枝和知识蒸馏。
首先,使用 NVIDIA ModelOpt 的 mcore_minitron 神经架构搜索(NAS)将 3B 基础模型剪枝至 2B。该搜索覆盖了隐藏层宽度、FFN 大小、注意力头数和深度。然后从排名前 10 的帕累托前沿中选出最佳候选。一个包含 50k 条数据的领域内校准语料库对这些候选进行了评分。
接下来,2B 模型是从微调后的 8B 嵌入向量教师模型中蒸馏出来的。蒸馏过程结合了余弦距离损失(COS)和均方误差损失(MSE)。数据混合集包含多语言和领域内数据。最后,重复相同流程,生成了 1.14B 检查点。
NVFP4 推理服务权衡
压缩随后进入推理服务格式阶段。量化仅针对线性层的权重和激活值,目标数据类型为 NVFP4。研究团队使用了 nvidia-modelopt v0.45.0。随后进行了量化感知蒸馏(QAD),主要目的是在长输入场景下恢复精度。
校准使用了 512 个样本:来自 abisee/cnn_dailymail 的 256 个查询和 256 个段落。QAD 训练使用了 2 万个样本。
研究团队报告称,Blackwell 上的 NVFP4 吞吐量比 BF16 高出 2 倍。它保留了 BF16 检索精度的 99% 以上。NVFP4 卡还支持动态嵌入向量大小。你可以从 2048 维向量的起始位置切分出 1024 或 512 维。之后需要重新归一化。
交互式说明:五阶段检索路径
在接触代码之前,先观察路径的运行过程。它会以动画形式展示前缀添加、双向编码、平均池化、L2 归一化和点积评分。评分来自每张卡片公布的预期输出。
部署矩阵
正如上述演示所暗示的,这些检查点并不共享运行时路径。
| 特性 | 8B-BF16 | 1B-BF16 | 1B-NVFP4 |
|---|---|---|---|
| Transformers / Sentence Transformers | 是 | 是 | 否 |
| 用于 /v2/embed 的 vLLM | 0.25.0 | 0.25.0 | 0.25.0 |
| 微架构 | Ampere, Hopper, Blackwell | Ampere, Hopper, Blackwell | Ampere, Hopper, Lovelace, Blackwell |
| 测试硬件 | A100 80GB, H100 80GB | A100 80GB, H100 80GB | GB200, RTX 6000 PRO, A100, H100, L40, L4 |
| 训练数据 | 5000 万以上样本 | 850 万以上(蒸馏) | 2 万(QAD) |
除了检查点之外,NVIDIA 研究团队还发布了针对 1B 模型的优化版 NIM 微服务。基于 Rust 的 NIM 在 GB200 和 RTX PRO 6000 上达到或超越了 vLLM 检查点的性能。NVIDIA 测试了 256 和 1024 的输入序列长度。此外,NVIDIA NeMo AutoModel 配方涵盖了微调和蒸馏。
在代码中使用它
基于这些思路,前缀优先。查询使用 `query:` 前缀,文档使用 `passage:` 前缀。嵌入向量经过 L2 归一化处理,因此点积等于余弦相似度。
# pip install --upgrade "transformers>=5.2.0" "sentence-transformers>=5.4.1"
import torch
from sentence_transformers import SentenceTransformer
QUERIES = ["How can someone reduce exposure to pollen during allergy season?"]
DOCUMENTS = ["People with pollen allergy can reduce exposure by staying indoors "
"on dry, windy days, avoiding early-morning outdoor activity, and "
"going outside after rain when pollen levels are lower."]
model = SentenceTransformer(
"nvidia/Nemotron-3-Embed-8B-BF16",
device="cuda",
model_kwargs={"dtype": torch.bfloat16,
# use "sdpa" if FlashAttention-2 is unavailable
"attn_implementation": "flash_attention_2"},
processor_kwargs={"padding_side": "left"},
)
model.max_seq_length = 32768
q = model.encode_query(QUERIES, batch_size=1, convert_to_tensor=True)
d = model.encode_document(DOCUMENTS, batch_size=1, convert_to_tensor=True)
print(model.similarity(q, d)) # card's published q[3]/d[3] score: 0.8008 `encode_query` 和 `encode_document` 会读取已保存的提示词。因此你无需手动添加前缀。在服务端,`/v2/embed` 会根据 `input_type` 自动应用这些前缀:
vllm serve nvidia/Nemotron-3-Embed-1B-NVFP4 \
--max-model-len 4096 \
--max-num-batched-tokens 4096 \
--max-cudagraph-capture-size 4096 import numpy as np, requests
def embed(input_type: str, texts: list[str]) -> np.ndarray:
r = requests.post(
"http://localhost:8000/v2/embed",
json={"model": "nvidia/Nemotron-3-Embed-1B-NVFP4",
"input_type": input_type, # "query" or "document"
"texts": texts,
"embedding_types": ["float"],
"truncate": "END"},
timeout=120,
)
r.raise_for_status()
return np.array(r.json()["embeddings"]["float"], dtype=np.float32)
scores = embed("query", QUERIES) @ embed("document", DOCUMENTS).T 应用场景与示例
- 多语言企业搜索:支持团队将印地语、日语和英语的工单统一建立索引。由于检索是跨语言的,德语查询可以找到日语编写的解决方案记录。
- 代码检索:训练数据包含 `coir_apps`、`coir_cosqa`、`synthetic_text2sql` 以及 SWE-bench。因此,自然语言到代码的查找更接近分布内场景。
- 智能体记忆:32,768 个 token 的限制让智能体能够嵌入较长的对话摘要,而无需进行激进的切分。
- 成本分层 RAG:使用 1B-NVFP4 模型处理高容量召回,将困难查询路由至 8B 模型。由于维度不同,这需要两个索引。
关键要点
- Nemotron-3-Embed-8B-BF16 在 RTEB 基准测试中排名第一,平均 NDCG@10 达到 78.46。
- 提供了三个开放检查点,涵盖 8B BF16、1B BF16 和 1B NVFP4。
- NVFP4 在 Blackwell 架构上吞吐量提升高达 2 倍的同时,保留了 BF16 精度 99% 以上的性能。
- 1B 模型通过 ModelOpt NAS 剪枝,并结合从 8B 模型进行的 COS+MSE 知识蒸馏得到。
- 所有检查点均使用 OpenMDW-1.1 数据集,并支持 32,768 个 token 的输入。
Embedding models decide which passages an agent ever sees. NVIDIA released Nemotron 3 Embed model to work on that layer. It targets production-scale RAG, agentic retrieval, code retrieval, and agent memory.
What is Nemotron 3 Embed?
The model collection includes three open checkpoints. Nemotron-3-Embed-8B-BF16 is the accuracy-first option. Nemotron-3-Embed-1B-BF16 carries the same design into a smaller footprint. Nemotron-3-Embed-1B-NVFP4 is the Blackwell-optimized 4-bit path.
All three are transformer encoders trained with bidirectional attention masking. The final embedding comes from average pooling over token-level representations. Maximum sequence length is 32,768 tokens on every checkpoint.
Each model was evaluated across 34 languages. All three carry the OpenMDW License Agreement, version 1.1 (OpenMDW-1.1). Notably, the bases are Mistral models. The 8B is built with Ministral-3-8B-Instruct-2512. Both 1B variants use Ministral-3-3B-Instruct-2512.
Performance
Nemotron-3-Embed-8B-BF16 ranks #1 overall on RTEB (as of July 17 2026), the Retrieval Embedding Benchmark. Evaluation covers its 16 public tasks. Every figure below is average NDCG@10, at model sequence length 4096.
| Model | Params | Emb dim | RTEB | ViDoRe-V3 text | MMTEB (Retrieval) |
|---|---|---|---|---|---|
| Nemotron-3-Embed-8B-BF16 | ~8B | 4096 | 78.46 | 60.60 | 75.45 |
| Nemotron-3-Embed-1B-BF16 | 1.14B | 2048 | 72.38 | 57.74 | 71.04 |
| Nemotron-3-Embed-1B-NVFP4 | 1.14B | 2048 | 72.00 | — | — |
| llama-nemotron-embed-vl-1b-v2 | — | — | 61.98 | 52.54 | 59.71 |
| llama-nemotron-embed-1b-v2 | — | — | 60.47 | 52.10 | 59.58 |
Two gaps are worth noting. The 1B gains 10.4 RTEB points over llama-nemotron-embed-vl-1b-v2, the prior-generation baseline. Separately, NVFP4 costs 0.38 RTEB points against its BF16 parent, or 99.5% retention.
How the 1B Model was Built?
Those 1B scores come from a compression pipeline, not a smaller training run. The parent was nemotron-3-embed-3b, pruned and distilled across two iterative rounds.
First, the 3B parent was pruned to 2B using NVIDIA ModelOpt mcore_minitron Neural Architecture Search (NAS). The search covers hidden width, FFN size, attention heads, and depth. It then picks the best candidate from the top-10 Pareto front. A 50k in-domain calibration corpus scored those candidates.
Next, the 2B model was distilled from the fine-tuned 8B embedding teacher. Distillation combined cosine distance loss (COS) and mean squared error (MSE) loss. The data blend was multilingual and in-domain. Finally, the same procedure repeated to produce the 1.14B checkpoint.
The NVFP4 Serving Tradeoff
Compression then continues into the serving format. Quantization hit weights and activations of linear layers only, targeting the NVFP4 data type. The research team used nvidia-modelopt v0.45.0. Quantization-Aware Distillation (QAD) followed, primarily to recover accuracy on long inputs.
Calibration used 512 samples: 256 queries and 256 passages from abisee/cnn_dailymail. QAD training used 20k samples.
The rsesearch team reports NVFP4 on Blackwell delivers up to 2x higher throughput than BF16. It retains 99%+ of BF16 retrieval accuracy. The NVFP4 card also documents dynamic embedding sizes. You can slice the 2048-d vector from the start to 1024 or 512 dimensions. Re-normalize afterward.
Interactive Explainer: The Five-Stage Retrieval Path
Before touching code, watch the path run. It animates prefixing, bidirectional encoding, average pooling, L2 normalization, and dot-product scoring. Scores come from each card’s published expected output.
Deployment Matrix
As that walkthrough implies, the checkpoints do not share runtime paths.
| Feature | 8B-BF16 | 1B-BF16 | 1B-NVFP4 |
|---|---|---|---|
| Transformers / Sentence Transformers | Yes | Yes | No |
vLLM for /v2/embed | 0.25.0 | 0.25.0 | 0.25.0 |
| Microarchitectures | Ampere, Hopper, Blackwell | Ampere, Hopper, Blackwell | Ampere, Hopper, Lovelace, Blackwell |
| Test hardware | A100 80GB, H100 80GB | A100 80GB, H100 80GB | GB200, RTX 6000 PRO, A100, H100, L40, L4 |
| Training data | 50M+ samples | 8.5M+ (distillation) | 20k (QAD) |
Alongside the checkpoints, NVIDIA research team released an optimized NIM microservice for the 1B model. The Rust-based NIM matches or outperforms the vLLM checkpoint on GB200 and RTX PRO 6000. NVIDIA tested input sequence lengths of 256 and 1024. Separately, NVIDIA NeMo AutoModel recipes cover fine-tuning and distillation.
Using It in Code
With those paths in mind, prefixes come first. Queries take query: and documents take passage: . Embeddings are L2-normalized, so dot product equals cosine similarity.
# pip install --upgrade "transformers>=5.2.0" "sentence-transformers>=5.4.1"
import torch
from sentence_transformers import SentenceTransformer
QUERIES = ["How can someone reduce exposure to pollen during allergy season?"]
DOCUMENTS = ["People with pollen allergy can reduce exposure by staying indoors "
"on dry, windy days, avoiding early-morning outdoor activity, and "
"going outside after rain when pollen levels are lower."]
model = SentenceTransformer(
"nvidia/Nemotron-3-Embed-8B-BF16",
device="cuda",
model_kwargs={"dtype": torch.bfloat16,
# use "sdpa" if FlashAttention-2 is unavailable
"attn_implementation": "flash_attention_2"},
processor_kwargs={"padding_side": "left"},
)
model.max_seq_length = 32768
q = model.encode_query(QUERIES, batch_size=1, convert_to_tensor=True)
d = model.encode_document(DOCUMENTS, batch_size=1, convert_to_tensor=True)
print(model.similarity(q, d)) # card's published q[3]/d[3] score: 0.8008 encode_query and encode_document read the saved prompts. So you never add prefixes by hand. For serving, /v2/embed applies them from input_type instead:
vllm serve nvidia/Nemotron-3-Embed-1B-NVFP4 \
--max-model-len 4096 \
--max-num-batched-tokens 4096 \
--max-cudagraph-capture-size 4096 import numpy as np, requests
def embed(input_type: str, texts: list[str]) -> np.ndarray:
r = requests.post(
"http://localhost:8000/v2/embed",
json={"model": "nvidia/Nemotron-3-Embed-1B-NVFP4",
"input_type": input_type, # "query" or "document"
"texts": texts,
"embedding_types": ["float"],
"truncate": "END"},
timeout=120,
)
r.raise_for_status()
return np.array(r.json()["embeddings"]["float"], dtype=np.float32)
scores = embed("query", QUERIES) @ embed("document", DOCUMENTS).T Use Cases With Examples
- Multilingual enterprise search: A support team indexes Hindi, Japanese, and English tickets together. Because retrieval is cross-lingual, a German query can surface a Japanese resolution note.
- Code retrieval: Training included
coir_apps,coir_cosqa,synthetic_text2sql, and SWE-bench. Natural-language-to-code lookup is therefore closer to in-distribution. - Agent memory: The 32,768-token limit lets an agent embed long conversation summaries without aggressive chunking.
- Cost-tiered RAG: Serve 1B-NVFP4 for high-volume recall, and route hard queries to the 8B. Because widths differ, this needs two indexes.
Key Takeaways
- Nemotron-3-Embed-8B-BF16 ranks #1 on RTEB at 78.46 avg NDCG@10.
- Three open checkpoints span 8B BF16, 1B BF16, and 1B NVFP4.
- NVFP4 retains 99%+ of BF16 accuracy at up to 2x Blackwell throughput.
- The 1B came from ModelOpt NAS pruning plus COS+MSE distillation from the 8B.
- All checkpoints use OpenMDW-1.1 and support 32,768-token inputs.