Raras-AI/araras-hpo-brasil-int8
Araras-HPO-Brasil-INT8 (ONNX)
Versão quantizada (int8 dinâmica via ONNX Runtime) do encoder `Raras-AI/araras-hpo-brasil`. Pensada para ambientes com restrição de memória, CPU sem GPU, deploy serverless (Cloud Run, Lambda) e dispositivos edge — incluindo cenários SUS rurais.
O que muda
A queda de R@1 é pequena e R@10 é praticamente idêntico — tradeoff razoável para 4× menos espaço.
Arquivos
onnx/model.onnx— versão fp32 (435,8 MB), também incluída para comparaçãoonnx/model_quantized.onnx— versão int8 dinâmica otimizada para AVX512-VNNI (110 MB)- Configs do sentence-transformers (
modules.json,1_Pooling/, etc.)
Como usar
Via sentence-transformers (recomendado)
from sentence_transformers import SentenceTransformer
model = SentenceTransformer(
"Raras-AI/araras-hpo-brasil-int8",
backend="onnx",
model_kwargs={"file_name": "model_quantized.onnx"},
)
embeddings = model.encode([
"água na cabeça", # Hydrocephalus
"corcunda", # Kyphosis
"fígado inchado", # Hepatomegaly
])
# shape: (3, 768)Via ONNX Runtime puro (sem PyTorch)
import onnxruntime as ort
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("Raras-AI/araras-hpo-brasil-int8")
sess = ort.InferenceSession(
"onnx/model_quantized.onnx",
providers=["CPUExecutionProvider"],
)
inputs = tok(["água na cabeça"], return_tensors="np", padding=True, truncation=True, max_length=128)
outputs = sess.run(None, {k: v for k, v in inputs.items() if k in {i.name for i in sess.get_inputs()}})
# Aplicar mean pooling sobre last_hidden_state com a attention maskPadrão de uso recomendado em produção
Modo híbrido: pré-computar offline as embeddings dos ~17 mil termos HPO usando o modelo fp32 (qualidade máxima do corpus), e usar este modelo int8 apenas no tempo de inferência (encoding das queries do usuário). O gargalo de tempo está sempre no lado da query, e a perda de acurácia fica concentrada em ~1pp R@1.
Quando usar cada versão
Método de quantização
Quantização int8 dinâmica via Optimum + ONNX Runtime, com configuração avx512_vnni (per-tensor). Apenas as camadas lineares (MatMul) são quantizadas; embeddings e LayerNorm permanecem em fp32 para preservar precisão.
Limitações
- A quantização é estática no peso, dinâmica na ativação: não requer dataset de calibração, mas não atinge ganhos máximos de aceleração de quantização estática.
- O speedup é arquitetura-dependente: CPUs com AVX512-VNNI (Intel Cascade Lake+, AMD Zen 4+) ganham mais. Apple Silicon e ARM64 ganham menos (use
arm64config se quantizar localmente para esse target). - A perda de R@1 (~1,8pp) é pequena mas mensurável; para retrieval crítico, prefira o modelo fp32.
Citação
Mesma do modelo base — ver `Raras-AI/araras-hpo-brasil`.
