model-pruning

Par mkurman · zorai

Élagage structuré et non structuré de modèles : élagage de poids, élagage de têtes d'attention, suppression de couches et recherche d'architecture neuronale pour des LLM efficaces.

npx skills add https://github.com/mkurman/zorai --skill model-pruning

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

Références

Skills similaires