16GB VRAM에서 GLM-5.1 실행: 아키텍처 핵 분석
ZhipuAI의 GLM-5.1 모델은 7440억 개 파라미터를 가진 거대 모델로, 실행에 막대한 자원이 필요합니다. 팀은 NVIDIA T4(16GB VRAM)에서 MoE 아키텍처를 동적으로 압축해 GQA 제한을 우회하고 config를 재작성했습니다. 결과물은 388MB 크기의 프로토타입으로, 행렬 오류 없이 추론을 실행합니다.
마이크로 핵: 기본 파라미터 다듬기
초기 압축 단계에서는 config.json을 수정해 연산 부하를 대폭 줄였습니다. num_hidden_layers를 2로, num_experts를 2로, hidden_size를 512로 낮춰 소비자급 하드웨어 수준으로 끌어올렸습니다.
transformers의 from_config()으로 로드할 때 숨겨진 의존성이 드러났습니다. 나이트리 빌드가 GLM-5.1을 지원하지만, 기본 파라미터가 충돌을 일으켰습니다.
GQA에서의 텐서 충돌
추론 중 차원 불일치 오류가 발생했습니다:
RuntimeError: The size of tensor a (8) must match the size of tensor b (32) at non-singleton dimension 1
원인: Grouped Query Attention에서 multi_query_group_num=32에 고정된 강제 바인딩. 축소된 hidden_size로 쿼리 헤드가 8개가 됐지만, 코어가 32개의 키/밸류 헤드를 기대해 scaled_dot_product_attention이 깨졌습니다.
어텐션 비대칭 수정
수정은 런타임 config 오버라이드와 강제 파라미터 정렬로 이뤄졌습니다:
import torch
from transformers import AutoConfig, AutoModelForCausalLM
from huggingface_hub import login
# 1. 즉석에서 config 오버라이드
config = AutoConfig.from_pretrained("livadies/GLM-5.1-Ghetto-MoE-2-Experts", force_download=True)
# 2. 비대칭 제거 (8 vs 32 오류 수정)
config.num_attention_heads = 8
config.num_key_value_heads = 8 # num_attention_heads와 정확히 일치
config.multi_query_group_num = 8 # GLM 하드코딩 오버라이드
config.multi_query_attention = False # GQA 비활성화
config.kv_channels = 64 # hidden_size (512) / 8 = 64
config.head_dim = 64
# 3. 완벽한 수학으로 가중치 합성
model = AutoModelForCausalLM.from_config(config, torch_dtype=torch.float16)
# 4. 모든 행렬을 fp16으로 강제해 dtype 충돌 방지
model = model.half().to("cuda")
이 코드는 8:8 대칭을 강제하고, GQA를 비활성화하며, KV 채널을 64(512/8)로 고정합니다.
추론 결과 및 검증
생성된 safetensors 가중치(388MB)는 "Hi! What's your name?" 프롬프트로 테스트됐습니다. 출력:
们都skeresindx scooter perspective/legal很少... Generating是他today test disgr.initState...Google AdInline article slot
엉뚱한 글자들에도 오류가 전혀 없어 연산 그래프가 안정적임을 확인했습니다. MoE 전문가들이 텐서를 라우팅하고, 어텐션 모듈이 16GB VRAM에서 fp16으로 실행됩니다.
주요 config 변경사항:
- num_hidden_layers: 2 (수십 개에서 대폭 축소)
- num_experts: 2
- hidden_size: 512
- num_attention_heads = num_key_value_heads = 8
- multi_query_attention: False
- kv_channels: 64, head_dim: 64
핵심 요약
- 동적 MoE 압축으로 744B 모델을 단일 T4에서 실행—GPU 팜 불필요.
- 런타임 config 오버라이드로 하드코딩된 GQA(32 그룹) 우회.
- 8:8 어텐션 대칭 + fp16으로 텐서 충돌 해결.
- 388MB 프로토타입이 GLM-5.1 연산 그래프 로직 보존.
- 다른 MoE 아키텍처에도 적용 가능한 ML 핵 기법.
— Editorial Team
아직 댓글이 없습니다.