llama.cpp의 빠른 LoRA 구현
Fast LoRA in llama.cpp
핵심 요약
llama.cpp에서 LoRA 성능을 개선하는 새로운 커널을 개발하여 Strix Halo GPU 환경에서 속도를 대폭 향상함.
- LoRA 성능 개선 — 기존 llama.cpp의 느린 LoRA 커널 문제를 해결함
- 커널 최적화 — 일반 및 융합(fused) LoRA 커널을 통해 처리 속도를 1400 t/s까지 끌어올림
- Strix Halo 지원 — 현재 특정 GPU에 최적화되어 있으며 향후 메인라인 병합 예정
- 사용 편의성 — 전체 모델을 다시 다운로드할 필요 없이 LoRA 적용 및 스케일 조정 가능
LLM에서 LoRA를 만들고 사용하는 걸 장려하려고 몇 가지 변경 사항을 공유해 본다. 예를 들어, LoRA https://huggingface.co/chenrm/qwen3.8-flash-next-abliterated-lora를 쓰면 Qwen3.8-Flash-Next 모델을 검열 없는 버전으로 바로 바꿀 수 있다. Q8_0, IQ4_NL, GSQ-RCO-Q2_0 모델 중 뭘 쓰든 상관없으니까 모델 전체를 다시 받을 필요도 없다. LoRA 스케일을 조절해서 검열 해제랑 지능 저하 사이에서 적절한 균형을 잡는 것도 가능하다.
근데 지금 llama.cpp에는 빠른 LoRA 커널이 없다. Strix Halo에서 LoRA를 적용해서 모델을 돌려보면, LoRA 용량이 35MB밖에 안 되고 모델의 일부 모듈만 건드리는데도 PP가 1500 t/s에서 300 t/s까지 곤두박질친다.
그래서 내가 LoRA 커널을 몇 개 만들어 봤다. 일반 LoRA 커널을 쓰니까 1000 t/s까지 올라갔고, 퓨즈드(fused) LoRA 커널을 쓰니까 1400 t/s까지 더 개선되더라.
내 변경 사항은 https://github.com/woct0rdho/llama.cpp 여기서 확인할 수 있다. 지금은 Strix Halo에 최적화되어 있는데, 다른 GPU로 포팅하는 것도 그렇게 어렵진 않을 거다. 시간 날 때 메인라인 llama.cpp나 strix-llama.cpp에 업스트림할 생각이긴 한데, 아키텍처를 좀 건드려야 해서 시간이 좀 걸릴 것 같다. 나보다 먼저 업스트림하고 싶으면 내 코드를 마음껏 가져다 쓰거나 수정해도 좋다.
이 내용은 https://github.com/ggml-org/llama.cpp/issues/27093 여기서도 논의 중이다.
