Gemma 가중치의 85%를 제거해 봤음 (그런데 생각보다 괜찮음)
I removed 85% of gemma's weights (and it is mostly fine)
핵심 요약
MoE 모델인 Gemma 26B를 15% 크기로 압축하여 특정 작업에서 효율성을 극대화한 실험 사례입니다.
- 모델 경량화 — Gemma 26B를 3.81B 파라미터로 압축하여 메모리 사용량과 에너지 소비를 대폭 절감함.
- 성능 유지 — 특정 분류 작업에서 원본 모델과 92% 일치하는 결과를 보이며 속도는 2배 향상됨.
- MoE 구조 활용 — 라우터 기능을 제거하고 전문가 모델을 고정하여 밀집형 모델로 변환함.
- 온디바이스 최적화 — 상시 구동되는 앱을 위해 메모리 점유율을 4GB 이하로 낮추는 것을 목표로 함.
MoE 모델인 Gemma 4 26B-A4B를 원래 크기의 15% 수준으로 가지치기(pruning)해봤는데, 특정 작업 하나는 여전히 기가 막히게 잘 돌아간다. 분류 작업에서 원본 모델과 92% 일치율을 보여주는데, 이건 12B 모델이 26B 모델이랑 같은 작업에서 90% 일치율을 보이는 거랑 거의 비슷한 수준임. 물론 범용 모델은 아니라서 지식이 필요한 작업은 싹 다 망함. 지식이 그냥 증발해 버렸거든.
내가 만든 앱이 온디바이스 LLM을 24시간 내내 돌리는 거라 메모리 점유율이랑 전력 소모가 진짜 중요하거든. 내 맥에서 돌려보니까 79 tokens/s 나오더라. 12B 모델보다 대충 2배 정도 빠르고, 메모리는 3.8GB 정도 먹으니까 거의 절반 수준이지.
레이어당 8개의 전문가(expert)를 골라서 전부 다 때려 박았어. 원래 모델이 토큰 하나당 전문가 8개를 선택하는데, 애초에 전문가가 8개뿐이라 라우터가 고민할 필요도 없이 그냥 덴스(dense) 모델이 돼버림. 파라미터는 3.81B고 Q4_K_M 기준으로 2.75GB 나오더라.
내가 원하는 건 각 블록이 똑같은 입력값에 대해 똑같은 연산을 수행해서 똑같은 결과를 내놓는 거야. 블록 단위 학습(block-local training)을 할 때는 정답을 맞히는 게 아니라 사고 과정을 학습시키는 거거든. 그러니까 "정답을 똑같이 내라"가 아니라 "똑같은 방식으로 생각해라"라고 가르치는 거지.
이거 전부 내 데이터로 학습시킨 거임. 이 방식이 꽤 효율적이라 사용자 기기에서 직접 자기 데이터로 학습시키는 것도 가능할 것 같아. 메모리도 5GB 정도면 충분하니까, 배포 환경이랑 학습 데이터가 달라서 생기는 문제들도 해결할 수 있겠지. 실제 사용자 기기에서 테스트는 아직 안 해봤어. 왜 파인튜닝이 별로라고 생각했는지, 이걸 어떻게 설계했는지 궁금하면 내가 쓴 글 한번 봐봐. 왜 이 방식이 내 앱에 딱 맞다고 생각했는지 자세히 적어놨으니까.
이런 식으로 공개적인 곳에 글 쓰는 건 처음이라 좀 떨리네. 피드백이나 의견 주면 진짜 고맙겠고, 어떤 전문가를 남길지 결정하는 더 좋은 방법 아는 사람 있으면 꼭 좀 알려줘.

