Kimi K3를 8GB RAM CPU 한 대에서 돌려봤음
I pushed Kimi K3 onto one CPU with 8 GB of RAM
핵심 요약
1.56TB 규모의 Kimi K3 모델을 C99 기반 엔진으로 8GB RAM 환경에서 구동한 실험적 프로젝트.
- C99 엔진 개발 — GPU 없이 CPU와 NVMe 스트리밍만으로 거대 모델 구동함.
- 메모리 최적화 — 전문가 모델을 필요할 때만 로드하여 8GB RAM으로 실행 가능하게 함.
- 학습 목적 구현 — 실사용보다는 아키텍처 이해를 위해 밑바닥부터 직접 구현함.
- 성능 지표 — 토큰당 33초 수준의 매우 느린 속도지만 정확한 결과 산출함.
몇 주 전에 회사에서 32개의 H100으로 K3를 배포했는데, 내 컴퓨터에서 직접 만져볼 방법이 없다는 게 짜증 났음. 그래서 C99로 추론 엔진을 직접 짰음.
별다른 묘수는 없음. 1.56TB 체크포인트의 93%가 라우팅된 전문가 모델이고, 토큰당 896개 중 16개만 활성화되니까 전문가 모델들이 메모리에 상주할 필요가 없음. NVMe에서 필요할 때마다 읽어와서 디퀀타이제이션 단계 없이 바로 4비트 형태로 곱셈을 수행함. 밀집된 트렁크는 레이어 L이 알려진 오프셋에 위치하도록 하나의 파일로 재패키징해서 레이어별로 스트리밍함. RAM에 남는 건 설정 가능한 다이얼뿐임.
내 장비에서 측정한 수치 (EPYC 7763 2개, NVMe, 장착된 GPU 4개는 내내 노는 중):
- 8.24 GB peak RSS at the smallest preset, ~33 s/token
- ~128 GB gets you ~20 s/token, which is as fast as it ever got
- Output is byte-identical at every budget in between
K3를 이렇게 쓰는 게 실용적이지 않다는 건 나도 앎. 토큰당 30초나 걸리고 체크포인트랑 패킹된 트렁크를 위해 1.7TB의 여유 디스크 공간이 필요함. 이건 뭐 서비스하려고 만든 게 아니라, 아키텍처를 이해하려고 직접 구현해 본 거임.
BLAS도 없고, 프레임워크도 없고, GPU 경로도 없음. C 파일 6개, libm, OpenMP, 176KB짜리 바이너리임.
1.56TB를 다운로드하기 전에 테스트해보고 싶다면: make && make test를 클론해서 실행해보셈. 가중치나 네트워크 필요 없이 1분 정도 걸림. 동일한 텐서 그래프를 가진 13레이어 모델을 빌드하고, 커밋된 픽스처를 사용한 PyTorch 레퍼런스와 비교 검증함. 여기에는 그리디 디코드, KV 캐시를 포함한 증분 경로, KDA 상태 전달이 포함됨.

