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
| fp32 (original) | int8 (este modelo) | |
|---|---|---|
| Tamanho em disco | ~440 MB | ~110 MB (4× menor) |
| Latência (Cloud Run x86 AVX512) | baseline | ~2× mais rápido |
| Latência (CPU genérica) | baseline | ~1,2× mais rápida |
| Acurácia HPO BR-PT formal (n=500) — R@1 | 61,0% | 59,2% (−1,8pp) |
| Acurácia HPO BR-PT formal — R@5 | 61,6% | 60,8% (−0,8pp) |
| Acurácia HPO BR-PT formal — R@10 | 61,8% | 61,6% (−0,2pp) |
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 mask
Padrã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
| Cenário | Recomendação |
|---|---|
| Servidor com GPU disponível | fp32 (Raras-AI/araras-hpo-brasil) |
| Cloud Run / Lambda / serverless | int8 (cold start mais rápido) |
| Aplicação mobile / edge | int8 |
| Benchmark de paper / reprodutibilidade | fp32 |
| Pipeline de produção que exige <1pp de variação | fp32 |
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.
- Downloads last month
- 42