Llama.cpp는 MoE에 최적화되어 있지 않습니다
요약
llama.cpp에서 MoE 모델의 추론 속도를 최적화하기 위해 -fitt 옵션과 Claude를 활용하여 최적의 텐서 오버라이드 설정을 찾아내는 과정을 다룹니다. 사용자는 특정 텐서를 CUDA_Host로 할당함으로써 VRAM 사용량을 늘리고 추론 성능을 크게 향상시켰습니다.
핵심 포인트
- -fitt 옵션을 통해 MoE 모델의 추론 속도를 초당 25토큰에서 31토큰 이상으로 향상 가능
- llama server에서 -fitt 효과를 재현하려면 로그를 분석해 특정 텐서를 CPU로 오버라이드해야 함
- Claude를 활용하여 복잡한 llama.cpp 로그에서 최적의 --override-tensor 명령어를 생성
- VRAM 사용량을 전략적으로 늘림으로써 오히려 추론 성능(pp)을 극대화할 수 있음
최적화 전 초당 13-25 토큰 vs 최적화 후 초당 31 토큰
참고로, 저는 llama.cpp와 NVIDIA-Nemotron-Labs-3-Elastic-12B-A2B.i1-IQ4_XS.gguf를 사용했습니다.
Qwen 35B도 확인해 볼 예정이지만, 이번 모델이 더 빨랐고 이를 통해 llama bench를 배우기가 더 쉬웠습니다.
어떤 태그가 모델을 더 빠르게 만드는지 알아내기 위해 llama bench를 사용했습니다. 저는 초보자라서 Claude와 ChatGPT(둘 다 무료 버전)를 사용하여 가이드를 받았습니다.
제 PC(1050ti 4gb - ryzen 2600 - 16 gb ram)에서는 -b와 ub 기본값이 적절했고, fa(Flash Attention)도 좋았습니다.
하지만 믿기지 않는 속도 향상은 -fitt에서 나왔습니다.
제 25 토큰이 32 토큰이 되었고, 270 pp(tokens per second/performance)를 기록했습니다.
저는 Claude에게 llama server에서 어떻게 동일한 속도를 재현할 수 있는지 물었습니다.
llama server에는 -fitt 옵션이 없습니다.
그래서 이미 --override-tensor exps=CPU를 시도해 보았으나, 25 t/s가 나왔고 제 VRAM을 모두 사용하지도 않았습니다.
-ncmoe를 시도했더니 13 토큰으로 떨어졌습니다.
그 후 Claude가 이렇게 말했습니다:
"방법은 이렇습니다: -v (verbose)와 -fitt 64 옵션을 사용하여 벤치마크를 실행하고, 로그 출력에서 resolve된 override-tensor 패턴을 찾으세요. 어떤 텐서 이름/버퍼 유형이 할당되었는지 출력될 것입니다."
한참 동안 방대한 텍스트를 들여다보며 Claude에게 도대체 어느 줄이 필요한지 물어본 끝에,
알고 보니 (overridden to CUDA_Host)가 포함된 줄들이었습니다.
예를 들면 다음과 같습니다:
tensor blk.20.ffn_gate_inp.weight (0 MiB f32) buffer type overridden to CUDA_Host
저는 이 모든 것을 복사해서 Claude에게 주었고, Claude는 fitt가 VRAM에 로드했던 부분들을 로드하는 llama server 명령어를 만들어 주었습니다. 그래서 --override-tensor exps=CPU를 사용했을 때의 1.6 gb 대신,
제 VRAM 사용량은 fitt가 했던 것처럼 3.7 gb까지 올라갔습니다.
그런데 다른 일도 일어났습니다. 벤치마크에서 테스트했던 270 pp 속도가 나온 것이 아니라,
무려 340이 나왔습니다.
다음은 Claude가 만든 명령어입니다:
-m "I:\Ai Models\NVIDIA-Nemotron-Labs-3-Elastic-12B-A2B.i1-IQ4_XS.gguf" ^
-ngl 999 ^
-fa on ^
--override-tensor "blk.20.(ffn_gate_inp|ffn_down_exps|ffn_down_shexp)=CPU,blk.(22|24|27|29|31|34|36|38|40|43|45|47|49|51).ffn_(up|down)_exps=CPU" ^
--ctx-size 64000 ^
--parallel 1 ^
--no-mmap ^
--mlock ^
--port 8080
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기