cstr/octen-embedding-0.6b-onnx-int4
1133
Octen-Embedding-0.6B — INT4 ONNX (MatMulNBits, block_size=32)
INT4-quantized ONNX of Octen/Octen-Embedding-0.6B. Smallest resident memory of all variants (~1.2 GB RSS) with 1.00 top-1 retrieval accuracy.
Quantization details
Block-wise vs per-tensor: block_size=32 gives 32 768 calibration scale values for a 1024×1024 matrix vs 1 for per-tensor INT8. This fine granularity explains why INT4 shows higher cosine fidelity to FP32 (0.945) than per-tensor INT8 (0.830) despite using half the bits.
Note on dynamic batch: this variant was produced from the legacy torch.onnx.export (not dynamo). It runs correctly at batch=1 only. If you need batch > 1 for throughput, use the INT8 variant which is based on the dynamo export. A dynamo-based INT4 re-export is planned.Benchmark (Apple M-series, CPU)
Quality metrics vs FP32
Measured on 8 diverse EN/DE sentences (3 semantic triplets):
The high cosine fidelity (0.945) despite using only 4 bits comes from block-wise calibration (block_size=32), which is far finer-grained than the per-tensor INT8 approach.
Model details
Inference (batch=1)
import onnxruntime as ort
import numpy as np
from tokenizers import Tokenizer
tokenizer = Tokenizer.from_file("tokenizer.json")
tokenizer.enable_truncation(max_length=512)
# CPUExecutionProvider supports MatMulNBits 4-bit
session = ort.InferenceSession("model.int4.onnx", providers=["CPUExecutionProvider"])
text = "semantic search example"
enc = tokenizer.encode(text)
ids = np.array([enc.ids], dtype=np.int64)
mask = np.array([enc.attention_mask], dtype=np.int64)
lhs = session.run(None, {"input_ids": ids, "attention_mask": mask})[0] # [1, seq, 1024]
emb = lhs[0, mask[0].sum() - 1] # last non-padding token
emb = emb / np.linalg.norm(emb)
print(emb.shape) # (1024,)Files
Variants
License
Apache 2.0.
Provenance and EU AI Act Art. 53 note
- Upstream model: Octen/Octen-Embedding-0.6B — published by
Octen. - Upstream licence:
apache-2.0. This repository redistributes under the same terms; it grants no rights the upstream licence does not. - What was done here: format conversion and/or quantisation only (ONNX, INT4 precision). No training, no fine-tuning, no merging, no distillation, no change to architecture, vocabulary or capability. Only the numeric representation of the upstream weights differs.
- Training data: documented — where it is documented at all — by the upstream provider; see the upstream model card. No training data was used, added or selected by this repository. No training-content summary was found on the upstream model card at the time of writing; that documentation gap is upstream's and is not filled here.
- Provider status: under Regulation (EU) 2024/1689 the upstream authors remain the provider of this model. Converting the serialisation format does not make this repository the provider of a new general-purpose AI model, and no such claim is made. Questions about training content, copyright policy or model capability belong upstream.
