Volver al inicio

Compresión de GLM-5.1 en 16 GB VRAM: trucos GQA

El artículo describe la compresión del modelo GLM-5.1 (744 mil millones de parámetros) a 388 MB para ejecutarlo en NVIDIA T4. Eludiendo limitaciones GQA mediante atención simétrica, código de manipulación de config y resultados de inferencia. Enfoque para ML-hacking en hardware limitado.

Lobotomía de GLM-5.1: 744B en T4 sin errores
Advertisement 728x90

# Ejecutar GLM-5.1 en 16 GB de VRAM: Análisis de trucos arquitectónicos

El modelo GLM-5.1 de ZhipuAI, con 744 mil millones de parámetros, requiere recursos masivos para funcionar. El equipo logró una compresión dinámica de su arquitectura MoE en una NVIDIA T4 con solo 16 GB de VRAM, sorteando las limitaciones de GQA y reescribiendo la configuración. El prototipo resultante pesa 388 MB y ejecuta inferencia sin errores de matrices.

Micro-Ghetto: Recorte básico de parámetros

La etapa inicial de compresión implicó ajustar el config.json para reducir drásticamente las demandas computacionales. Reducir num_hidden_layers a 2, num_experts a 2 y hidden_size a 512 llevó el modelo a niveles de hardware de consumo.

Cargar mediante transformers con from_config() reveló dependencias ocultas. La versión nocturna soporta GLM-5.1, pero los parámetros predeterminados generaron conflictos.

Google AdInline article slot

Choque de tensores en GQA

La inferencia chocó con un error de discrepancia dimensional:

RuntimeError: El tamaño del tensor a (8) debe coincidir con el tamaño del tensor b (32) en la dimensión 1 no singleton

El culpable: la vinculación rígida a multi_query_group_num=32 en Grouped Query Attention. El hidden_size recortado generaba 8 cabezales de consulta, pero el núcleo esperaba 32 cabezales clave/valor. Esto rompió scaled_dot_product_attention.

Solucionando la asimetría de atención

La solución requirió secuestrar la configuración en tiempo de ejecución con alineación forzada de parámetros:

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

# 1. Secuestra la config en caliente
config = AutoConfig.from_pretrained("livadies/GLM-5.1-Ghetto-MoE-2-Experts", force_download=True)

# 2. ELIMINA LA ASIMETRÍA (Arregla error 8 vs 32)
config.num_attention_heads = 8
config.num_key_value_heads = 8         # Igual estricto a num_attention_heads
config.multi_query_group_num = 8       # Sobrescribe el hardcode de GLM
config.multi_query_attention = False   # Desactiva GQA
config.kv_channels = 64                # hidden_size (512) / 8 = 64
config.head_dim = 64

# 3. Sintetiza pesos con matemáticas perfectas
model = AutoModelForCausalLM.from_config(config, torch_dtype=torch.float16)

# 4. Fuerza todas las matrices a fp16 para evitar choques de tipos
model = model.half().to("cuda")

Este código impone simetría 8:8, desactiva GQA y fija los canales KV en 64 (512/8).

Resultados de inferencia y validación

Los pesos generados en safetensors (388 MB) pasaron una prueba con el prompt "¡Hola! ¿Cuál es tu nombre?". Salida:

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

Google AdInline article slot

A pesar del galimatías, cero errores confirman que el grafo computacional es sólido. Los expertos MoE enrutan tensores, los módulos de atención corren en fp16 en 16 GB de VRAM.

Cambios clave en la config:

  • num_hidden_layers: 2 (bajó de decenas)
  • num_experts: 2
  • hidden_size: 512
  • num_attention_heads = num_key_value_heads = 8
  • multi_query_attention: False
  • kv_channels: 64, head_dim: 64

Lecciones clave

  • La compresión dinámica MoE permite ejecutar modelos de 744B en una sola T4, sin granja de GPUs.
  • Sobrescribir la config en runtime evade el GQA hardcodeado (32 grupos).
  • Simetría de atención 8:8 + fp16 resuelve conflictos de tensores.
  • Prototipo de 388 MB preserva la lógica del grafo computacional de GLM-5.1.
  • La técnica aplica a otras arquitecturas MoE para hacks de ML.

— Editorial Team

Advertisement 728x90

Leer después