Colibrì: 소비자용 하드웨어에서 GLM-5.2 744B MoE 실행하기
Colibrì: 소비자용 하드웨어에서 GLM-5.2 744B MoE 실행하기
Colibrì는 약 25 GB의 RAM을 가진 소비자용 하드웨어에서 744B-parameter Mixture-of-Experts (MoE) 모델인 GLM-5.2를 실행할 수 있게 합니다. 이는 모델의 밀집(dense) 부분만 메모리에 상주시키고, 라우팅된 전문가(experts)를 디스크에서 필요할 때마다 스트리밍하는 방식으로 이를 달성합니다.
아키텍처: 스트리밍 MoE 및 메모리 관리
Colibrì는 토큰당 전체 파라미터의 아주 작은 부분만 활성화되는 Mixture-of-Experts 모델의 아키텍처적 특성을 활용합니다. GLM-5.2의 경우, 모델은 744B 파라미터를 가지고 있지만, 토큰당 약 40B만 활성화되며, 그중 11 GB(라우팅된 전문가)만이 토큰 간에 변경됩니다.
메모리 분할
- Resident RAM: attention, shared experts, 그리고 embeddings (~17B parameters)를 포함한 밀집 구성 요소는 int4 양자화로 저장되어 RAM에 상주하며 약 9.9 GB를 차지합니다.
- Disk Storage: 21,504개의 라우팅된 전문가 (~int4 기준 각 약 19 MB)는 디스크에 저장되며, 총합은 약 370 GB입니다.
로딩 메커니즘
디스크 I/O의 지연 시간을 완화하기 위해 Colibrì는 여러 최적화 전략을 구현합니다:
- LRU Cache: 레이어별 Least Recently Used (LRU) 캐시가 RAM 내 전문가 상주 여부를 관리합니다.
- Async Readahead: 엔진은 현재 블록이 CPU에 의해 처리되는 동안 다음 전문가 블록을 읽기 위해
WILLNEED를 사용합니다. - Learning Cache: 엔진은
.coli_usage파일에 전문가 라우팅 패턴을 기록하여, 시작 시 여유 RAM에 가장 빈번하게 사용되는 "hot" 전문가를 자동으로 고정(pin)할 수 있게 합니다. - OS Page Cache: 엔진은 OS page cache를 보조 캐싱 레이어로 활용합니다.
기술적 구현 세부 사항
Colibrì는 종속성 없이 순수 C ( glm.c 내 약 1,300줄)로 작성되었으며, BLAS, Python (런타임 시), 그리고 GPU 가속을 피합니다.
주요 기능
- MLA Attention: 압축된 KV-cache를 사용하는 Multi-head Latent Attention (MLA)을 구현하여, 토큰당 메모리 요구 사항을 32,768 floats에서 576 floats로 줄였습니다 (57배 감소).
- MTP Speculative Decoding: GLM-5.2의 네이티브 Multi-Token Prediction (MTP) 헤드를 사용합니다. 헤드를 int8로 양자화하면 39–59%의 수락률을 달성하며, 패스당 2.2–2.8 토큰을 생성합니다.
- Integer-Dot Kernels: int8 matmuls를 위해 AVX2
maddubs를 활용하며, 이는 표준 구현보다 1.4–2.5배 더 빠릅니다. - Weight Absorption: 디코딩 중 MLA 가중치 흡수(weight absorption)를 위한 DeepSeek 스타일의 트릭을 사용하여 토큰당 k/v 재구성을 제거합니다.
- Quantization: per-row scales 및 dequantization-on-use를 지원하는 int8, packed int4, 그리고 packed int2 커널을 지원합니다.
성능 및 하드웨어 제약 사항
성능은 주로 디스크 읽기 속도("disk ceiling")에 의해 제한됩니다. 콜드 토큰(cold token)은 약 11 GB의 전문가 읽기가 필요합니다.
측정된 벤치마크
| 하드웨어 | 디스크 속도 | 구성 | 성능 |
|---|---|---|---|
| WSL2, 12-core, 25GB RAM | ~1 GB/s | Default | 0.05–0.1 tok/s |
| WSL2, 24-thread, 24GB RAM | 1.96–2.74 GB/s | --topp 0.7 |
0.11 tok/s |
| Apple M5 Max, 18-core, 128GB RAM | 14.2 GB/s | MTP Off | 1.06 tok/s |
| ThreadRipper PRO 5975WX, 128GB RAM | 7 GB/s | --topp 0.7 |
0.44 tok/s |
하드웨어 요구 사항
- OS: Linux 또는 WSL2.
- CPU: OpenMP 및 AVX2를 지원하는 gcc.
- RAM: 최소 16 GB.
- Storage: int4 모델을 위한 약 370 GB의 여유 공간이 있는 로컬 NVMe (ext4).
중요한 고려 사항
SSD Wear
콜드 스타트 시 대량의 무작위 읽기(~11 GB/token)가 발생하고 OS page cache가 쓰기를 생성할 수 있기 때문에, 과도한 사용은 소비자용 SSD의 수명을 단축시킬 수 있습니다. 사용자는 드라이브 상태를 모모니터링할 것을 권장합니다.
양자화 정확도
엔진은 아키텍처에 대해 transformers 오라클과 비교하여 token-exact하게 검증되었지만, 744B 모델의 int4 양자화와 관련된 구체적인 정확도 손실은 소비자용 하드웨어에서 전체 실행에 필요한 극단적인 시간이 소요되므로 아직 완전히 벤치마크되지 않았습니다.
커뮤니티 인사이트 및 반론
사용자들 사이의 논쟁은 스트리밍 방식의 접근법이 가진 개념적 탁월함과 실질적인 한계점을 모두 강조합니다:
"RAM이 적은 머신에서는 디스크가 아니라 RAM 용량이 제한 요소가 됩니다...
--topp 0.7설정만으로도 엔드-투-엔드 속도가 1.6배 깨끗하게 향상되었습니다."
일부 사용자들은 초당 1 토큰 미만의 속도가 실질적인 유용성을 갖는지 의문 제기하였으나, 다른 사용자들은 장기 실행되는 비동기 작업의 경우 이러한 속도가 여전히 유효하다고 제리했습니다. 커뮤니티의 기술적 제안으로는 대역폭을 높이기 위해 RAID0 NVMe 어레이를 사용하거나, SSD와 RAM 속도 사이의 간극을 메우기 위해 Intel Optane 메모리를 활용하는 방법이 있습니다.