[LLM] Ollama를 이용한 커스텀 LLM(Large Language Models) 만들기
Ollama는 로컬에서 대형 언어 모델(LLM)을 실행할 수 있고, 사용자 친화적인 인터페이스를 제공하기 때문에 많은 프로젝트에서 사용하고 있다. Repo에 등록되어 있는 사전 미세조정(=Fine tuning) 된 LLM을 사용할 수 있지만, 필요에 의해 커스텀해야 하는 경우가 있는데, 이걸 Ollama 에서는 Custom LLM 이라 부른다. Ollama 는 설치되어 있다는 것을 전제로 Custom LLM 을 만들어보자. 이 글에서 사용하고 있는 Ollama 는 0.1.43이다.
mtapp@OneLabsMLA:/home/onelabs$ ollama -v ollama version is 0.1.43
모델 선택
Custom LLM을 제작할 때 사용할 LLM 을 받자. HuggingFace에 등록된 모델을 받는 방법도 있지만, 변환이 필요하니, Ollama 라이브러리 섹션에서 적당한 모델을 받아보자. 내 선택은 Alibaba그룹에서 배포한 qwen2 1.5B 모델이다.
mtapp@OneLabsMLA:/home/onelabs$ ollama pull qwen2:1.5b pulling manifest pulling 405b56374e02... 100% ▕███████████████████████████████████████████████████████████████▏ 934 MB pulling 62fbfd9ed093... 100% ▕███████████████████████████████████████████████████████████████▏ 182 B pulling c156170b718e... 100% ▕███████████████████████████████████████████████████████████████▏ 11 KB pulling f02dd72bb242... 100% ▕███████████████████████████████████████████████████████████████▏ 59 B pulling c9f5e9ffbc5f... 100% ▕███████████████████████████████████████████████████████████████▏ 485 B verifying sha256 digest writing manifest removing any unused layers success mtapp@OneLabsMLA:/home/onelabs$ ollama list NAME ID SIZE MODIFIED qwen2:1.5b f6daf2b25194 934 MB 6 seconds ago
해당 모델이 정상적을 다운로드 되었는지 확인해보자.
mtapp@OneLabsMLA:/home/onelabs$ ollama run qwen2:1.5b >>> 대한민국 수도는 ? 대한민국의 수도는 서울입니다.
API를 이용해 Ollama에 억세스하기
Ollama는 RESTFul API를 제공해 상호 작용 테스트가 가능하다. 기본적으로 11434 포트를 사용하며, API 목록은 다음 URL 에서 확인 가능하다. 테스트 방법은 커맨드라인에서 curl 로 요청 하거나, postman 과 같이 시각화 된 도구를 사용하면 된다.
mtapp@OneLabsMLA:/home/onelabs$ curl <http://192.168.250.230:11434/api/chat> -d '{ "model" : "phi" , "messages" : [ { "role" : "user" , "content" : "대한민국 수도가 어디야?" } ] }' .... { "model": "qwen2:1.5b", "created_at": "2024-06-27T02:53:18.171191215Z", "message": { "role": "assistant", "content": "대" }, "done": false } .... { "model": "qwen2:1.5b", "created_at": "2024-06-27T02:53:18.416634295Z", "message": { "role": "assistant", "content": "." }, "done": false } { "model": "qwen2:1.5b", "created_at": "2024-06-27T02:53:18.443603756Z", "message": { "role": "assistant", "content": "" }, "done_reason": "stop", "done": true, "total_duration": 1771502180, "load_duration": 1325726072, "prompt_eval_count": 18, "prompt_eval_duration": 85372000, "eval_count": 11, "eval_duration": 272431000 }
모델 커스터마이징
모델 파일에 직접 억세스하면 구조와 매개변수를 확인할 수 있으며 라이선스 정보를 확인할 수 있다.
mtapp@OneLabsMLA:/home/onelabs$ ollama show qwen2:1.5b --modelfile # Modelfile generated by "ollama show" # To build a new Modelfile based on this, replace FROM with: # FROM qwen2:1.5b FROM /usr/share/ollama/.ollama/models/blobs/sha256-405b56374e02b21122ae1469db646be0617c02928fd78e246723ebbb98dbca3e TEMPLATE "{{ if .System }}<|im_start|>system {{ .System }}<|im_end|> {{ end }}{{ if .Prompt }}<|im_start|>user {{ .Prompt }}<|im_end|> {{ end }}<|im_start|>assistant {{ .Response }}<|im_end|> " PARAMETER stop <|im_start|> PARAMETER stop <|im_end|> LICENSE """
모델 파일을 복사해 나만의 버전을 생성하자.
onelabs@OneLabsMLA:/opt/Ollama$ ollama show qwen2:1.5b --modelfile > new.modelfile onelabs@OneLabsMLA:/opt/Ollama$ vi new.modelfile ... {{ end }}<|im_start|>assistant {{ .Response }}<|im_end|> " SYSTEM """Focus on information about the United States.""" PARAMETER stop <|im_start|> PARAMETER stop <|im_end|> ... onelabs@OneLabsMLA:/opt/Ollama$ ollama create onelabs --file ./new.modelfile transferring model data using existing layer sha256:405b56374e02b21122ae1469db646be0617c02928fd78e246723ebbb98dbca3e using existing layer sha256:62fbfd9ed093d6e5ac83190c86eec5369317919f4b149598d2dbb38900e9faef creating new layer sha256:722a27628338015bb56fa67da682025b46f748f4750198adf0880006092a8097 using existing layer sha256:c156170b718ec29139d3653d40ed1986fd92fb7e0959b5c71f3c48f62e6636f4 using existing layer sha256:f02dd72bb2423204352eabc5637b44d79d17f109fdb510a7c51455892aa2d216 creating new layer sha256:0723a690de8c40e0962b3d70bb0069200c1355de894adfbbebf9299cf559357e writing manifest success
Ollama 모델 목록에 조금 전 생성한 모델명 (onelabs)가 보인다.
onelabs@OneLabsMLA:/opt/Ollama$ ollama list NAME ID SIZE MODIFIED onelabs:latest df2b987f75d8 934 MB 19 seconds ago qwen2:1.5b f6daf2b25194 934 MB 24 minutes ago onelabs@OneLabsMLA:/opt/Ollama$ ollama run onelabs >>> 너는 누구? 저는 인공지능으로, 특정 개인과 직접적인 관련이 없습니다. 당신의 질문에 응답하는 데 도움을 드리려고 노력합니다.
기본적인 커스텀 LLM 이 생성된 것을 확인할 수 있다. 이제 미세조정을 시도해보자.