Nemotron-3-Embed-1B-BF16
Nemotron-3-Embed-1B-BF16 is a compact multilingual text embedding model from NVIDIA, pruned and distilled from Ministral-3 to ~1B parameters, that maps text into 2048-dimensional dense vectors for retrieval and semantic similarity. Spanning 34 languages, it delivers state-of-the-art quality among similarly sized models for RAG and multilingual question-answering while keeping compute cost low.

Nemotron-3-Embed-1B-BF16
Nemotron-3-Embed-1B-BF16 is a versatile text embedding model trained by NVIDIA and optimized for retrieval and semantic similarity tasks. It provides strong multilingual and cross-lingual retrieval capabilities and is designed to serve as a foundational component in text-based Retrieval-Augmented Generation (RAG) systems.
Evaluated across 34 languages: English, Arabic, Assamese, Bengali, Bulgarian, Chinese, Danish, Dutch, Finnish, French, German, Hindi, Hinglish, Indonesian, Italian, Japanese, Korean, Malay, Marathi, Nepali, Norwegian, Persian, Portuguese, Romanian, Russian, Spanish, Swahili, Swedish, Tamil, Telugu, Thai, Ukrainian, Urdu, Vietnamese.
The model generates dense vector embeddings from multilingual text inputs, enabling retrieval, semantic search, and (agentic) RAG workflows. As a core component of text retrieval systems, an embedding model transforms text — such as questions or passages — into dense vector representations. These models are typically transformer encoders that process input tokens and produce embeddings suitable for efficient similarity matching.
Among models of comparable size, Nemotron-3-Embed-1B-BF16 achieves state-of-the-art performance across multiple multilingual retrieval benchmarks.
This model is ready for commercial use.
License / Terms of Use
Licensed under the OpenMDW License Agreement, version 1.1 (OpenMDW-1.1).
Additional Information: Built with Ministral-3-3B-Instruct-2512, released under Apache 2.0.
This project will download and install additional third-party open source software projects. Review the license terms of these open source projects before use.
Deployment Geography
Global
Use Case
Nemotron-3-Embed-1B-BF16 is most suitable for users who want to build a multilingual question-and-answer application over a large text corpus, leveraging the latest dense retrieval technologies.
Release Date
07/16/2026 via huggingface.co/nvidia/Nemotron-3-Embed-1B-BF16
Model Architecture
| Property | Value |
|---|---|
| Architecture Type | Transformer |
| Network Architecture | Ministral-3-3B-Instruct-2512 based pruned model |
| Number of Parameters | ~1.14B |
| Hidden Size | 2048 |
The Nemotron-3-Embed-1B-BF16 model is a transformer-based text embedding model trained with bidirectional attention masking, where the final embedding vector is obtained by applying average pooling to the transformer's token-level representations. It encodes each input text into a dense embedding vector of dimension 2048.
Training Lineage
Nemotron-3-Embed-1B-BF16 was derived from the Ministral-3-3B-Instruct-2512 through two iterative rounds of structured pruning and distillation:
- The 3B parent model was trained as a text-embedding model.
- It was pruned to 2B using NVIDIA ModelOpt
mcore_minitronNeural Architecture Search (NAS) (NVIDIA/Model-Optimizer, paper). This process searches across hidden width, FFN size, attention heads, and depth, then selects the best candidate from the top-10 Pareto front. Candidates were evaluated against the parent model's representations using a 50k in-domain calibration corpus, which was also used to estimate importance scores. - The resulting 2B model was then distilled from the fine-tuned Nemotron-3-Embed-8B-BF16 embedding teacher model to recover accuracy. Distillation used combined cosine distance loss (COS) and mean squared error (MSE) loss on a multilingual, in-domain retrieval data blend.
- The same pruning-and-distillation procedure, using the same dataset blend, was repeated to produce the final 1.14B embedding model.
Input / Output
Input
- Type: Text
- Format: List of strings
- Parameters: One-Dimensional (1D)
- Notes: Text inputs should be tokenized by the model tokenizer. Max sequence length is 32768. Longer inputs should be chunked or truncated.
Output
- Type: Floats
- Format: List of float arrays
- Parameters: One-Dimensional (1D) embedding vector per input text string
- Notes: Outputs a 2048-dimensional embedding vector per input text string. Supports dynamic embedding sizes by slicing the vector from the start (e.g., keeping the first 1024 or 512 dimensions). Sliced embeddings remain highly functional, provided the resulting sub-vector is re-normalized (L2 normalization) after slicing.
Our AI models are designed and/or optimized to run on NVIDIA GPU-accelerated systems, leveraging NVIDIA's hardware (GPU cores) and software frameworks (CUDA libraries) for faster training and inference compared to CPU-only solutions.
Usage
For local Python examples, use the Hugging Face model ID by default. If working from a local checkout, replace MODEL_ID with that path. For vLLM online serving from a local checkpoint, use the local checkpoint example.
MODEL_ID = "nvidia/Nemotron-3-Embed-1B-BF16"Use this model for retrieval-style embeddings. Add the query: prefix for queries and the passage: prefix for documents. Embeddings are L2-normalized, so dot product and cosine similarity are equivalent. The output tables use q[i] for queries and d[i] for documents. Scores are rounded to four decimals. Exact values can vary by runtime and package version.
Local Python Dependencies
BF16 checkpoints support Transformers 5.2.0+. Examples also require a CUDA-enabled PyTorch installation matching your driver and CUDA environment.
If not using an NVIDIA PyTorch container, install PyTorch first using the PyTorch local installation selector matching your OS, package manager, and CUDA environment. If the default PyPI wheel matches your CUDA environment:
pip install --upgrade torchFor non-default CUDA environments, the selector can include an additional --index-url argument.
Then install Transformers and Sentence Transformers:
pip install --upgrade "transformers>=5.2.0" "sentence-transformers>=5.4.1"NVIDIA tested the examples in nvcr.io/nvidia/pytorch:26.06-py3 with the container-provided Torch and CUDA stack. Inside NVIDIA PyTorch containers, do not upgrade Torch — install only the missing packages:
pip install --upgrade "transformers>=5.2.0" "sentence-transformers>=5.4.1"The tested container includes flash-attn, so the snippets use FlashAttention-2 by default. If your environment does not have FlashAttention-2, set attn_implementation or ATTN_IMPLEMENTATION to sdpa.
Sentence Transformers
Use Sentence Transformers for the simplest local Python interface. It reads the saved query and document prompts and normalization metadata.
import torch
from sentence_transformers import SentenceTransformer
MODEL_ID = "nvidia/Nemotron-3-Embed-1B-BF16"
model = SentenceTransformer(
MODEL_ID,
device="cuda",
model_kwargs={
"dtype": torch.bfloat16,
"attn_implementation": "flash_attention_2",
},
)
model.max_seq_length = 32768
QUERIES = [
"Write a Python function that counts the frequency of each element in a list of lists.",
"Write a function that orders a dictionary with tuple keys by the product of each key's tuple values.",
"What symptoms and common triggers help distinguish eczema from other inflammatory skin conditions?",
"How can someone reduce exposure to pollen during allergy season?",
]
DOCUMENTS = [
"def frequency_lists(list1):\n flattened = [item for sublist in list1 for item in sublist]\n counts = {}\n for item in flattened:\n if item in counts:\n counts[item] += 1\n else:\n counts[item] = 1\n return counts",
"def sort_dict_item(test_dict):\n return {key: test_dict[key] for key in sorted(test_dict.keys(), key=lambda ele: ele[0] * ele[1])}",
"Eczema commonly causes itchy, dry, inflamed patches of skin. The affected areas may look red, scaly, cracked, or darker than the surrounding skin depending on skin tone. Symptoms can flare after exposure to irritants, allergens, stress, or changes in weather.",
"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. They should check pollen forecasts, close windows and doors when counts are high, and consider starting allergy medication before symptoms begin if high pollen is expected. After being outside, showering, changing clothes, avoiding outdoor laundry drying, and wearing a face mask for yard work can help limit pollen contact.",
]
query_embeddings = model.encode_query(QUERIES, batch_size=8, convert_to_tensor=True)
document_embeddings = model.encode_document(DOCUMENTS, batch_size=8, convert_to_tensor=True)
scores = model.similarity(query_embeddings, document_embeddings)
print("Similarity scores:")
print(f"{'':>4}" + "".join(f"d[{i}]".rjust(10) for i in range(scores.shape[1])))
for query_index, row in enumerate(scores):
print(f"q[{query_index}]" + "".join(f"{score.item():>10.4f}" for score in row))Transformers
Use Transformers when you want manual control over tokenization, pooling, or batching.
import torch
import torch.nn.functional as F
from transformers import AutoModel, AutoTokenizer
MODEL_ID = "nvidia/Nemotron-3-Embed-1B-BF16"
MAX_LENGTH = 32768
BATCH_SIZE = 8
DTYPE = torch.bfloat16
ATTN_IMPLEMENTATION = "flash_attention_2"
QUERIES = [
"Write a Python function that counts the frequency of each element in a list of lists.",
"Write a function that orders a dictionary with tuple keys by the product of each key's tuple values.",
"What symptoms and common triggers help distinguish eczema from other inflammatory skin conditions?",
"How can someone reduce exposure to pollen during allergy season?",
]
DOCUMENTS = [
"def frequency_lists(list1):\n flattened = [item for sublist in list1 for item in sublist]\n counts = {}\n for item in flattened:\n if item in counts:\n counts[item] += 1\n else:\n counts[item] = 1\n return counts",
"def sort_dict_item(test_dict):\n return {key: test_dict[key] for key in sorted(test_dict.keys(), key=lambda ele: ele[0] * ele[1])}",
"Eczema commonly causes itchy, dry, inflamed patches of skin. The affected areas may look red, scaly, cracked, or darker than the surrounding skin depending on skin tone. Symptoms can flare after exposure to irritants, allergens, stress, or changes in weather.",
"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. They should check pollen forecasts, close windows and doors when counts are high, and consider starting allergy medication before symptoms begin if high pollen is expected. After being outside, showering, changing clothes, avoiding outdoor laundry drying, and wearing a face mask for yard work can help limit pollen contact.",
]
def average_pool(last_hidden_state: torch.Tensor, attention_mask: torch.Tensor) -> torch.Tensor:
last_hidden = last_hidden_state.masked_fill(~attention_mask[..., None].bool(), 0.0)
return last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None]
if not torch.cuda.is_available():
raise RuntimeError("CUDA is required for practical BF16 inference.")
device = torch.device("cuda")
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, padding_side="left")
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
model = AutoModel.from_pretrained(
MODEL_ID,
dtype=DTYPE,
attn_implementation=ATTN_IMPLEMENTATION,
).to(device)
model.eval()
def encode_texts(texts: list[str]) -> torch.Tensor:
embedding_batches = []
for start in range(0, len(texts), BATCH_SIZE):
encoded = tokenizer(
texts[start : start + BATCH_SIZE],
max_length=MAX_LENGTH,
truncation=True,
padding=True,
return_tensors="pt",
)
encoded = {name: tensor.to(device) for name, tensor in encoded.items()}
with torch.inference_mode():
output = model(**encoded)
pooled = average_pool(output.last_hidden_state, encoded["attention_mask"])
embeddings = F.normalize(pooled, p=2, dim=-1)
embedding_batches.append(embeddings.detach().cpu().to(torch.float32))
return torch.cat(embedding_batches, dim=0)
embeddings = encode_texts(
["query: " + query for query in QUERIES]
+ ["passage: " + doc for doc in DOCUMENTS]
)
query_embeddings = embeddings[: len(QUERIES)]
document_embeddings = embeddings[len(QUERIES) :]
scores = query_embeddings @ document_embeddings.T
print("Similarity scores:")
print(f"{'':>4}" + "".join(f"d[{i}]".rjust(10) for i in range(scores.shape[1])))
for query_index, row in enumerate(scores):
print(f"q[{query_index}]" + "".join(f"{score.item():>10.4f}" for score in row))vLLM Dependencies
For BF16, use vllm==0.25.0 for /v2/embed serving. NVIDIA also validated vllm serve "$MODEL_ID" with vllm/vllm-openai:v0.20.0 through v0.24.0 for this checkpoint.
pip install --upgrade "vllm==0.25.0" openai requests numpyvLLM Offline Python
Use the offline Python API for local vLLM inference without running an HTTP server. LLM.embed accepts formatted strings, so add the query: and passage: prefixes manually.
(See official offline Python example and expected output on the model page.)
vLLM Online Serving
MODEL_ID=nvidia/Nemotron-3-Embed-1B-BF16
vllm serve "$MODEL_ID"vLLM defaults to port 8000. Add host and port for an explicit bind address or non-default port:
vllm serve "$MODEL_ID" --host 0.0.0.0 --port 8000If serving the Hugging Face model ID, the served model name defaults to nvidia/Nemotron-3-Embed-1B-BF16. If serving a local checkpoint path, vLLM still reads the model config and weights from that path; --served-model-name only sets the model name accepted by API requests.
MODEL_PATH=/path/to/local/Nemotron-3-Embed-1B-BF16
vllm serve "$MODEL_PATH" --host 0.0.0.0 --port 8000 --served-model-name nvidia/Nemotron-3-Embed-1B-BF16With --served-model-name, client requests continue to use MODEL = "nvidia/Nemotron-3-Embed-1B-BF16". Otherwise, use the served name reported by /v1/models.
Recommended Retrieval Endpoint
After the server is running, use /v2/embed for retrieval. Send raw query and document strings. input_type applies the saved query and document prompts:
import numpy as np
import requests
MODEL = "nvidia/Nemotron-3-Embed-1B-BF16"
URL = "http://localhost:8000/v2/embed"
QUERIES = [
"Write a Python function that counts the frequency of each element in a list of lists.",
"Write a function that orders a dictionary with tuple keys by the product of each key's tuple values.",
"What symptoms and common triggers help distinguish eczema from other inflammatory skin conditions?",
"How can someone reduce exposure to pollen during allergy season?",
]
DOCUMENTS = [
"def frequency_lists(list1):\n flattened = [item for sublist in list1 for item in sublist]\n counts = {}\n for item in flattened:\n if item in counts:\n counts[item] += 1\n else:\n counts[item] = 1\n return counts",
"def sort_dict_item(test_dict):\n return {key: test_dict[key] for key in sorted(test_dict.keys(), key=lambda ele: ele[0] * ele[1])}",
"Eczema commonly causes itchy, dry, inflamed patches of skin. The affected areas may look red, scaly, cracked, or darker than the surrounding skin depending on skin tone. Symptoms can flare after exposure to irritants, allergens, stress, or changes in weather.",
"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. They should check pollen forecasts, close windows and doors when counts are high, and consider starting allergy medication before symptoms begin if high pollen is expected. After being outside, showering, changing clothes, avoiding outdoor laundry drying, and wearing a face mask for yard work can help limit pollen contact.",
]
def embed(input_type: str, texts: list[str]) -> np.ndarray:
response = requests.post(
URL,
json={
"model": MODEL,
"input_type": input_type,
"texts": texts,
"embedding_types": ["float"],
"truncate": "END",
},
timeout=120,
)
response.raise_for_status()
return np.array(response.json()["embeddings"]["float"], dtype=np.float32)
query_embeddings = embed("query", QUERIES)
document_embeddings = embed("document", DOCUMENTS)
scores = query_embeddings @ document_embeddings.T
print("Similarity scores:")
print(f"{'':>4}" + "".join(f"d[{i}]".rjust(10) for i in range(scores.shape[1])))
for query_index, row in enumerate(scores):
print(f"q[{query_index}]" + "".join(f"{score:>10.4f}" for score in row))You can also use the OpenAI-compatible /v1/embeddings endpoint. For those requests, pass strings in input and manually prefix them with query: or passage:.
Expected Configuration Warning
When this checkpoint is loaded by Transformers (directly or via Sentence Transformers or vLLM), the following warning may appear:
[transformers] Unrecognized keys in `rope_parameters` for 'rope_type'='yarn': {'apply_yarn_scaling'}This warning is expected and does not prevent model loading or inference. apply_yarn_scaling is retained as a temporary vLLM compatibility field that preserves the checkpoint's intended long-context RoPE behavior. Do not remove it from config.json. The upstream compatibility work is tracked in vLLM issue #48621.
Software Integration
| Property | Value |
|---|---|
| Runtime Engine(s) | PyTorch, vLLM |
| Supported Hardware Microarchitecture | NVIDIA Ampere, NVIDIA Blackwell, NVIDIA Hopper |
| Supported Operating System(s) | Linux |
The integration of foundation and fine-tuned models into AI systems requires additional testing using use-case-specific data to ensure safe and effective deployment. Following the V-model methodology, iterative testing and validation at both unit and system levels are essential to mitigate risks, meet technical and functional requirements, and ensure compliance with safety and ethical standards before deployment.
Model Version(s)
Nemotron-3-Embed-1B-BF16
Training, Testing, and Evaluation Datasets
Dataset Overview
- Total Size: 8.5M+ data points
- Total Number of Dataset Files: 161
- Dataset Partition: Training [100%], Testing [N/A — evaluation benchmarks used separately], Validation [N/A — evaluation benchmarks used separately]
Model distillation training was conducted using publicly available, commercially permissible datasets and synthetically generated datasets. Synthetic data was created either by generating queries from seed documents or by generating complete question–answer pairs through LLM-based prompting using the models listed below.
Public Datasets
Synthetic Datasets
Synthetic query-document pairs were generated either from scratch or by using seed datasets to generate queries with the models listed below.
LLMs used to generate synthetic datasets:
- Qwen/Qwen3-Next-80B-A3B-Instruct
- Qwen/Qwen3-235B-A22B
- Qwen/Qwen3.5-397B-A17B
- Qwen/Qwen3.6-27B
- Qwen/Qwen3.6-35B-A3B
- google/gemma-4-31B-it
- openai/gpt-oss-120b
- openai/gpt-oss-20b
- nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16
- nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4
Seed Datasets:
| Dataset | Reference |
|---|---|
| FinePdfs | https://huggingface.co/datasets/HuggingFaceFW/finepdfs |
| CentralActs | https://zenodo.org/records/5088102 |
| BRIGHT | https://huggingface.co/datasets/xlangai/BRIGHT |
| MultiHiertt | https://github.com/psunlpgroup/MultiHiertt |
Training Dataset
- Data Modality: Text
- Text Training Data Size: 8.5M+
- Data Collection Method by dataset: Hybrid: Human, Automated, Synthetic
- Labeling Method by dataset: Hybrid: Human, Automated, Synthetic
- Properties: Model training was conducted on text datasets using question–passage pairs from publicly available, commercially permissible datasets and synthetically generated datasets.
Testing Dataset
- Data Collection Method by dataset: Not Applicable
- Labeling Method by dataset: Not Applicable
- Properties: Not Applicable. Model quality was assessed using the evaluation benchmark datasets described in the Evaluation Dataset subsection.
Evaluation Dataset
- Data Collection Method by dataset: Hybrid: Human, Automated, Synthetic
- Labeling Method by dataset: Hybrid: Human, Automated, Synthetic
- Properties: This model is evaluated on 16 public tasks on Retrieval Embedding Benchmark (RTEB), a new benchmark designed to reliably evaluate the retrieval accuracy of embedding models for real-world applications. More details on RTEB can be found on their leaderboard.
Also evaluated on MMTEB (Retrieval) benchmark datasets (paper), and on the eight text datasets (extracted via OCR) from the ViDoRe-V3 benchmark.
Model sequence length was set to 4096 for the evaluation results below.
Text Retrieval Benchmarks (chunk retrieval) — Avg. NDCG@10
| Model Name | RTEB | ViDoRe-V3 text | MMTEB (Retrieval) |
|---|---|---|---|
| llama-nemotron-embed-vl-1b-v2 | 61.98 | 52.54 | 59.71 |
| Nemotron-3-Embed-1B-BF16 | 72.38 | 57.74 | 71.04 |
Inference
- Acceleration Engine: PyTorch, vLLM
- Test Hardware: NVIDIA Ampere - A100 80GB, NVIDIA Hopper - H100 80GB
Ethical Considerations
NVIDIA believes Trustworthy AI is a shared responsibility, and has established policies and practices to enable development for a wide array of AI applications. Developers should work with their internal model team to ensure this model meets requirements for the relevant industry and use case and addresses unforeseen product misuse.
For more detailed information on ethical considerations for this model, see the Model Card++ Bias, Explainability, Safety & Security, and Privacy Subcards.
Report model quality, risk, security vulnerabilities, or NVIDIA AI concerns here.
Bias
| Field | Response |
|---|---|
| Participation considerations from adversely impacted groups/protected classes in model design and testing | None |
| Measures taken to mitigate against unwanted bias | None |
| Bias Metric (If Measured) | None |
Explainability
| Field | Response |
|---|---|
| Intended Task/Domain | Passage and query embedding for question and answer retrieval |
| Model Type | Transformer encoder |
| Intended Users | Generative AI creators working with conversational AI models — users who want to build a multilingual question and answer application over a large text corpus, leveraging the latest dense retrieval technologies |
| Output | Array of float numbers (Dense Vector Representation for the input text) |
| Describe how the model works | Model transforms the tokenized input text into a dense vector representation |
| Adversely impacted groups tested for comparable outcomes | Not Applicable |
| Technical Limitations & Mitigation | The model's max sequence length is 32768. Longer text inputs should be truncated |
| Verified to have met prescribed NVIDIA quality standards | Yes |
| Performance Metrics | Accuracy, Throughput, and Latency |
| Potential Known Risks | This model does not always guarantee to retrieve the correct passage(s) for a given query |
| Licensing | OpenMDW License Agreement, version 1.1 (OpenMDW-1.1). Built with Ministral-3-3B-Instruct-2512 (Apache 2.0) |
Privacy
| Field | Response |
|---|---|
| Generatable or reverse engineerable personal data? | None |
| Was consent obtained for any personal data used? | Not Applicable |
| Personal data used to create this model? | None Known |
| How often is the dataset reviewed? | Before Every Release |
| Is there provenance for all datasets used in training? | Yes |
| Does data labeling comply with privacy laws? | Yes |
| Was data from user interactions with the AI model used to train the model? | Yes |
| Compliant with data subject requests for correction/removal? | No, not possible with externally-sourced data |
| Applicable Privacy Policy | https://www.nvidia.com/en-us/about-nvidia/privacy-policy/ |
Safety
| Field | Response |
|---|---|
| Model Application(s) | Text Embedding for Retrieval |
| Physical safety impact | Not Applicable |
| Use Case Restrictions | OpenMDW License Agreement, version 1.1 (OpenMDW-1.1). Built with Ministral-3-3B-Instruct-2512 (Apache 2.0) |
| Model and dataset restrictions | The Principle of Least Privilege (PoLP) is applied, limiting access for dataset generation and model development. Restrictions enforce dataset access during training, and dataset license constraints are adhered to |