Model reference · open weights

WeMM-Embedding

Embeddings tencent Embeddings 3 builds Its own licence terms 4k dl/mo

WeMM-Embedding is an open-weight embedding model from tencent. WeMM-Embedding-4B (BF16) weighs 10.3 GB; the smallest configuration that runs it is RTX 3060 12 GB.

  • WeMM-Embedding-2B is a multimodal feature-extraction model developed by Tencent that processes text, images, videos, and visual documents to generate 2,048-dimensional embeddings.
  • The model contains 2.7 billion parameters, supports Chinese and English, and is distributed under the Apache License 2.0.

Summary of the tencent/WeMM-Embedding-2B model card, 2026-10-01. The estimate below is for another build of the family.

What it is

Released bytencent
Released2026-08-25
Parameters2.7B
VRAM10.3 GB for the weights

What it runs on

Memory and cards for WeMM-Embedding-4B (BF16)

10.3 GBweights, file size
1.1 GBruntime overhead
CardRunsMemory
RTX 3060 12 GBtight11.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
WeMM-Embedding-2B ↗ 2.7BBF16 5.4 GBRTX 3060 12 GB
WeMM-Embedding-9B ↗ 9.4BBF16 18.8 GBRTX 4090 24 GB
WeMM-Embedding-4B (above) ↗ 5.2BBF16 10.3 GBRTX 3060 12 GB

From the model card

What tencent says about WeMM-Embedding

Read the model card

WeMM-Embedding-2B is a universal multimodal embedding model built on Qwen3.5. It accepts text, images, videos, visual documents, and interleaved multimodal inputs, and returns a 2,048-dimensional L2-normalized embedding. Audio input is not supported.

Installation

pip install torch transformers==5.2.0 "qwen-vl-utils[decord]==0.0.14" \
  "sentence-transformers>=5.7.0" "accelerate>=1.1.0"

Transformers

import torch
from qwen_vl_utils import process_vision_info
from transformers import AutoModel, AutoProcessor

model_id = "tencent/WeMM-Embedding-2B"
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
model = AutoModel.from_pretrained(
    model_id, trust_remote_code=True, dtype=torch.bfloat16
).cuda().eval()

messages = [{"role": "user", "content": [
    {"type": "image", "image": "/path/to/image.jpg"},
    {"type": "video", "video": "/path/to/video.mp4"},
    {"type": "text", "text": "This can be any text input."},
]}]
text = processor.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=False
)
images, videos, video_kwargs = process_vision_info(
    messages,
    image_patch_size=16,
    return_video_kwargs=True,
    return_video_metadata=True,
)
if videos is not None:
    videos, video_metadata = zip(*videos)
    videos, video_metadata = list(videos), list(video_metadata)
else:
    video_metadata = None
inputs = processor(
    text=text,
    images=images,
    videos=videos,
    video_metadata=video_metadata,
    return_tensors="pt",
    **video_kwargs,
).to("cuda")

with torch.inference_mode():
    embedding = model.embedding(**inputs)

Use any subset of the content items to encode text, image, or video independently.

Sentence Transformers

from sentence_transformers import SentenceTransformer

model_id = "tencent/WeMM-Embedding-2B"
model = SentenceTransformer(model_id, trust_remote_code=True)

queries = [
    "Which Llama 4 model variants are available?",
    "How is mapo tofu prepared?",
]
documents = [
    "Mapo tofu is a Sichuan dish of soft tofu simmered in a spicy, numbing sauce of chili bean paste and Sichuan peppercorn.",
    {
        "image": "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/llama4_hgf.png",
        "text": "Represent this image.",
    },
    {
        "video": "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/mapo_tofu.mp4",
        "text": "Represent this video.",
    },
]

query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings.shape)
# (2, 2048) (3, 2048)

similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[0.0683, 0.4972, 0.0309],
#         [0.7829, 0.1428, 0.5492]])

Each input is a string, a URL or path, a PIL.Image, or a dict combining image, video, and text keys. Put image or video before text so the prompt matches the ordering used above. Chat messages such as {"role": "user", "content": [{"type": "image", "image": ...}, {"type": "text", "text": ...}]} are also accepted, which is the way to interleave several images or videos in one input.

Matryoshka Embeddings

embedding_256 = torch.nn.functional.normalize(embedding[..., :256], dim=-1)

With Sentence Transformers, pass truncate_dim and let it renormalize:

embeddings_256 = model.encode_document(documents, truncate_dim=256, normalize_embeddings=True)

Use a dimension listed in model.config.matryoshka_dimensions. On MMEB-v2, 256-dimensional embeddings retain 98.7% of the full-dimensional image and video performance.

Serving

vLLM 0.27.0:

MODEL_PATH=/path/to/WeMM-Embedding-2B
vllm serve "$MODEL_PATH" \
  --runner pooling \
  --chat-template "$MODEL_PATH/embedding_chat_template.jinja"

SGLang 0.5.9:

MODEL_PATH=/path/to/WeMM-Embedding-2B
python patch_sglang_video.py
python -m sglang.launch_server \
  --model-path "$MODEL_PATH" \
  --is-embedding \
  --enable-precise-embedding-interpolation

Evaluation

MMEB-v2

Results on 78 datasets from Table 1 of the technical report. Image and video tasks use Hit@1, while visual-document tasks use NDCG@5. Higher is better.

ModelSizeAVGImageVideoVisDoc
VLM2Vec2B47.859.729.044.0
GME2B55.451.933.976.8
VLM2Vec-V22B59.364.934.969.2
Qwen3-VL-Embedding2B73.275.061.979.2
DME-Small†2B74.875.965.679.9
WeMM-Embedding2B77.979.670.880.7
WeMM-Embedding4B79.280.872.182.0
VLM2Vec8B53.265.534.049.1
GME8B59.256.038.679.3
Qwen3-VL-Embedding8B77.880.167.182.4
DME-Medium†9B78.479.870.882.0
WeMM-Embedding9B80.681.974.383.3

† Closed-source leaderboard submission without publicly released model weights or a public inference endpoint.

MMEB-v3

Results on all 190 tasks from Table 2 of the technical report. V3-All includes the 78 MMEB-v2 tasks, 53 text tasks, 47 agent tasks, 11 audio tasks, and MCMR. Unsupported tasks are assigned a score of zero.

ModelSizeV3-AllTextAgentMCMRAudio
VLM2Vec-V22B38.324.528.74.10.0
Omni-Embed-Nemotron3B43.539.236.526.136.5
E5-Omni3B44.626.736.931

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