Ollama에서 기본적으로 제공하고 있는 모델 외에도 HuggingFace 등에서 공개하는 모델을 직접 추가해서 사용할 수 있다. 이때까지 HuggingFace 모델을 사용할 때 별 생각없이 활용 코드로 가져오거나 다운 받아서 경로 설정만 해주며 써왔는데 이번 기회에 GGUF 파일과 Safetensors 파일에 대해서 이해할 수 있었다.
이 둘의 차이는 간단하게 '모델을 저장하는 확장자가 다른 것'이라고 이해했다. Safetensors의 경우 tensor를 가장 안전하게 저장하는 방식인데, pickle에 비해서 빠르고 안전성이 보장된다고 한다. (참고) 개인적인 느낌으로는 HuggingFace에서 foundation model 같은 것들을 보면 대부분 satetensors로 파일을 제공하고 있는 것 같았다. 반면, GGUF의 경우 딱 하나의 파일에 모든 정보들을 담고 있으므로 보다 편리하고, 비교적 최근에 개발된 형식인 것 같다. (이전에는 GGML을 사용함)
공식 문서에서는 GGUF와 Pytorch&Safetensors 임포트하는 방법을 모두 알려주고 있다. 이 실습에서는 좀 더 간단해보이는 GGUF를 임포트하는 것만 진행한다.
Ollama에서 기본적으로 제공하는 모델 중에서 Gemma를 제외하고는 한국어 채팅이 거의 불가능해서 이를 보완할 수 있는 모델을 찾다가 야놀자에서 개발한 EEVE 모델을 발견했다. 여기서 사용한 모델은 HuggingFace에 있는 EEVE-Korean-Instruc-10.8B-v1.0-GGUF이다. 용량이 다른 두 파일이 있는데 더 큰 7.56G를 다운받았다.
다운 받은 모델과 같은 폴더에 Modelfile 파일을 생성해야 한다. 처음에 Modelfile의 확장자가 뭔지에 대해서 고민했는데, 확장자 없이 그냥 Modelfile이라는 이름만 지정하고 저장하면 된다. 그리고 파일에는 다음과 같이 작성해준다.
FROM ggml-model-Q5_K_M.gguf
TEMPLATE """[INST] {{ if and .First .System }}<<SYS>>{{ .System }}<</SYS>>
{{ end }}{{ .Prompt }} [/INST] """
SYSTEM """"""
PARAMETER stop [INST]
PARAMETER stop [/INST]
PARAMETER stop <<SYS>>
PARAMETER stop <</SYS>>
From
뒤에는 다운받은 모델의 경로를 지정한다. Template
부분은 모델이 생성하는 텍스트의 형식을 지정한다는데, 사실 어떻게 바꿔야 할 지 잘 모르겠어서 그냥 공식 문서에 있는 그대로 사용했다. 다른 블로그들을 참고해보면 모델이 생성하는 텍스트 형식이나 맥락 등 (ex: 셰익스피어의 문체로 답변하는 AI야)을 설정해 줄 수 있는 것 같다.
그리고 해당 모델과 Modelfile이 있는 경로로 이동한 뒤, 다음 코드를 실행해서 모델을 설치한다.
ollama create eeve_gguf -f Modelfile
eeve_gguf는 내가 설정한 모델의 이름이고 임의로 바꿀 수 있다. ollama run
을 했을 때 처럼 잠시동안 모델 다운받는 시간이 소요되고 successful이라는 결과가 나온다. ollama list
에서 eeve_gguf를 찾을 수 있으면 성공!
중간중간 약간 어색한 부분들이 눈에 띄지만, 그래도 확실히 한국어로 답변을 잘하는 것을 확인할 수 있다.
.
.
.
이런 식으로 테스트 한다고 모델 하나 두개씩 받다가는 노트북 저장용량이 남아나질 않겠다는 생각을...😂
좋은 글 잘 봤습니다. 감사합니다.
질문이 있는데, Modelfile을 생성할 때 어떻게 생성했는지 알 수 있을까요?