로컬에서 LLM을 원활하게 돌리려면 얼마나 빨라야 할까?


주의사항

블로그 주인장이 코파일럿보다 2배 비싼 cursor.sh를 한달 결제했기 때문에 한동안 이 툴에서 생성한 글로 대충 날먹하려는 심보가 보일 수도 있습니다.

요약

제가 실사용하는 조건 하에서 모델만 변경해보면서 성능 측정을 좀 해봤습니다. 이걸 토대로 모델을 골라서 써볼 생각이에요.

배경 - 모델이 너무 느려요 ㅠㅠ

앞선 글에서 제목 추천 기능을 선보였었는데, 아직 기능이 반쪽짜리라고 느낀 것이, M1 랩탑에서 Llama3-8b 모델로 제목 추천을 시켰을 때 최종 결과가 나오는데 체감상 10초 정도 걸리더란 말이죠.

아니, 한 3~4초 정도 걸리면 참아줄 수도 있겠는데, 10초는 뭐랄까… 아예 툴 자체가 먹통이 된 것 같은 느낌? 특히나 LSP 구현이다 보니까 에디터에 직접적으로 뭔가 진행중이라는 메시지를 보여줄 방법도 제한이 있더라는 말이죠. (아니 뭐 이미 에디터 플러그인까지 깊숙히 발 담그고 있는 입장에선 못할 일도 아닙니다만 어쨌든)

벤치마킹

환경

대충 두세 문단 정도로 이루어진 짧은 글을 주고, 먼저 요약본을 요청한 다음에, 이어서 제목을 제안해달라는 요청을 보내 그 결과를 받는 간단한 환경이다.

Out of scope: 모델 생성물의 품질은 신경쓰지 않는다. 어떤 모델이 다른 모델보다 더 많은 말을 하느라 느려진다면 불필요하게 불리한 결과를 받게 된다는 뜻.

결과

EnvEngineModelSizeLatency(ms)
7800X3D + 4090llama.cppPhi-3 (Q4_K_M)2.3GB2189
llamafileLlama 3-8b (Q5_K_M)5.4GB1159
mlc-llmLlama 3-8b (q4f16)4.3GB768
llamafilePhi-3 (F16)7.2GB4392
llama.cppGemma-2b (Q5_K_M)1.8GB305
M1 32GBllama.cppPhi-3 (Q4_K_M)2.3GB19634
llamafileLlama 3-8b (Q5_K_M)5.4GB8588
mlc-llmLlama 3-8b (q4f16)4.3GB8916
llamafilePhi-3 (F16)7.2GB18329
llama.cppGemma-2b (Q5_K_M)1.8GB3165

요약

  • M1 환경에서 쓸 수 있는 모델은 여기 나열한 것들 중에선 Gemma-2b 뿐이다.
    • Llama3-8b는 Phi-3보다는 빠르지만, 어쨌든 모델 자체가 크다보니 M1 환경에선 8초 정도 소모되었다.
  • mlc-llm은 4090 환경에선 llama.cpp보다 빨랐지만 M1 환경에선 느려진다?
    해석하건데 아마 mlc-llm은 KV 캐시를 더 잘 적용하는 것 아닌가 싶다. 즉 동일한 요청을 여러번 반복하는 현재의 테스트 환경에선 첫 쿼리를 해석하는 부분은 이미 캐싱되어서 빠르게 처리되고, 이후 생성 시간이 중요하게 작용하는데, 이부분에서 q4f16 quantization이 q5_K_M보다 느린 것 아닐까 싶다. 다른 quantization이 제공된다면 더 좋겠지만…

결론

현재로선 M1에선 Gemma-2b만 쓰고, 4090에선 Llama3-8b를 쓰는게 맞겠다는 결론이다. Gemma-2b만 쓰기엔 생성물 퀄리티에 의문이 좀 가서…