Model reference · open weights

nomic-embed-text-moe

Embeddings nomic-ai Embeddings 2 builds Open weights 2.1M dl/mo

nomic-embed-text-moe is an open-weight embedding model from nomic-ai. nomic-embed-text-v2-moe-GGUF (GGUF) weighs 344 MB; the smallest configuration that runs it is RTX 3060 12 GB.

  • nomic-embed-text-moe is a multilingual text embedding model developed by nomic-ai for sentence-similarity tasks.
  • It features a Mixture of Experts architecture with 475M total parameters and 305M active parameters during inference.
  • The model supports a context length of 2048 tokens and is licensed under apache-2.0.

Summary of the nomic-ai/nomic-embed-text-v2-moe model card, 2026-10-01. The estimate below is for another build of the family.

What it is

Released bynomic-ai
Released2025-02-07
Parameters475M
VRAM344 MB for the weights

What it runs on

Memory and cards for nomic-embed-text-v2-moe-GGUF (GGUF)

344 MBweights, file size
1.1 GBruntime overhead
CardRunsMemory
RTX 3060 12 GBfits11.6 GB
RTX 4060 Ti 16 GBfits15.4 GB
RTX 3090 24 GBfits23.4 GB
RTX 4090 24 GBfits23.4 GB
RTX 5090 32 GBfits31.0 GB
L40S 48 GBfits44.0 GB
A100 80 GBfits78.2 GB
H100 80 GBfits78.1 GB
RTX PRO 6000 Blackwell 96 GBfits93.8 GB
DGX Spark (GB10) 128 GB unifiedfits107 GB
H200 141 GBfits138 GB
B200 180 GBfits176 GB

Builds

Sizes, precisions & builds

BuildParamsPrecisionWeightsSmallest setup
nomic-embed-text-v2-moe ↗ 475MFP32 951 MBRTX 3060 12 GB
nomic-embed-text-v2-moe-GGUF (above) ↗
15 builds: Q2_K 273 MB … F32 1.9 GB
—GGUF 344 MBRTX 3060 12 GB

From the model card

What nomic-ai says about nomic-embed-text-moe

Read the model card

Blog | Technical Report | AWS SageMaker | Atlas Embedding and Unstructured Data Analytics Platform

This model was presented in the paper Training Sparse Mixture Of Experts Text Embedding Models.

Model Overview

nomic-embed-text-v2-moe is a SoTA multilingual MoE text embedding model that excels at multilingual retrieval:

  • High Performance: SoTA Multilingual performance compared to ~300M parameter models, competitive with models 2x in size
  • Multilinguality: Supports ~100 languages and trained on over 1.6B pairs
  • Flexible Embedding Dimension: Trained with Matryoshka Embeddings with 3x reductions in storage cost with minimal performance degradations
  • Fully Open-Source: Model weights, code, and training data (see code repo) released
ModelParams (M)Emb DimBEIRMIRACLPretrain DataFinetune DataCode
Nomic Embed v230576852.8665.80✅✅✅
mE5 Base27876848.8862.30❌❌❌
mGTE Base30576851.1063.40❌❌❌
Arctic Embed v2 Base30576855.4059.90❌❌❌
BGE M3568102448.8069.20❌✅❌
Arctic Embed v2 Large568102455.6566.00❌❌❌
mE5 Large560102451.4066.50❌❌❌

Model Architecture

  • Total Parameters: 475M
  • Active Parameters During Inference: 305M
  • Architecture Type: Mixture of Experts (MoE)
  • MoE Configuration: 8 experts with top-2 routing
  • Embedding Dimensions: Supports flexible dimension from 768 to 256 through Matryoshka representation learning
  • Maximum Sequence Length: 512 tokens
  • Languages: Supports dozens of languages (see Performance section)

Paper Abstract

Transformer-based text embedding models have improved their performance on benchmarks like MIRACL and BEIR by increasing their parameter counts. However, this scaling approach introduces significant deployment challenges, including increased inference latency and memory usage. These challenges are particularly severe in retrieval-augmented generation (RAG) applications, where large models' increased memory requirements constrain dataset ingestion capacity, and their higher latency directly impacts query-time performance. While causal language models have addressed similar efficiency challenges using Mixture of Experts (MoE) architectures, this approach hasn't been successfully adapted to the general text embedding setting. In this paper, we introduce Nomic Embed v2, the first general purpose MoE text embedding model. Our model outperforms models in the same parameter class on both monolingual and multilingual benchmarks while also maintaining competitive performance with models twice its size. We open-source all code, models, and evaluation data to ensure full reproducibility of our training pipeline at https://github.com/nomic-ai/contrastors.

Usage Guide

Installation

The model can be used through SentenceTransformers and Transformers.

For best performance on GPU, please install

pip install torch transformers einops git+https://github.com/nomic-ai/megablocks.git

[!IMPORTANT] Important! The text prompt must include a task instruction prefix, instructing the model which task is being performed.

Please use search_query: before your queries/questions, and search_document: before your documents.

Transformers

If using Transformers, make sure to prepend the task instruction prefix.

import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained("nomic-ai/nomic-embed-text-v2-moe")
model = AutoModel.from_pretrained("nomic-ai/nomic-embed-text-v2-moe", trust_remote_code=True)

sentences = ['search_document: Hello!', 'search_document: ¡Hola!']

def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output[0]
    input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)

encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
model.eval()
with torch.no_grad():
    model_output = model(**encoded_input)
embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
embeddings = F.normalize(embeddings, p=2, dim=1)
print(embeddings.shape)
# torch.Size([2, 768])

similarity = F.cosine_similarity(embeddings[0], embeddings[1], dim=0)
print(similarity)
# tensor(0.9118)

For truncation, you can trucate before applying normalization

+ embeddings = embeddings[:, :matryoshka_dim]
embeddings = F.normalize(embeddings, p=2, dim=1)

SentenceTransformers

With SentenceTransformers, you can specify the prompt_name as either "query" or "passage", and the task instruction will be included automatically.

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("nomic-ai/nomic-embed-text-v2-moe", trust_remote_code=True)
sentences = ["Hello!", "¡Hola!"]
embeddings = model.encode(sentences, prompt_name="passage")
print(embeddings.shape)
# (2, 768)

similarity = model.similarity(embeddings[0], embeddings[1])
print(similarity)
# tensor([[0.9118]])

For truncation/Matryoshka embeddings, you can specify truncate_dim and use the model similarly

model = SentenceTransformer("nomic-ai/nomic-embed-text-v2-moe", trust_remote_code=True, truncate_dim=256)
...

Performance

nomic-embed-t

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms