ONNX INT8 dynamically-quantized version of
tss-deposium/bge-m3-matryoshka-1024d for
CPU-optimized inference.
Fine-tuned from
BAAI/bge-m3 with
MatryoshkaLoss — supports dynamic dimension truncation at query time (1024 -> 768 -> 512 -> 256) via simple array slicing, with a single model loaded in memory (~571 MB).
Tested on 4 semantic pairs (FR/EN cross-lingual) + 2 negative pairs.
Discrimination = avg_positive_similarity - avg_negative_similarity (higher = better separation).
1from onnxruntime import InferenceSession
2from transformers import AutoTokenizer
3import numpy as np
4
5tokenizer = AutoTokenizer.from_pretrained("tss-deposium/bge-m3-matryoshka-1024d-onnx-int8")
6session = InferenceSession("model_quantized.onnx")
7
8inputs = tokenizer("Bonjour le monde", return_tensors="np", padding=True, truncation=True)
9outputs = session.run(None, dict(inputs))
10embedding_1024d = outputs[0][0] # [1024] float32
11
12# Matryoshka truncation — just slice!
13embedding_768d = embedding_1024d[:768]
14embedding_512d = embedding_1024d[:512]
15embedding_256d = embedding_1024d[:256]
1# Full 1024D (default)
2curl -X POST http://localhost:11435/api/embed \
3 -d '{"model": "bge-m3-matryoshka", "input": "Bonjour le monde"}'
4
5# Truncated to 512D (50% less storage, ~95% quality)
6curl -X POST http://localhost:11435/api/embed \
7 -d '{"model": "bge-m3-matryoshka", "input": "Bonjour", "dimensions": 512}'
MIT — commercial use allowed.