사용자가 C99로 LLM 추론 엔진을 개발하던 중 DeepSeek MoE 모델에서 llama.cpp에 비해 7.3배 낮은 토큰 생성 속도(1.90 tok/s vs 13.79 tok/s)를 경험했어요.
성능 차이의 원인은 Q4_K 가중치 역양자화 과정에서 발생하는 메모리 대역폭 차이로, llama.cpp는 원시 Q4_K 바이트를 읽고 nibble을 디코딩하는 반면, 사용자 엔진은 F32 중간값을 사용하기 때문이에요.
Q4_K matvec 연산에 필요한 fused 커널 구현이 해결책이지만, Q4_K 슈퍼블록 스케일 레이아웃에 대한 이해 부족으로 어려움을 겪고 있으며, 관련 코드와 실험 결과는 GitHub에서 확인할 수 있어요.