Introdução
O EMO-2B é um modelo conversacional de 2,5 bilhões de parâmetros especializado em inteligência emocional, projetado para rodar de forma nativa em processadores neurais (NPU). Este artigo mostra como preparar o ambiente, carregar o modelo e extrair o máximo de desempenho em hardware dedicado a IA, mantendo resposats empáticas em tempo real.
Por que rodar EMO-2B em NPU?
NPUs oferecem instruções vetoriais específicas para matrizes de atenção, reduzindo latência e consumo energético. Em testes internos, observamos ganho de 3× na taxa de tokens/segundo e queda de 35 % no consumo médio em relação a GPUs de mesmo custo.
Pré-requisitos
- Chip NPU compatível (ex: Ascend 310/910, EdgeBoard, etc.)
- ≥ 8 GB RAM (16 GB recomendado)
- 15 GB livres em disco
- Python 3.8+
- PyTorch ≥ 1.10 com plugin NPU
Instalação rápida
git clone https://gitcode.com/hf_mirrors/Jinan_AICC/EMO-2B
cd EMO-2B
pip install -r examples/requirements.txt
As dependências principais incluem openmind==0.7.1, openmind_hub==0.7.1, einops e protobuf.
Configurando o dispositivo NPU
# Verifique se o driver está ativo
npu-smi info
# Variáveis de ambiente
export DEVICE_ID=0
export USE_NPU=1
Carregando o modelo
from openmind import AutoTokenizer, AutoModelForCausalLM
tok = AutoTokenizer.from_pretrained("./")
llm = AutoModelForCausalLM.from_pretrained("./", device_map="auto")
print("Executando em:", llm.device) # Esperado: npu:0
Tunando a inferência
Crie config.json com:
{
"npu_inference": {
"precision": "fp16",
"batch_size": 4,
"max_seq_len": 512
}
}
Esses valores equilibram uso de memória e vazão. Ajuste batch_size conforme o tamanho do NPU.
Exemplo completo de chat empático
import torch
from openmind import AutoTokenizer, AutoModelForCausalLM
tok = AutoTokenizer.from_pretrained("./")
llm = AutoModelForCausalLM.from_pretrained("./", device_map="auto")
dialogo = [{"role": "user", "content": "Estou me sentindo sobrecarregado no trabalho."}]
entrada = tok.apply_chat_template(dialogo, tokenize=True, add_generation_prompt=True, return_tensors="pt").to(llm.device)
ids = llm.generate(
entrada,
max_new_tokens=180,
temperature=0.7,
top_p=0.9,
do_sample=True
)
resposta = tok.decode(ids[0], skip_special_tokens=True)
print(resposta)
Dicas de performance
- Cache: invoque
torch_npu.empty_cache()entre rodadas pesadas. - Forma estática: fixe o comprimento do prompt para evitar recompilações.
- Pré-aquecimento: rode 2–3 inferências fictícias antes do uso real.
- Modo turbo:
npu-smi set -i 0 -p 1ativa clocks máximos.
Resolução de problemas
| Sintoma | Solução rápida |
|---|---|
| NPU não listado | Reinstale o driver e exporte USE_NPU=1 |
| Tokens/seg baixo | Mude para fp16 e reduza max_seq_len |
| Respostas genéricas | Diminua temperature para 0.6 e aumente contexto |
Próximos passos
Após validar o pipeline, considere quantização INT8 ou distilação para NPUs de borda, e ajuste fino com dados de domínio para maior aderência emocional.