Vue d'ensemble
L'élagage supprime les paramètres redondants des réseaux de neurones. L'élagage structuré supprime des têtes/couches entières (compatible matériel), tandis que l'élagage non structuré définit les poids individuels à zéro (compression plus élevée, nécessite un support matériel sparse).
Types d'élagage
| Type | Supprimé | Support matériel | Compression |
|---|---|---|---|
| Non structuré (sparsité N:M) | Poids individuels | Cœurs sparse NVIDIA 2:4 | 2x (2:4) |
| Structuré — Élagage de têtes | Têtes d'attention | N'importe quel GPU | 1,5-3x |
| Structuré — Élagage de couches | Couches Transformer | N'importe quel GPU | 1,5-5x |
| Structuré — Élagage de neurones | Neurones FFN | N'importe quel GPU | 1,5-2x |
Exemple : Élagage non structuré avec SparseGPT
from transformers import AutoModelForCausalLM
import torch
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-1.5B-Instruct")
# Apply SparseGPT (one-shot, no training needed)
from sparsegpt import SparseGPT
sparsifier = SparseGPT(model)
sparsifier.compress(sparsity=0.5) # 50% weight sparsity
# Or use NVIDIA 2:4 sparsity
for name, param in model.named_parameters():
if param.dim() >= 2:
param.data = torch.nn.utils.parametrizations.prune_2in4(param.data)
Élagage structuré
# Layer removal example
def prune_layers(model, layers_to_keep):
model.model.layers = model.model.layers[:layers_to_keep]
model.config.num_hidden_layers = layers_to_keep
return model
# After pruning, re-train or distill to recover quality