317 Downloads Updated 1 week ago
ollama pull maternion/nemotron-3.5-embed:8b-q6_k
Ollama builds of NVIDIA’s Nemotron-3.5-Embed family: multilingual multimodal (text + image) embedding models. Converted to GGUF with llama.cpp, then quantized. Both sizes expose the same Ollama API and accept text, images, or text + image.
Multimodal. Every tag bundles its BF16 Pixtral vision projector (
mmproj), soollama showreports thevisioncapability and/api/embedaccepts image input via map-shaped entries:{"text": "...", "image": "<base64>"}. Text-only inputs work as before.
Sizes are what ollama list reports and include the bundled projector.
| Tag | Quantization | Size |
|---|---|---|
maternion/nemotron-3.5-embed:1b |
Q8_0 (default) | 2.1 GB |
maternion/nemotron-3.5-embed:1b-q8_0 |
Q8_0 | 2.1 GB |
maternion/nemotron-3.5-embed:1b-q6_k |
Q6_K | 1.8 GB |
maternion/nemotron-3.5-embed:1b-bf16 |
BF16 | 3.1 GB |
All include the BF16 Pixtral projector (clip, 413.79M parameters).
| Tag | Quantization | Size |
|---|---|---|
maternion/nemotron-3.5-embed:8b |
Q4_K_M (default) | 5.8 GB |
maternion/nemotron-3.5-embed:8b-q4_k_m |
Q4_K_M | 5.8 GB |
maternion/nemotron-3.5-embed:8b-q8_0 |
Q8_0 | 9.3 GB |
maternion/nemotron-3.5-embed:8b-q6_k |
Q6_K | 7.4 GB |
maternion/nemotron-3.5-embed:8b-bf16 |
BF16 | 16 GB |
All include the BF16 Pixtral projector (clip, 428.48M parameters).
The :8b alias points at Q4_K_M, the same way :1b points at Q8_0.
Both sizes support dynamic embedding sizes: truncate the vector from the end (for example to 1024 or 512 dimensions) and re-normalize. Truncated embeddings remain effective for retrieval.
| 1B | 8B | |
|---|---|---|
| Default tag | :1b (Q8_0, 2.1 GB) |
:8b (Q4_K_M, 5.8 GB) |
| Best for | CPU, edge, high-throughput indexing | best retrieval quality |
| NDCG@10 (ViDoRe V3 image+text) | 58.82 | 61.47 |
Do not mix sizes in one index. A 1B vector and an 8B vector are not comparable. Index and query with the same tag.
ollama run maternion/nemotron-3.5-embed:1b "query: What is NVIDIA NeMo Framework?"
ollama run maternion/nemotron-3.5-embed:8b "query: What is NVIDIA NeMo Framework?"
This prints the raw vector. Use the HTTP API for real workloads.
Use the model’s task prefixes:
query:passage:Docs: https://docs.ollama.com/api/embed
Single input:
curl http://localhost:11434/api/embed -d '{
"model": "maternion/nemotron-3.5-embed:8b",
"input": "query: What is NVIDIA NeMo Framework?"
}'
Batch of queries and documents:
curl http://localhost:11434/api/embed -d '{
"model": "maternion/nemotron-3.5-embed:8b",
"input": [
"query: What is NVIDIA NeMo Framework?",
"passage: NeMo Framework offers comprehensive functionalities for developing both LLMs and Multimodal Models.",
"passage: A biological foundation model designed to analyze and generate DNA, RNA, and protein sequences."
]
}'
Python with cosine similarity (swap :1b for :8b as needed):
import requests
import numpy as np
URL = "http://localhost:11434/api/embed"
MODEL = "maternion/nemotron-3.5-embed:8b" # or :1b
def embed(inputs):
r = requests.post(URL, json={"model": MODEL, "input": inputs})
r.raise_for_status()
return np.array(r.json()["embeddings"], dtype=np.float32)
vectors = embed([
"query: What is NVIDIA NeMo Framework?",
"passage: NeMo Framework offers comprehensive functionalities for developing both LLMs and Multimodal Models.",
"passage: A biological foundation model designed to analyze and generate DNA, RNA, and protein sequences.",
])
print(vectors.shape)
scores = vectors[0] @ vectors[1:].T
print(scores)
Truncated embeddings:
curl http://localhost:11434/api/embed -d '{
"model": "maternion/nemotron-3.5-embed:8b",
"input": "query: What is NVIDIA NeMo Framework?",
"dimensions": 1024
}'
/api/embed accepts map-shaped entries with any of text, image, or audio (base64). Image + query:
IMG=$(base64 -w0 screenshot.png)
curl http://localhost:11434/api/embed -d "{
\"model\": \"maternion/nemotron-3.5-embed:8b\",
\"input\": {\"text\": \"query: What is shown in this screenshot?\", \"image\": \"$IMG\"}
}"
Or from Python, including image-only and a mixed batch:
import base64
import requests
URL = "http://localhost:11434/api/embed"
MODEL = "maternion/nemotron-3.5-embed:8b" # or :1b
b64 = base64.b64encode(open("screenshot.png", "rb").read()).decode()
def embed(inp):
r = requests.post(URL, json={"model": MODEL, "input": inp})
r.raise_for_status()
return r.json()["embeddings"]
print(len(embed({"text": "query: What is shown?", "image": b64})[0]))
embed({"image": b64}) # image only
vecs = embed([ # mixed batch
"query: What is shown?",
{"image": b64},
{"text": "passage: a screenshot", "image": b64},
])
print(len(vecs)) # 3
Docs: https://docs.ollama.com/api/embed. The Go API (Input) documents the accepted shapes: a string, []string, or maps with text/image/audio.
The same GGUFs also run under llama.cpp if you are not using Ollama. Files are on Hugging Face:
1B:
./build/bin/llama-server \
-m Nemotron-3.5-Embed-1B-Q8_0.gguf \
-mm mmproj-Nemotron-3.5-Embed-1B-BF16.gguf \
--embedding --pooling mean --ctx-size 8192 -ngl 0 --port 8099
8B:
./build/bin/llama-server \
-m Nemotron-3.5-Embed-8B-Q8_0.gguf \
-mm mmproj-Nemotron-3.5-Embed-8B-BF16.gguf \
--embedding --pooling mean --ctx-size 8192 -ngl 0 --port 8099
Then send an OpenAI-style content array — image first, then the query text:
curl http://127.0.0.1:8099/v1/embeddings \
-H "Content-Type: application/json" \
-d '{
"input": [{
"content": [
{"type": "image_url", "image_url": {"url": "data:image/png;base64,<BASE64>"}},
{"type": "text", "text": "query: What is shown in this screenshot?"}
]
}]
}'
Or from Python:
import base64
import requests
b64 = base64.b64encode(open("screenshot.png", "rb").read()).decode()
r = requests.post("http://127.0.0.1:8099/v1/embeddings", json={
"input": [{"content": [
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}},
{"type": "text", "text": "query: What is shown in this screenshot?"},
]}]
})
print(len(r.json()["data"][0]["embedding"]))
The legacy non-OAI endpoint is POST /embedding, which takes the { "prompt_string": "... <__media__> ...", "multimodal_data": ["<base64>"] } form (see the llama.cpp server docs).
For the official vLLM /v2/embed image API, see the upstream model cards:
1B and
8B.
NDCG@10:
| Model | ViDoRe V3 image | ViDoRe V3 text | ViDoRe V3 image+text | MIRACL-VISION image |
|---|---|---|---|---|
| Qwen3-VL-Embedding-2B | 52.89 | 48.31 | 51.97 | 58.42 |
| Nemotron-3.5-Embed-1B-BF16 | 58.02 | 57.80 | 58.82 | 68.93 |
| Qwen3-VL-Embedding-8B | 58.29 | 53.69 | 57.03 | 68.33 |
| Nemotron-3.5-Embed-8B-BF16 | 60.39 | 60.65 | 61.47 | 72.64 |
Published BF16 scores; quantized variants may differ slightly. These benchmarks include image retrieval, which the bundled projector supports through the map-shaped /api/embed input.
OpenMDW-1.1. Base models: Apache 2.0.