Pacote de scripts úteis para Hugging Face Transformers
Muita gente procura por um carrinho dos transformers porque montar um fluxo de inferência do zero dá trabalho e a maioria dos tutoriais mostra apenas o básico, que funciona em colab mas quebra quando você tenta rodar algo maior na prática.
O que é o carrinho dos transformers
Basicamente é um conjunto de scripts reutilizáveis para lidar com tarefas comuns: carregar modelos, fazer preprocessamento, rodar inferência em batch, salvar resultados e monitorar uso de memória. Nada revolucionário, só o que você acaba reescrevendo toda vez que muda de projeto. O repositório está no GitHub em github.com/sapiens-ai/transformer-utils. A instalação é simples: pip install git+https://github.com/sapiens-ai/transformer-utils.git.
Como configurar e rodar
Comece instalando as dependências base. Se você já tem PyTorch instalado, rode primeiro pip install transformers accelerate para garantir compatibilidade. O módulo principal é o TransformPipeline. Você instancia passando o modelo e o tokenizer:
👉 Clique no botão abaixo para saber mais sobre o assunto!
from transformer_utils import TransformPipelinepipe = TransformPipeline("bert-base-uncased") A partir daí, o método pipe.run() cuida do dispositivo, do batch size e da remoção de logs desnecessários automaticamente. Em testes com GPU NVIDIA 3090, isso reduziu o tempo de setup de uns 20 minutos de configuração manual para cerca de 3 minutos. Sem GPU, a diferença é menor porque o processamento em CPU já é mais lento por natureza, mas a economia de tempo de codificação ainda existe.
Problema real que eu encontrei
Na versão inicial, o TransformPipeline não liberava memória corretamente ao processar lotes muito grandes em CUDA. Eu rodei um script com batch size de 128 em um modelo BERT grande e a GPU travou após o terceiro lote. O problema era que os tensores intermediários não eram desalocados entre iterações do loop de preprocessing. A solução foi adicionar um wrapper de garbage collection explícito dentro do método de inferência, usando torch.cuda.empty_cache() a cada N iterações, mais torch.no_grad() para evitar acumulação de histórico computacional.
No código ficou assim: with torch.no_grad(): for i, batch in enumerate(dataloader): outputs = model(batch) if i % 50 == 0: t