ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 로컬 환경에서 나만의 GPT를 구동해보자 llamafile
    공부 2023. 12. 13. 00:34

    졸업을 앞두고 이것저것 보다가 재밌는 영상을 봤다. 

    https://www.youtube.com/watch?v=_tUDZdlehAk 

    연구실 형이 소개해줘서 종종 챙겨보는 유튜버인데, 엄청난 드립력과 딕션으로 최신 유행하는 내용들을 때려박아줘서 그냥 보기에도 재밌고 유익한 채널이다. 

    NLP 전공은 아니지만 분명 핫한건 사실이기때문에, 최근 K-뭐시기 해커톤에 LLM 토이 프로젝트 경험차 팀으로 나가서 이리저리 테스트 해보면서 몇가지 놀란 포인트들이 있었다. (이건 쓰다보니 꽤 길어져서 다른 글로 분리할 생각이다.)

    작은 모델로도 글을 만드는것 자체는 꽤나 잘 하는것 같고, 요즘 특히 보안이나 비용 이슈로 로컬에서 돌리는 소위 sLLM에 대한 수요가 있는 상황에 적절한 프로젝트라고 생각해서 주말을 사용해 탐구 겸 한국어 모델을 넣어서 빌드 해본 버전을 만들고 테스트 해 보았다.

    1. 그래서 llamafile이 뭔가?

    라마가 파일안에 들어있다

    llamafile lets you distribute and run LLMs with a single file.

    단순하게 말하면 LLM 을 하나의 파일로 구동하게 해주는 프로젝트다. 재밌는건 이걸 별다른 dependency 설치나, OS에 맞게 빌드 하는 과정을 거치지 않고 하나의 파일을 Linux/MacOS/Windows 에 가지고 가는 것 만으로 실행이 가능하다는 것이다. 

    이걸 가능하게 하는건 LLAMA.cppcosmopolitan 이라는 두개의 프로젝트이다.


    LLAMA.cpp 는 LLAMA 모델을 C++로 포팅하는 프로젝트이다. 보통 모델을 학습/추론하게 하는데는 사용하는 Huggingspace / Pytorch 같은 라이브러리들과 당연하게 생각되는 CUDA 의존성 때문에, 막상 돌리려고 하면 꽤나 까다롭고 비 현실적인 면이 있는데, 이건 이 모든 내용을 종속성 없는 C/C++로 잡아보자는 생각에서 시작된 프로젝트이다. 

    목표 자체가 MacOS 에서 LLAMA 모델을 돌려보자는 생각이었던 것 만큼 CUDA 뿐 아니라 (무려)Metal, OpenCL도 지원하고, 현재는 Quantization쪽에 상당한 기여를 하고있는 것으로 보인다. 프로젝트를 처음 봤을땐 그냥 반쯤 미친 매드 사이언티스트들의 뻘짓인가 싶었는데, LLAMA뿐 아니라 다양한 비주류 모델들도 지원하고, Quantization에서의 GGUF 포맷 같은 것들을 하나씩 잡아가며 생각보다 더 어마어마한 규모로 프로젝트가 돌아가는 모양이다. 

    Cosmopolitan 은 이번에 처음 봤는데, JVM 의 C 버전이다. 수업에서 JVM을 보면서 참 신기해 하고 이런건 고급언어에서나 가능한 일일거라 생각했는데, C/C++ 같은 언어들도 놀고만 있는건 아니었나 보다. 물론 사용자들이 기대하는 저레벨 언어에서의 성능은 나오지 않겠지만, 이번 플젝같은 상황에서는 크게 지장이 있을정도는 아닌 것 같다. 

    lamafile 은 이것들을 잘 섞어서 하나의 파일로 OS 와 상관없이 LLM 추론 환경을 만들어준 뒤, 로컬 서버로 웹 클아이언트를 띄워주는 역할을 한다. 

    2. 그래서 어떻게 쓰는가? 

    유튜브 영상에서 잘 설명되어 있지만, 사용하는 OS에 맞게 문서에 나와있는것들을 잘 맞춰주고, 실행하면 놀랍도록 쉽고 빠르게 실행된다. 내가 테스트 해본건 맥이랑 윈도우인데, 맥은 755 권한을 주고 실행, 윈도우는 파일명을 .exe로 바꿔준다음 실행하니 별다른 이슈 없이 실행되었다. 물론 GPU 가속을 위해서는 약간의 설치가 필요했고, Xcode / CUDA 등을 설치해 주면 된다고 한다.

    실행하면 바로 다음과 같은 창이 웹브라우저로 열린다. 무려 metal 가속이 되고있다.

    3. 쓸만 한가?

    이건 사실 llamafile 프로젝트라기보다 어떤 모델을 사용하냐에 따라 다를것 같다. 다만 내가 적용한 komt-mistral-7b 기준으로 본다면 그렇다고 보인다. 

    나온지 이미 오래된 14인치 맥북프로 기본형의 m1pro+16GB 상황에서도 토큰당 30ms 정도로 아주 우수한 성능을 보여준다. Prior knowledge에 대해 크게 기대하지 않기에 대단한 답변을 기대하는건 무리고, 말을 조리있게 한다 생각 정도는 든다. 

    서비스 레벨에서 이걸 바로 사용하는건 분명 무리가 있지만, 모델을 학습해서 공유해주시는 감사한 분들이 본인들의 학습결과를 어필할때 사용자들에게 별다른 설치 없이 inference 해볼 수 있게 하는 목적으로는 너무 충분할 것 같다. 대충 보느라 구체적인 세팅을 모두 본건 아닌데, 빌드 과정에서 약간의 코드 수정으로도 prompt의 구조나 사전정의 prompt 설정등을 미리 해서 배포할 수 있기 때문에 이런 목적에서 굉장히 어필될 수 있을 것 같다. 
    연구의 목적에도 간단히 모델을 학습해서 테스트 해보고 결과를 뽑아볼 수 있다는건 좋은 옵션일 것 같다. Gradio 같은 툴도 써봤지만, 프론트엔드 경험이 미천해서 그런지 세팅을 적용하는게 마냥 쉽지는 않았다. 이건 모델만 갖춰져 있다면 단순한 스크립트만으로 빌드 할 수 있어서 찐 연구자들에게도 쉽게 다가갈 수 있지 않을까 싶다. 

    다만 나온지 얼마 되지 않은 GGUF 포맷으로 빌드 된 모델이 필요하다거나(처음에 시도한 Koalpaka-polyglot 모델은 llama.cpp 프로젝트에서 더이상 gptneox를 지원하지 않는다 해서 막혔다),  4bit quantization 된 7b 모델도 여전히 4gb 남짓에 cpu 사용시 token 당 초단위의 시간이 걸린다는것을 생각하면 아직 나만의 local LLM! 까지는 약간 시간이 걸리지 않나 싶긴하다. 

    여튼 꽤나 재미있는 프로젝트인것 같고, 몇가지 더 시도해 볼 수 있는 포인트들이 있는 것 같아 한번 테스트 해 봐야겠다!

    https://github.com/daily-kim/llamafile_ko

    댓글

Designed by Tistory.