Zurück zur Startseite

Komprimierung von GLM-5.1 auf 16 GB VRAM: GQA-Hacks

Der Artikel beschreibt die Komprimierung des GLM-5.1-Modells (744 Milliarden Parameter) auf 388 MB für den Betrieb auf NVIDIA T4. Umgehung von GQA-Beschränkungen durch symmetrische Attention, Config-Hijacking-Code und Inferenz-Ergebnisse. Ansatz für ML-Hacking auf begrenzter Hardware.

Lobotomie von GLM-5.1: 744B auf T4 ohne Fehler
Advertisement 728x90

GLM-5.1 mit 16 GB VRAM laufen: Architektur-Hacks im Detail

Das GLM-5.1-Modell von ZhipuAI mit 744 Milliarden Parametern erfordert enorme Ressourcen. Das Team hat eine dynamische Komprimierung seiner MoE-Architektur auf einer NVIDIA T4 mit nur 16 GB VRAM hingekriegt, indem es GQA-Einschränkungen umgangen und die Konfiguration umgeschrieben hat. Das resultierende Prototype wiegt 388 MB und läuft Inference ohne Matrix-Fehler.

Micro-Ghetto: Basis-Parameterkürzung

Im ersten Kompressionsschritt wurde config.json angepasst, um den Rechenaufwand zu senken. Durch Reduzierung von num_hidden_layers auf 2, num_experts auf 2 und hidden_size auf 512 wurde das Modell auf Consumer-Hardware-Niveau gebracht.

Beim Laden über transformers mit from_config() kamen versteckte Abhängigkeiten ans Licht. Der Nightly-Build unterstützt GLM-5.1, aber Standardparameter lösten Konflikte aus.

Google AdInline article slot

Tensor-Konflikt in GQA

Beim Inference kam es zu einem Dimensionsfehler:

RuntimeError: The size of tensor a (8) must match the size of tensor b (32) at non-singleton dimension 1

Schuld war die starre Bindung an multi_query_group_num=32 in der Grouped Query Attention. Die reduzierte hidden_size ergab 8 Query-Heads, aber der Kern erwartete 32 Key/Value-Heads. Das hat scaled_dot_product_attention zum Absturz gebracht.

Behebung der Attention-Asymmetrie

Die Lösung erforderte ein Runtime-Konfig-Hijacking mit erzwungener Parameterangleichung:

Google AdInline article slot
import torch
from transformers import AutoConfig, AutoModelForCausalLM
from huggingface_hub import login

# 1. Konfig on the fly hijacken
config = AutoConfig.from_pretrained("livadies/GLM-5.1-Ghetto-MoE-2-Experts", force_download=True)

# 2. ASYMMETRIE ELIMINIEREN (Fix 8 vs 32 Fehler)
config.num_attention_heads = 8
config.num_key_value_heads = 8         # Genau gleich num_attention_heads
config.multi_query_group_num = 8       # GLM-Hardcode überschreiben
config.multi_query_attention = False   # GQA deaktivieren
config.kv_channels = 64                # hidden_size (512) / 8 = 64
config.head_dim = 64

# 3. Weights mit perfekter Mathe synthetisieren
model = AutoModelForCausalLM.from_config(config, torch_dtype=torch.float16)

# 4. Alle Matrizen auf fp16 zwingen, um Dtype-Konflikte zu vermeiden
model = model.half().to("cuda")

Dieser Code erzwingt 8:8-Symmetrie, deaktiviert GQA und fixiert KV-Kanäle auf 64 (512/8).

Inference-Ergebnisse und Validierung

Die generierten safetensors-Weights (388 MB) haben einen Test mit dem Prompt „Hi! Wie heißt du?“ bestanden. Ausgabe:

们都skeresindx scooter perspective/legal很少... Generating是他today test disgr.initState...

Google AdInline article slot

Trotz des Unsinns bestätigen null Fehler einen stabilen Compute-Graph. MoE-Experten leiten Tensoren weiter, Attention-Module laufen in fp16 auf 16 GB VRAM.

Wichtige Config-Änderungen:

  • num_hidden_layers: 2 (von Dutzenden runter)
  • num_experts: 2
  • hidden_size: 512
  • num_attention_heads = num_key_value_heads = 8
  • multi_query_attention: False
  • kv_channels: 64, head_dim: 64

Wichtige Erkenntnisse

  • Dynamische MoE-Komprimierung erlaubt 744B-Modelle auf einer einzelnen T4 – kein GPU-Cluster nötig.
  • Runtime-Config-Override umgeht hardcodierte GQA (32 Gruppen).
  • 8:8-Attention-Symmetrie + fp16 löst Tensor-Konflikte.
  • 388 MB Prototype erhält GLM-5.1-Compute-Graph-Logik.
  • Technik anwendbar auf andere MoE-Architekturen für ML-Hacking.

— Editorial Team

Advertisement 728x90

Weiterlesen