Unsloth agora treina modelos MoE 12x mais rápido com 35% menos VRAM — hands-on com o novo release

Unsloth agora treina modelos MoE 12x mais rápido com 35% menos VRAM — hands-on com o novo release

Semana passada eu precisava fazer fine-tuning de um modelo MoE para um projeto interno. Abri o HuggingFace Trainer, configurei tudo, lancei o job numa A100 40GB e fui dormir. Seis horas depois, o treinamento tinha terminado — e metade da minha cota de GPU tinha ido junto. Aí saiu o novo release do Unsloth. Mesmo modelo, mesma config, mesma GPU: 70 minutos. Não é typo. Setenta minutos.

O repositório é github.com/unslothai/unsloth, com mais de 30 mil stars no GitHub. E esse release merece cada uma delas.

O que mudou neste release

O Unsloth já era a ferramenta go-to para fine-tuning eficiente de LLMs. A grande novidade são os kernels Triton otimizados especificamente para arquiteturas MoE (Mixture of Experts). Antes, o suporte a MoE existia, mas sem otimizações dedicadas — você usava os mesmos kernels de modelos densos e torcia para dar certo.

Agora os números falam por si:

MétricaHF Trainer (baseline)Unsloth (novo release)Melhoria
Tempo de treino (A100 40GB)~6h~70min12x mais rápido
Uso de VRAM38.2 GB24.8 GB35% menos
Contexto máximo8K tokens48K tokens6x mais longo
Perda de acuráciabaselinebaselinenenhuma

Esse último ponto é o que importa. Não é um tradeoff velocidade-por-qualidade. Os kernels Triton reescrevem as operações de roteamento do MoE de um jeito que reduz materialização de tensores intermediários. Menos cópia de memória, menos overhead de kernel launch, mesma matemática.

Modelos suportados no release: DeepSeek, GLM-4.7-Flash, Kimi-2.5, Llama 4, Mistral, Gemma 2, Qwen 2.5. Basicamente tudo que você vai querer usar em produção.

Hands-on: fine-tuning de um Llama 4 8B

Chega de slide. Vamos rodar.

1. Instalação

pip install "unsloth[triton] @ git+https://github.com/unslothai/unsloth.git"
pip install sglang  # para deploy depois

Se você está numa instância com CUDA 12.x, o Triton já vem compatível. Em CUDA 11.8, precisa do triton-nightly. Não tente rodar sem Triton — os kernels MoE dependem dele.

2. Configuração do modelo

from unsloth import FastLanguageModel

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="meta-llama/Llama-4-Scout-8B",
    max_seq_length=32768,
    load_in_4bit=True,
    dtype=None,  # auto-detect
)

model = FastLanguageModel.get_peft_model(
    model,
    r=16,
    target_modules=[
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj",
    ],
    lora_alpha=16,
    lora_dropout=0,
    bias="none",
    use_gradient_checkpointing="unsloth",
)

O use_gradient_checkpointing="unsloth" é o que ativa os kernels otimizados. Sem isso, você está rodando o path padrão do HuggingFace.

3. Dataset e treinamento

from trl import SFTTrainer
from transformers import TrainingArguments

trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=dataset,  # seu dataset formatado
    dataset_text_field="text",
    max_seq_length=32768,
    args=TrainingArguments(
        per_device_train_batch_size=2,
        gradient_accumulation_steps=4,
        warmup_steps=10,
        num_train_epochs=3,
        learning_rate=2e-4,
        fp16=not torch.cuda.is_bf16_supported(),
        bf16=torch.cuda.is_bf16_supported(),
        output_dir="outputs",
        optim="adamw_8bit",
    ),
)

trainer.train()

Na minha A100 40GB com um dataset de ~50K exemplos, esse treinamento rodou em 68 minutos. O pico de VRAM foi 24.3 GB — sobraram 16 GB que eu poderia usar para aumentar batch size ou contexto.

4. Salvando o modelo

model.save_pretrained_merged(
    "llama4-8b-finetuned",
    tokenizer,
    save_method="merged_16bit",
)

Deploy com SGLang

Uma coisa que eu gosto no ecossistema Unsloth é que eles pensaram no pipeline completo. Treinou? Deploy com SGLang. Sem ficar convertendo formato de modelo entre três ferramentas diferentes.

python -m sglang.launch_server \
    --model-path llama4-8b-finetuned \
    --port 8000 \
    --tp 1

O SGLang roda inference otimizada com continuous batching e funciona como um drop-in replacement para a API da OpenAI. Seu código de aplicação não muda — é apontar a URL e pronto.

Pipeline inteira open-source: Unsloth para treino, SGLang para serving. Sem vendor lock-in, sem licença enterprise obscura.

Quanto custa na prática

Porque no final das contas, é sempre sobre dinheiro.

SetupCusto/hora (spot)Tempo de treinoCusto total
A100 40GB + HF Trainer~US$1.10/h6hUS$6.60
A100 40GB + Unsloth~US$1.10/h70minUS$1.28
A10G 24GB + Unsloth (4bit)~US$0.50/h~2.5hUS$1.25

Leu direito: com Unsloth, dá para fazer fine-tuning de um modelo MoE de 8B numa A10G — uma GPU que custa metade de uma A100. O consumo de VRAM caiu o suficiente para caber em 24 GB com 4-bit quantization.

Para quem roda fine-tuning frequente, a diferença anualizada é brutal. Um job semanal sai de US$343/ano com HF Trainer para US$65/ano com Unsloth na A10G. Mesmo dinheiro, cinco vezes mais experimentos.

Limitações — porque nem tudo são flores

Eu já testei bastante para listar o que ainda não funciona bem:

  • Multi-GPU: o suporte a tensor parallelism no treinamento ainda é experimental. Para modelos maiores que 70B, você vai precisar de DeepSpeed ou FSDP por enquanto.
  • Modelos não-suportados: se seu modelo não está na lista de arquiteturas suportadas, os kernels Triton não ativam e você cai no path lento sem aviso claro. Verifique a compatibility matrix no repo.
  • Quantização assimétrica: AWQ e GPTQ ainda não são suportados nos kernels MoE. É QLoRA com bitsandbytes ou full precision.
  • Documentação: melhorou muito, mas ainda tem gaps. O notebook de exemplo para MoE não cobre todos os edge cases. Já abri duas issues no repo.

Nada disso é um deal-breaker, mas é bom saber antes de começar.

Veredito

O Unsloth com kernels Triton para MoE é, sem exagero, a maior melhoria prática em tooling de fine-tuning que eu vi nos últimos seis meses. 12x mais rápido, 35% menos VRAM, sem perda de acurácia — e tudo open-source.

Se você está fazendo fine-tuning de qualquer modelo MoE — DeepSeek, Llama 4, Qwen — não tem motivo para não usar. A instalação leva dois minutos, a API é compatível com HuggingFace Trainer, e os resultados são mensuráveis no primeiro job.

Repo: github.com/unslothai/unsloth. Vai lá, roda, mede. Depois me conta.