Powrót do strony głównej

Kompresja GLM-5.1 na 16 GB VRAM: hacki GQA

Artykuł opisuje kompresję modelu GLM-5.1 (744 mld parametrów) do 388 MB do uruchomienia na NVIDIA T4. Omijanie ograniczeń GQA poprzez symetryczne attention, kod przechwytywania config i wyniki inferencji. Podejście do ML-hackingu na ograniczonym sprzęcie.

Lobotomia GLM-5.1: 744B na T4 bez błędów
Advertisement 728x90

Kompresja GLM-5.1 do 16 GB VRAM: analiza sztuczek architektonicznych

Model GLM-5.1 od ZhipuAI z 744 mld parametrów wymaga ogromnych zasobów do uruchomienia. Zespół zaimplementował dynamiczną kompresję architektury MoE na NVIDIA T4 z 16 GB VRAM, omijając ograniczenia GQA i przepisując konfigurację. Otrzymany prototyp waży 388 MB i wykonuje inferencję bez błędów macierzy.

Micro-Ghetto: podstawowe obcięcie parametrów

Początkowy etap kompresji obejmował edycję config.json w celu zminimalizowania obciążenia obliczeniowego. Zmniejszenie num_hidden_layers do 2, num_experts do 2 oraz hidden_size do 512 pozwoliło zredukować rozmiar modelu do poziomu kompatybilnego z konsumenckim sprzętem.

Próba załadowania przez transformers from_config() ujawniła ukryte zależności. Biblioteka w wersji nocnej wspiera GLM-5.1, ale standardowe parametry powodują konflikty.

Google AdInline article slot

Konflikt tensorów w GQA

Podczas inferencji wystąpił błąd niezgodności wymiarów:

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

Przyczyna — sztywna zależność od multi_query_group_num=32 w Grouped Query Attention. Obcięty hidden_size dał 8 głowic zapytań, ale rdzeń oczekiwał 32 głowic kluczy/wartości. To zakłóciło scaled_dot_product_attention.

Naprawa asymetrii uwagi

Rozwiązanie wymagało przechwycenia konfiguracji w runtime z wymuszonym wyrównaniem parametrów:

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

# 1. Przechwytujemy config na bieżąco
config = AutoConfig.from_pretrained("livadies/GLM-5.1-Ghetto-MoE-2-Experts", force_download=True)

# 2. ELIMINUJEMY ASYMETRIĘ (Naprawa błędu 8 vs 32)
config.num_attention_heads = 8
config.num_key_value_heads = 8         # Dokładnie równe num_attention_heads
config.multi_query_group_num = 8       # Nadpisujemy hardkod GLM
config.multi_query_attention = False   # Wyłączamy GQA
config.kv_channels = 64                # hidden_size (512) / 8 = 64
config.head_dim = 64

# 3. Syntetyzujemy wagi z idealną matematyką
model = AutoModelForCausalLM.from_config(config, torch_dtype=torch.float16)

# 4. Żelazno konwertujemy wszystkie macierze na fp16, by uniknąć konfliktów dtype
model = model.half().to("cuda")

Ten kod zapewnia symetrię 8:8, wyłącza GQA i ustala kanały KV na 64 (512/8).

Wyniki inferencji i walidacja

Wygenerowane wagi w formacie safetensors (388 MB) przeszły test na prompecie „Cześć! Jak masz na imię?”. Wyjście:

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

Google AdInline article slot

Mimo chaotycznego tekstu, brak błędów potwierdza poprawność grafu obliczeń. Eksperci MoE kierują tensorami, moduły uwagi działają w fp16 na 16 GB VRAM.

Kluczowe zmiany w konfiguracji:

  • num_hidden_layers: 2 (zamiast dziesiątek)
  • 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 najważniejsze

  • Dynamiczna kompresja MoE pozwala uruchamiać modele 744B na T4 bez farmy GPU.
  • Przechwycenie config w runtime omija hardkod GQA (32 grupy).
  • Symetria uwagi 8:8 + fp16 rozwiązuje konflikty tensorów.
  • Prototyp 388 MB zachowuje logikę grafu GLM-5.1.
  • Podejście nadaje się do innych architektur MoE w hackingu ML.

— Editorial Team

Advertisement 728x90

Czytaj dalej