Estado do Treinamento
Table with columns: Item, Valor| Item | Valor |
|---|
| Base | empero-ai/Qwen3.8-4B-Distill |
| Método | QLoRA (4-bit NF4) |
| Framework | Unsloth + TRL (SFTTrainer) |
| Dataset | UniCo |
| Amostras de treino | 2.400 |
| Comprimento máximo | 10.240 tokens |
| Batch por dispositivo | 1 |
| Gradient accumulation | 8 |
| Batch efetivo | 8 |
| Learning rate | 1e-4 |
| Scheduler | cosine |
| Warmup | 15 steps |
| Weight decay | 0.0 |
| Gradient clipping | 1.0 |
| Otimizador | adamw_8bit |
| LoRA rank (r) | 16 |
| LoRA alpha | 32 |
| LoRA dropout | 0 |
| LoRA bias | none |
| RSLoRA | desabilitado |
| Random seed | 42 |
| Max steps planejado | 300 |
| Checkpoint presente | step 100 |
| Hardware | Google Colab Tesla T4 (14,5 GB VRAM) |
Com 2.400 exemplos, batch efetivo 8 e 300 optimizer steps, o treinamento planejado corresponde aproximadamente a 1 epoch.
O checkpoint disponibilizado corresponde ao step 100, aproximadamente o primeiro terço do treinamento planejado.
Dataset UniCo
O treinamento utilizou uma versão balanceada do dataset UniCo, com 2.400 exemplos de treino.
A escolha do UniCo teve como objetivo fornecer ao modelo exemplos voltados a raciocínio científico e relações causais, em vez de realizar apenas uma adaptação lexical ou temática para uma área específica.
O objetivo do treinamento não foi transformar o modelo em um sistema de revisão sistemática. A adaptação foi direcionada para melhorar a capacidade de trabalhar com exemplos de raciocínio científico/causal presentes no conjunto de treinamento.
Por que estas configurações?
Comprimento máximo: 10.240 tokens
O comprimento foi aumentado para 10.240 tokens porque os exemplos do UniCo podem conter contextos e cadeias de raciocínio longas. Um limite muito menor aumentaria a probabilidade de truncar partes relevantes dos exemplos.
Essa escolha aumenta significativamente o custo computacional, mas foi mantida porque preservar o contexto dos exemplos foi considerado mais importante do que maximizar throughput.
Batch 1 + gradient accumulation 8
A Tesla T4 possui 14,5 GB de VRAM. Com sequências de 10.240 tokens, batch maior não era uma configuração prática para este modelo.
Por isso foi utilizado per_device_train_batch_size=1 com gradient_accumulation_steps=8, produzindo batch efetivo 8 sem exigir que oito sequências completas permanecessem simultaneamente na GPU.
Testes com batch físico maior aumentaram o consumo de memória do sistema/CPU e não foram adotados como configuração final.
LoRA r=16, alpha=32
Foi utilizado LoRA rank 16 como compromisso entre capacidade de adaptação, número de parâmetros treináveis e custo de memória.
O lora_alpha=32 produz uma escala LoRA convencional de alpha/r = 2.
O RSLoRA foi mantido desabilitado para preservar uma configuração LoRA convencional e evitar introduzir uma segunda alteração de escala na configuração de referência.
Target modules
A configuração de adaptação solicitou:
q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
Como o Qwen3.8 utilizado possui arquitetura híbrida, o Unsloth realiza filtragem dos módulos compatíveis durante a preparação do modelo. Os adapters efetivamente ficam nas partes suportadas da arquitetura, incluindo projeções de self-attention e MLPs.
Gradient checkpointing
Foi utilizado:
use_gradient_checkpointing="unsloth"
na construção do modelo.
Isso foi importante para permitir sequências longas na T4. O Unsloth também ativou automaticamente smart gradient offloading e double buffering durante o backward pass.
A configuração gradient_checkpointing=False presente no SFTConfig não significa que o modelo foi treinado sem checkpointing: o mecanismo já havia sido aplicado pelo Unsloth durante a preparação do modelo.
Precisão
A configuração do trainer manteve fp16=True e bf16=False, mas o Unsloth detectou que esta arquitetura não pode realizar o treinamento normalmente em float16 e mudou o regime de treinamento para float32.
Isso é particularmente relevante na arquitetura híbrida utilizada pelo Qwen3.8, que contém blocos de atenção linear Gated DeltaNet.
Liger
O kernel Liger foi testado experimentalmente, mas foi mantido desabilitado (use_liger_kernel=False) na configuração final.
Nos testes realizados neste ambiente, Liger não apresentou ganho consistente de velocidade de treinamento que justificasse sua manutenção como parte da configuração de referência.
Packing
Foi utilizado packing=False.
Durante os testes, o Unsloth informou que packing=True é ignorado para esta arquitetura híbrida de atenção linear. Portanto, packing não foi utilizado como mecanismo de otimização do treinamento.
Learning rate e scheduler
Foi utilizado learning_rate=1e-4 com scheduler cosine e 15 warmup steps.
A taxa foi escolhida para uma adaptação LoRA relativamente forte sobre um conjunto relativamente pequeno de 2.400 exemplos, enquanto o warmup reduz a agressividade das primeiras atualizações.
Conteúdo do Checkpoint
Este repositório contém o estado completo salvo pelo SFTTrainer no step 100, incluindo:
adapter_model.safetensors — pesos treinados do LoRA
adapter_config.json — configuração do PEFT/LoRA
- arquivos do tokenizer e chat template
optimizer.pt — estado do otimizador
scheduler.pt — estado do scheduler
rng_state.pth — estado dos geradores aleatórios
trainer_state.json — estado do Trainer
training_args.bin — argumentos do treinamento
A presença desses arquivos permite preservar não apenas o adapter, mas também o estado necessário para uma eventual continuação do treinamento a partir deste checkpoint.
Uso do Adapter
O adapter é um modelo PEFT/LoRA e depende do modelo base:
empero-ai/Qwen3.8-4B-Distill
Exemplo de carregamento:
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfigfrom peft import PeftModelimport torch base_model_id = "empero-ai/Qwen3.8-4B-Distill"adapter_id = "leandronunes/Qwen3.8-4B-UniCo-QLoRA-ckpt100" bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.float32,) base = AutoModelForCausalLM.from_pretrained( base_model_id, quantization_config=bnb_config, device_map="auto", trust_remote_code=True,) model = PeftModel.from_pretrained( base, adapter_id,) tokenizer = AutoTokenizer.from_pretrained( adapter_id, trust_remote_code=True,)
A configuração acima é um exemplo de carregamento do adapter. A escolha de float32 para o compute dtype é deliberada neste ambiente devido às restrições observadas com esta arquitetura na Tesla T4.
Inferência
Exemplo de geração:
messages = [ { "role": "user", "content": "Explain a causal relationship between two biological processes." }] inputs = tokenizer.apply_chat_template( messages, return_tensors="pt", add_generation_prompt=True, return_dict=True,).to(model.device) with torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=300, do_sample=False, ) generated = outputs[0][inputs["input_ids"].shape[1]:]print(tokenizer.decode(generated, skip_special_tokens=True))
Avaliação
Nenhum resultado de benchmark quantitativo foi incluído neste model card como resultado definitivo.
A avaliação de desempenho deve comparar separadamente:
- modelo base
empero-ai/Qwen3.8-4B-Distill
- checkpoint-100
- checkpoint final, caso o treinamento seja posteriormente concluído
Isso permite distinguir melhora real de capacidade de raciocínio de simples memorização ou adaptação ao formato do dataset.
Limitações
-
Este repositório representa apenas o checkpoint-100 de um treinamento planejado para 300 steps.
-
O dataset contém 2.400 exemplos de treino, portanto a adaptação não deve ser interpretada como especialização geral em biologia.
-
O adapter depende do modelo base e não contém os pesos completos do Qwen3.8-4B-Distill.
-
O treinamento foi realizado em uma Tesla T4, impondo restrições importantes de memória, comprimento de sequência e batch físico.
Reprodutibilidade
Parâmetros principais utilizados:
Model: empero-ai/Qwen3.8-4B-DistillMethod: QLoRAQuantization: 4-bit NF4LoRA r: 16LoRA alpha: 32LoRA dropout: 0Learning rate: 1e-4Scheduler: cosineWarmup: 15 stepsBatch size: 1Gradient accumulation: 8Effective batch size: 8Max sequence length: 10240Max steps: 300Checkpoint: 100Optimizer: adamw_8bitWeight decay: 0Max grad norm: 1.0Seed: 42Gradient checkpointing: UnslothLiger: disabledPacking: disabledHardware: Tesla T4 14.5 GB
Licença
Apache 2.0.