Model Pruning
Beim Pruning eines Modells werden wenig wichtige Gewichte, Filter oder Schichten aus einem neuronalen Netzwerk entfernt, um Größe und Rechenaufwand zu verringern. Unstrukturiertes und strukturiertes Pruning mit Code.
Beim Pruning eines Modells werden Parameter entfernt, die wenig zum Ergebnis eines trainierten neuronalen Netzes beitragen. Das reicht von einzelnen Gewichten bis hin zu ganzen Filtern, Attention-Köpfen oder Schichten, damit das Modell kleiner wird und weniger Rechenaufwand verursacht. Die meisten Netzwerke sind überparametrisiert. Daher lässt sich ein großer Teil ihrer Gewichte entfernen, ohne die Genauigkeit stark zu beeinträchtigen – besonders, wenn das Modell anschließend feinabgestimmt wird. Eine Pruning-und-Nachtrainingsmethode aus dem Jahr 2015 reduzierte AlexNet von 61 Millionen auf 6,7 Millionen Parameter und VGG-16 von 138 Millionen auf 10,3 Millionen, ohne die Genauigkeit auf ImageNet zu beeinträchtigen. Pruning ist ein gängiger Schritt bei der Vorbereitung von Modellen für Smartphones, Kameras und andere Edge-AI-Hardware und wird inzwischen auch auf große Sprachmodelle (LLMs) angewendet.
So funktioniert das Pruning von Modellen#
Beim Pruning werden mögliche Gewichte oder Strukturen nach ihrer Bedeutung bewertet, die am niedrigsten bewerteten entfernt und die verbleibenden Modellgewichte feinabgestimmt, um die Genauigkeit wiederherzustellen. Das einfachste und weiterhin gebräuchlichste Bewertungskriterium ist der Betrag: Gewichte nahe null oder Filter mit kleiner L1- oder L2-Norm verändern die Ausgabe beim Entfernen am wenigsten. Andere Kriterien verwenden Gradienten oder Aktivierungen, um abzuschätzen, wie stark der Verlust ohne den jeweiligen Teil steigen würde. Das gleichzeitige Entfernen eines großen Anteils beeinträchtigt oft die Genauigkeit. Daher erfolgt Pruning gewöhnlich in mehreren Runden, auf die jeweils eine Feinabstimmung folgt, bis das Modell seine Zielgröße erreicht oder die Genauigkeit unter den Toleranzwert fällt:
Pruning hat auch verändert, wie Forschende über die Netzwerkgröße denken. Die Lotterielos-Hypothese besagt, dass ein dichtes Netzwerk kleine Teilnetzwerke enthält, die isoliert mit ihren ursprünglichen Anfangsgewichten trainiert die Genauigkeit des vollständigen Netzwerks erreichen. Die Autoren fanden auf MNIST und CIFAR-10 durchweg solche Teilnetzwerke, deren Größe weniger als 10–20 % der ursprünglichen betrug.
Unstrukturiertes und strukturiertes Pruning#
Beim unstrukturierten Pruning werden einzelne Gewichte an beliebigen Stellen eines Tensors auf null gesetzt. So lässt sich eine hohe Sparsität mit geringem Genauigkeitsverlust erreichen. Die Tensoren behalten jedoch ihre Form, sodass standardmäßige dichte Kernel dieselbe Arbeit ausführen und Beschleunigungen spezielle Sparse-Kernel oder Hardwareunterstützung erfordern. NVIDIA-GPUs ab der Ampere-Generation unterstützen ein solches Muster: 2:4-Sparsität mit zwei Nullen in jeweils vier aufeinanderfolgenden Gewichten, bei bis zu doppelter Rechenleistung im Vergleich zu dichten Operationen. Strukturiertes Pruning entfernt ganze Filter, Kanäle, Attention-Köpfe oder Schichten. Dadurch entsteht ein kleineres dichtes Modell, das auf jedem Prozessor schneller läuft, allerdings bei gleicher Anzahl entfernter Gewichte mit höheren Genauigkeitseinbußen. Wird ein Filter entfernt, muss auch der entsprechende Eingabekanal der nächsten Schicht entfernt werden. Bibliotheken wie Torch-Pruning verfolgen diese Abhängigkeiten automatisch. Die Pruning-Hilfsfunktionen von PyTorch veranschaulichen den Unterschied zwischen beiden Verfahren:
import torch
from torch.nn.utils import prune
# Two identical convolution layers, one for each pruning style
torch.manual_seed(0)
a = torch.nn.Conv2d(16, 32, kernel_size=3)
b = torch.nn.Conv2d(16, 32, kernel_size=3)
# Unstructured: zero the 50% of individual weights with the smallest magnitude
prune.l1_unstructured(a, name="weight", amount=0.5)
# Structured: zero the 50% of output filters with the smallest L2 norm
prune.ln_structured(b, name="weight", amount=0.5, n=2, dim=0)
for name, layer in [("unstructured", a), ("structured", b)]:
zeros = (layer.weight == 0).float().mean().item()
empty = (layer.weight.flatten(1) == 0).all(dim=1).sum().item()
print(f"{name}: {zeros:.0%} of weights zero, {empty} of 32 filters empty")Bei beiden Schichten sind am Ende 50 % der Gewichte null. Nur die strukturierte Schicht hat leere Filter: 16 von 32. Werden diese gelöscht, entsteht eine dichte Schicht mit halb so vielen Filtern, was den Rechenaufwand auf gewöhnlicher Hardware halbiert. Auch Hardware, die für Sparsität ausgelegt ist, profitiert vom unstrukturierten Verfahren: Ambarellas CVflow-Integration für Ultralytics YOLO, die Ambarella in einem eigenen Paket-Fork pflegt, entfernt während des YOLO-Trainings schrittweise Gewichte und erhält die Sparsität beim ONNX-Export für die Kompilierung auf Edge-AI-Chips des Unternehmens.
Pruning im Vergleich zu verwandten Verfahren#
- Modellquantisierung: Verringert die Präzision aller Gewichte, zum Beispiel von 32-Bit-Gleitkommazahlen auf 8-Bit-Ganzzahlen, behält sie aber alle bei. Pruning und Quantisierung werden häufig kombiniert, da Pruning die Zahl der Operationen verringert und Quantisierung jede Operation kostengünstiger macht.
- Wissensdestillation: Trainiert ein kleineres Schülermodell so, dass es ein größeres Lehrermodell nachahmt. Häufig folgt sie auf strukturiertes Pruning, um den Genauigkeitsverlust auszugleichen, der durch das Entfernen ganzer Filter oder Schichten entsteht.
- Dropout: Setzt während des Trainings vorübergehend zufällige Aktivierungen auf null, um das Modell zu regularisieren. Bei der Inferenz kommt das vollständige Netzwerk zum Einsatz.
Pruning großer Sprachmodelle#
Ein LLM nach jeder Pruning-Runde neu zu trainieren ist zu kostspielig. Daher entfernen Einmalverfahren Parameter in einem einzigen Durchgang anhand eines kleinen Kalibrierungsdatensatzes. SparseGPT reduzierte die Modelle OPT mit 175 Milliarden und BLOOM mit 176 Milliarden Parametern in weniger als 4,5 Stunden auf 60 % unstrukturierte Sparsität. Der Anstieg der Perplexität war dabei vernachlässigbar. Das Verfahren unterstützt auch das 2:4-Muster, das GPUs beschleunigen. Strukturiertes Pruning in Kombination mit Wissensdestillation ergibt kleinere dichte Modelle: NVIDIA leitete mit Minitron 8B- und 4B-Modelle aus einem vortrainierten 15B-Modell ab, indem Einbettungskanäle, MLP-Neuronen und Attention-Köpfe entfernt und die Modelle anschließend mit bis zu 40-mal weniger Tokens als beim Training von Grund auf neu trainiert wurden.










