BGE-M3
Fields
models/bge-m3Notes
Encoder: kv_cache_bytes_per_token = 0, KV formula does not apply — one bidirectional pass, no cache. params_b = 0.568 is DERIVED, not read: BAAI/bge-m3 ships pytorch_model.bin rather than safetensors so the HF API reports no parameter total. 0.568 is taken from BAAI/bge-reranker-v2-m3, which is the same XLM-RoBERTa-large backbone at hidden 1024 / 24 layers / vocab 250002 and reports total 567755777 — bge-m3 adds only small linear heads on top. Treat 0.568 as approximate to ~1%; the repo's own storage figure (13.7 GB across all formats including full-precision and ONNX copies) is consistent with it. WHY IT MATTERS FOR THIS REPO: this is the model that broke the 512-token ceiling — 8194 max_position_embeddings (8192 usable) and model_type xlm-roberta rather than bert, vocab 250002 for multilingual. At 8192 tokens the prefill cost is 16x a BERT-large at 512, so this is the first BGE where long-document embedding is genuinely expensive: flops_per_token_active 1.14e9 over 8k tokens is ~9.3 TFLOP per document on one pass. Chunking still dominates cost. Multi-functionality is a model card claim, not a config fact: dense (CLS), sparse (lexical weights) and multi-vector (ColBERT) heads ship alongside — the repo file list confirms colbert_linear.pt and sparse_linear.pt. MIT. 34.8M downloads, 3798 likes. GGUF (gpustack, ggml-org Q8_0) and ONNX (onnx-community, gpahal int8) both exist; the repo also bundles its own onnx/ directory.
SERVICEABILITY JOIN (added 2026-10-03; the architecture x engine matrix this record was missing, with a citation per cell in docs/13-model-compatibility.md): FAMILY=bi-encoder. REQUIRED KERNEL CLASS: a single full-sequence bidirectional forward pass with a pooling reduction. No KV cache, no incremental state, no autoregressive weight streaming - flop/embedding-batch-encoding gives AI = B*t flop/byte (weights read once for all B documents), so on H100 SXM at ridge 295.4 a single 128-token encode at B=1 is memory-bound but at B=3 it is compute-bound, and the threshold is the PRODUCT B*t. flop/cross-encoder-reranking makes the same point for the scoring phase. This inverts the hardware-selection rule: an embedding/rerank tier wants FLOPS and core count, not HBM bandwidth. SUPPORTED BY (cited): vLLM pooling is a separate runner with its own endpoint surface and the broadest architecture table in the repo - BertModel, BgeM3EmbeddingModel, GteModel, JteNewModel (mGTE-TRM), JinaEmbeddingsV5Model, LlamaBidirectionalModel, LlamaModel/MistralModel (intfloat/e5-mistral-7b-instruct), ModernBertModel, NomicBertModel, Qwen2Model, Qwen3Model, RobertaModel, XLMRobertaModel, plus any generative model via automatic --convert, with the Transformers modeling backend covering encoder-only architectures directly [[vllm-pooling-models]]. TEI is the purpose-built reference and lists BERT, CamemBERT, XLM-RoBERTa, NomicBERT, JinaBERT (Alibi), MPNet, ModernBERT plus RoPE decoder backbones Mistral, Alibaba GTE, Qwen2, Qwen3 and Gemma3 [[hf-text-embeddings-inference]]. SGLang's embedding page states native encoder architectures are auto-detected while decoder-style embedders need --is-embedding, and that on CUDA it automatically uses breakable CUDA graph for the full encoder prefill and DISABLES radix-cache and chunked-prefill [[mdl2-sglang-embedding-rerank-models]]. sentence-transformers covers everything transformers can load [[sentence-transformers]]. llama.cpp reaches BERT-family encoders via the LLM_ARCH_BERT / MODERN_BERT / NOMIC_BERT / JINA_BERT_V2 / JINA_BERT_V3 entries [[pap-arch-llamacpp-arch-registry]]. CORRECTNESS CAVEATS THAT ARE ARCHITECTURE-SPECIFIC AND CITED: vLLM's pooling path is a capability not a speed win - the project's own docs say 'We currently support pooling models primarily for convenience. This is not guaranteed to provide any performance improvements over using Hugging Face Transformers or Sentence Transformers directly' [[vllm-pooling-models]]. Several of the architectures above need --trust-remote-code or --hf-overrides, so 'supported' sometimes means 'supported after three flags' [[vllm-pooling-models]]. bge-m3 ships extra sparse AND ColBERT weights with a separate docs path, and jina-embeddings-v3 is limited to text-matching with LoRA merged rather than selected [[vllm-pooling-models]]. TEI's --dtype accepts only float16 and float32 - no int8 or fp8 at runtime, so quantization must happen at export [[hf-text-embeddings-inference]]. llama.cpp's embedding path cannot serve SPLADE/learned-sparse encoders, cannot serve ColBERT end to end, and cannot serve multimodal encoders requiring a projector graph [[llama-cpp-embedding-server]]. For the Qwen2-decoder-as-bi-encoder pattern specifically, both gte-Qwen2 and Qwen2 family models are the documented --trust-remote-code case in vLLM [[vllm-pooling-models]].
Cross-references
This record references no other records — it is a leaf. It is cited by 0.