Zpět na domů

Komprese GLM-5.1 na 16 GB VRAM: hacky GQA

Článek popisuje kompresi modelu GLM-5.1 (744 miliard parametrů) na 388 MB pro spuštění na NVIDIA T4. Obcházení omezení GQA prostřednictvím symetrické attention, kód pro zachycení configu a výsledky inferenčního průchodu. Přístup pro ML-hacking na omezeném hardwaru.

Lobotomie GLM-5.1: 744B na T4 bez chyb
Advertisement 728x90

Komprese GLM-5.1 na 16 GB VRAM: Podrobný rozbor architektonických hacků

Model GLM-5.1 od ZhipuAI s 744 miliardami parametrů vyžaduje obrovské zdroje pro spuštění. Tým dosáhl dynamické komprese MoE architektury na NVIDIA T4 s 16 GB VRAM, překonal omezení GQA a přepsal konfiguraci. Výsledný model váží 388 MB a provádí inferenci bez chyb matic.

Micro-Ghetto: Základní redukce parametrů

První fáze komprese zahrnovala úpravu config.json pro minimalizaci výpočetní zátěže. Snížení num_hidden_layers na 2, num_experts na 2 a hidden_size na 512 umožnilo zmenšit model na úroveň kompatibilní s běžným hardwarem.

Pokus o načtení přes transformers from_config() odhalil skryté závislosti. Knihovna v noční verzi podporuje GLM-5.1, ale standardní parametry způsobují konflikty.

Google AdInline article slot

Konflikt tenzorů v GQA

Při inferenci došlo k chybě nesouladu dimenzí:

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

Příčina spočívá v pevné vazbě na multi_query_group_num=32 v Grouped Query Attention. Redukovaný hidden_size vedl k 8 hlavičkám dotazů, ale jádro očekávalo 32 hlaviček klíčů/hodnot. To narušilo scaled_dot_product_attention.

Oprava asymetrie pozornosti

Řešení vyžadovalo zachycení konfigurace za běhu s nuceným vyrovnáním parametrů:

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

# 1. Zachytíme config za běhu
config = AutoConfig.from_pretrained("livadies/GLM-5.1-Ghetto-MoE-2-Experts", force_download=True)

# 2. ODSTRANÍME ASYMMETRII (Oprava chyby 8 vs 32)
config.num_attention_heads = 8
config.num_key_value_heads = 8         # Přesně rovná se num_attention_heads
config.multi_query_group_num = 8       # Přepíšeme hardcoded GLM
config.multi_query_attention = False   # Vypneme GQA
config.kv_channels = 64                # hidden_size (512) / 8 = 64
config.head_dim = 64

# 3. Syntetizujeme váhy s dokonalou matematikou
model = AutoModelForCausalLM.from_config(config, torch_dtype=torch.float16)

# 4. Převod všech matic do fp16, aby nedošlo ke konfliktům dtype
model = model.half().to("cuda")

Tento kód zajišťuje symetrii 8:8, vypne GQA a fixuje KV kanály na 64 (512/8).

Výsledky inferencí a validace

Vygenerované váhy ve formátu safetensors (388 MB) prošly testem na promptu „Ahoj! Jak se jmenuješ?“. Výstup:

们都skeresindx scooter perspective/legal很少... Generating是他Dnes ne st disgr.initState...

Google AdInline article slot

Navzdory nesouvislému textu absence chyb potvrzuje správnost výpočetního grafu. MoE experti routují tenzory, moduly pozornosti fungují v fp16 na 16 GB VRAM.

Klíčové změny v konfiguraci:

  • num_hidden_layers: 2 (dříve desítky)
  • num_experts: 2
  • hidden_size: 512
  • num_attention_heads = num_key_value_heads = 8
  • multi_query_attention: False
  • kv_channels: 64, head_dim: 64

Co je důležité

  • Dynamická komprese MoE umožňuje spouštět 744B modely na T4 bez GPU farmy.
  • Zachycení config za běhu obchází hardcoded GQA (32 skupin).
  • Symetrie pozornosti 8:8 + fp16 řeší konflikty tenzorů.
  • Model 388 MB zachovává logiku grafu GLM-5.1.
  • Přístup lze aplikovat na jiné MoE architektury pro ML hacky.

— Editorial Team

Advertisement 728x90

Číst dál