Local LLM 서버 구동하기


요약

Copilot 이후 여러 비슷한 플러그인들이 우후죽순처럼, 오직 Copilot보다 싸다! 공짜! 외치면서 제발 좀 써보세요 하고 있지만, 솔직히 말해 대부분 성에 안차는 게 사실이다. 그렇지만 월 10달러는 쵸큼 부담스럽다고 생각된다면 짝퉁 플러그인의 세상에 한발 담궈보는 건 어떨까?

잠시 모두까기의 시간: 서비스형 모델의 경우

내가 대충 다음과 같은 서비스형 코드 LLM들을 써 봤는데:

  • 아마존 CodeWhisperer
  • 구글 Duet AI
  • Codeium

서비스형 Copilot 대체재들은 여럿 있는데 하나같이 응답이 느린데다가 퀄리티도 구리다. 보나마나 대충 유저 코드나 긁어대면서 데이터 수집에나 혈안이 되어있고 돈 받고 팔만한 서비스를 만드는 데는 관심들이 없다. 혹시나 뭔가 제안해주지 않을까 하고 타이핑을 멈추고 기대를 가졌다가 엉망인 답변을 보고 아 코파일럿은 이렇지 않았는데 하고 후회 실망 좌절 3종콤보를 맛보는 데 단 5초면 충분하다.

로컬 모델 기반 플러그인의 현주소

일단 Copilot API가 입력중인 커서의 앞/뒤의 텍스트를 모두 전송하고 있기 때문에 자연스럽게 Fill-in-the-middle 모델을 쓰고 있으리라고 짐작할 수 있고, 해당 기법을 이용해서 학습된 다른 모델도 여럿 존재한다. 아니면 그냥 대화형 모델에게 코드를 복붙하고 커서에 해당하는 부분의 코드를 작성해달라고 하는 방법도 있는데, 아무래도 대화형 모델은 코드 외의 사족을 붙여서 답변하는 경우가 많아서 별로 선호되진 않는다. 일단 모델은 대충 CodeLlama-13b를 돌릴 수 있으면 넉넉하지 않을까?

에디터용 플러그인 또한 여러가지가 있는데,

  • fauxpilot: 아마 거의 최초의 copilot 짝퉁 플러그인. 오직 VSCode에서만 동작한다. 게다가 컨셉만 잡고 그 이후엔 더이상 개발되고 있진 않다.
  • tabbyml: 뭘로 돈을 벌 생각인진 모르겠는데 여튼 로컬 모델 구동을 지원한다. 다만 각 에디터마다 따로 에디터 플러그인을 각각 개발한 것 같은데 이렇게 해놓으면 나중에 기능 개선 하나 할때마다 3배로 고생할텐데…
  • llm-ls: 아마 huggingface API로 장사할 목적으로 만든 것 같긴 한데 어쨌든 로컬 모델도 곁다리로 지원해주긴 한다. LSP 서버를 중간에 둬서, 각 에디터 플러그인들은 상대적으로 간단한 LSP 프로토콜만 구현하고 LSP 서버에서 프롬프트 생성 + 서버 쿼리 등을 처리하니까 상대적으로 쓸만하다.

써봤더니…

일단 로컬에 서버를 따로 띄워야 하는 부분이 번거롭다. 너무 번거로워서 심지어 직접 프로토타입으로 LSP 서버 안에서 따로 LLM 서버를 띄우는 부분을 만들어봤을 정도.

또 작성하는 글이 길어지니 아무래도 생성에 시간이 더 걸리는지 생성 결과를 못보여주고 있다. 요청들이 밀리는 것 같은데, 사실 이전 요청 취소하고 가장 최근 요청을 최우선으로 계산하도록 하면 좋을 것 같은데 그부분의 구현이 제대로 되지 않은 것 같다.

KV 캐시도 좀 더 공격적으로? 한다던지 하면 좋을 것 같은데 일단 LSP 서버에서 다룰 내용은 아니니 나중으로 미룬다 치면… 어쨌든 갈 길이 멀어보인다.

결론: 1주일만 더 버티고 코파일럿 결제한다

코파일럿은 1달 10달러지만 첫달은 1달의 남은 날짜를 일할계산하는 방식을 사용한다. 즉 3월 15일에 결제하면 대충 5달러 결제하고 15일 쓰는 셈. 결제 직후 해지하면 월말에 자동으로 해지되니 추가결제의 부담도 없다. 대충 이런식으로 4개월쯤 결제/해지를 반복했는데 그정도로 겁나게 유용하긴 하다.