Escalando a Cirurgia Neural: Compressão Estrutural do Qwen-3B com ASVD e CPU-Offloading

Após validar o pipeline de compressão estrutural no modelo Qwen-1.5B, o próximo passo lógico na minha pesquisa era testar a escalabilidade do método. O objetivo: aplicar a mesma cirurgia de Activation-Aware Singular Value Decomposition (ASVD) combinada com LoRA Healing em uma arquitetura com o dobro do tamanho — o Qwen2.5-3B.

No entanto, ao escalar a arquitetura, esbarrei em um obstáculo físico intransponível para pesquisadores independentes: o limite de VRAM de hardware de entrada.

Neste artigo, detalho como contornei as limitações de uma GPU NVIDIA T4 de 16GB utilizando técnicas de CPU-offloading para fatorar matrizes massivas, removendo com sucesso mais de 163 milhões de parâmetros do modelo base.


O Desafio do Hardware: O Gargalo da Fatoração SVD

O Qwen-3B, operando nativamente em precisão FP16, ocupa aproximadamente 6.5 GB de VRAM. A princípio, uma placa de 16GB parece ter espaço de sobra. O problema reside na matemática da decomposição.

Durante o mapeamento de ativações, extraí o Root Mean Square (RMS) das camadas lineares para escalar os pesos antes do corte. Quando a função torch.linalg.svd tenta fatorar essas matrizes escaladas diretamente na GPU, ela exige a alocação de tensores intermediários em precisão FP32. O pico de alocação de memória gerado por essa conversão em matrizes de 3 bilhões de parâmetros excede instantaneamente os 15 GB úteis da T4, resultando em falhas críticas de Out-Of-Memory (OOM).

A Solução de Engenharia: SVD Offloading Seguro

Para evitar o colapso de memória, modifiquei a classe de amputação para isolar o gargalo matemático da GPU. Implementei um mecanismo de roteamento onde os cálculos de decomposição pesados ocorrem na memória RAM do sistema (CPU).

A ordem de alocação foi estritamente definida para garantir eficiência:

  1. O peso bruto (FP16) é movido da GPU para a CPU.
  2. Somente na CPU ele é convertido para FP32, utilizando a vasta memória RAM disponível.
  3. A Fatoração SVD ocorre na CPU.
  4. As matrizes fatiadas, agora muito menores devido ao limiar de 85% de retenção de variância, retornam para a GPU em FP16.

Essa abordagem não apenas protegeu o sistema contra falhas de OOM, como permitiu que o meu pipeline operasse de ponta a ponta de forma autônoma.


Impacto Estrutural e Fisioterapia Neural

Com o gargalo de hardware resolvido, apliquei o corte nas camadas q_proj, k_proj, v_proj, o_proj e down_proj. Os resultados da amputação foram massivos:

  • Parâmetros Base (Camadas Alvo): ~1.03 Bilhão
  • Parâmetros Pulverizados: 163.045.888
  • Redução Absoluta: 15.77% de redução no tamanho estrutural alvo.

A perda imediata de 163 milhões de parâmetros corrompeu o roteamento sintático do modelo. Para restaurar essa capacidade, iniciei o LoRA Healing.

Injetei adaptadores de baixo posto (Rank 16, Alpha 32) em todas as camadas lineares sobreviventes. O custo dessa injeção foi de meros 33.3 milhões de parâmetros treináveis (cerca de 1.12% da rede). Em apenas duas épocas de treinamento com acúmulo de gradientes, a perda (loss) despencou de 4.50 para 3.56.

Após o treinamento, realizei o merge and unload matemático dos pesos. O modelo recuperou integralmente sua capacidade de abstração e raciocínio lógico profundo, operando em formato 100% nativo.


Resultados e Repositório Oficial

A tabela abaixo consolida a métrica de escalabilidade do meu método, comprovando que a proporção de gordura matemática e o custo de recuperação se mantêm consistentes mesmo ao dobrar a arquitetura.

Arquitetura Retenção (ASVD) Parâmetros Removidos LoRA (Custo de Cura) Formato Final
Qwen-1.5B 85% 72.3 Milhões (14.29%) 20.7 Milhões FP16 Nativo
Qwen-3B 85% 163.0 Milhões (15.77%) 33.3 Milhões FP16 Nativo

Esta versão do modelo prova que é possível rodar LLMs com altíssima eficiência em ambientes Edge, mitigando custos computacionais sem recorrer à latência imposta por quantizações GGUF/bitsandbytes.

O modelo Qwen-3B-ASVD-Healed está público e acessível no Hugging Face. Para integrá-lo imediatamente no seu pipeline, utilize o código abaixo:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "Kodjaoglanian/Qwen-3B-ASVD-Healed"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id, 
    torch_dtype=torch.float16, 
    device_map="auto"
)

prompt = "The most important concept in quantum physics is"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model.generate(
        **inputs, 
        max_new_tokens=50, 
        do_sample=True, 
        temperature=0.7
    )

print(tokenizer.decode(outputs[0], skip_special_tokens=True))

Visite o repositório completo para acessar os arquivos do modelo: Hugging Face - Kodjaoglanian/Qwen-3B-ASVD-Healed.

Subscribe to Kodjao Labs

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
[email protected]
Inscreva-se