AMD EPYC 9005 Turin Versionen  Bild © AMDAMD EPYC 9005 Turin Versionen (Bild © AMD)

Was ist neu in ZenDNN 5.0

Die wichtigsten Verbesserungen betreffen die BF16-Präzision für Matrixmultiplikationen, erweitertes Auto-Tuning und zusätzliche Unterstützung für INT4 Weight-Only Quantization (WOQ). Nebenbei führt diese Version eine spezielle Funktion zentorch.llm.optimize() im ZenDNN PyTorch Plug-in ein, mit der KI-Entwickler die Inferenzleistung auf AMD EPYC-Architekturen mit nur wenigen Zeilen Code maximieren können.

Verstärkung von generativen und nicht-generativen LLMs

Der verfeinerte BF16:0-Autotuning-Algorithmus von ZenDNN 5.0 ist auf die wichtigsten generativen Large Language Modelle (LLM) wie Llama2/3, Phi2/3, Qwen, ChatGLM und GPT-Modelle abgestimmt. Durch die Anpassung an AOCL BLIS 5.0 können Entwickler/innen auch bei Standard-LLM-Aufgaben von den Vorteilen profitieren, z. B. bei Empfehlungssystemen, für die jetzt BF16-Unterstützung verfügbar ist. Ein spezieller Scalar Dot Product Attention (SDPA)-Operator mit KV-Cache-Optimierungen hilft, Speicherengpässe bei sequenzlastigen Aufgaben zu reduzieren.

Integration der INT4-Quantisierung

Eines der herausragenden Merkmale von ZenDNN 5.0 ist die Einführung der INT4-Quantisierung (nur Gewicht). Durch die Nutzung von AMDs Quark-Tool für AWQ (Activation-Aware Weight Quantization) ermöglicht dieser Ansatz eine fortschrittliche Komprimierung und Beschleunigung für große Sprachmodelle unter Beibehaltung der BF16-Aktivierungen. Die Benutzer folgen einem einfachen vierstufigen Prozess - Quark installieren, das AWQ-Skript ausführen, den Inferenzcode anpassen und dann das INT4-quantisierte Modell für den CPU-basierten Einsatz laden.

Throughput ZenDNN Plugin for PyTorch 4.2 vs 5.0Throughput ZenDNN Plugin for PyTorch 4.2 vs 5.0 (Bild © AMD)

Bis zu 400% schneller als ZenDNN 4.2

Interne Tests auf einem AMD EPYC 9005 Turin mit 192 Kernen zeigten einen dramatischen Leistungszuwachs um das Vierfache im Vergleich zu ZenDNN 4.2. Die Experimente umfassten Inferenzen mit mehreren Instanzen, die mit numactl auf 32 dedizierte Kerne verteilt wurden, um die CPU gleichmäßig zu nutzen.