평소 AI에 관심만 있던 상황에서 최근 우연치 않게 야놀자 회사에서 LLM(Large Language Models) 관련 논문이 LLM 우수 모델로 수상됐다는 기사를 보고 급 관심이 가서 LLM을 어떻게 쓰는지 찾아봤습니다.

사실 논문을 봐도 무슨 내용인지 모르겠더라구요.

대략적으로 영어 중심 언어 모델을 다른 언어(한국어)로 확장하고 새로운 언어 토큰을 효과적으로 통합하는 방법이라 합니다. 이런 것들을 보면 정말 대단하신 분들이 많은 것 같고 나는 코딩하는 김아무개가 아닐까..

LLM 관련하여 계속 찾다 보니 Ollama가 학습한 LLM 모델을 실행시켜 준다는 것을 알고 해당 방법으로 로컬에서 LLM 모델을 사용하는 방법에 대해 포스팅 해보겠습니다.

Ollama 란?

Ollama는 다양한 오픈소스 대형 언어 모델(LLM)을 로컬 컴퓨터에서 쉽게 실행할 수 있도록 도와주는 도구입니다.

Llama3, Mistral, codegemma등 다양한 오픈소스 LLM을 지원하며, 모델 가중치, 설정, 데이터셋을 하나의 패키지로 묶어 Modelfile로 관리할 수 있습니다.

Ollama 설치

우선 Ollama를 공식 사이트에서 다운로드 받습니다.

해당 글은 Window를 기준으로 하기에 Window 파일로 다운로드 받습니다.

image

image

Models 항목에는 여러 유명 LLM 모델들이 있으니 관심이 가는 모델을 다운로드 받을 수 있습니다.

image

모델 파일 D드라이브로 이동 방법

C드라이브 용량이 부족한 경우 D드라이브에 model을 저장할 수 있습니다.

관련 이슈를 참조해보면 환경 변수를 OLLAMA_MODELS로 저장하고 경로를 추가해주면 Ollama를 통해 모델 다운로드 시 해당 경로에 저장되는 것을 확인 할 수 있습니다.

image

llama3 사용 방법

사이트에서 제공하는 model을 이용하면 쉽게 이용이 가능합니다. 공식 사이트에서 Models 항목에 여러가지의 models이 있습니다.

그 중 llama3가 현재 가장 인기 있는 모델 중 하나입니다. Ollama가 실행된 상태에서 터미널에 아래와 같이 입력하면 설치 후 다시 입력하면 실행 할 수 있습니다.

1
ollama run llama3:8b

70b도 있지만 일반적인 노트북 또는 컴퓨터로는 8b정도를 돌리는 것도 생각보다 어렵습니다. 8b면 80억개의 파라미터니까 이 정도면 충분하지 않을까도 생각됩니다.

위처럼 입력해주면 로컬 환경에서도 AI를 이용할 수 있습니다..!

image

설치된 모델을 확인하고 싶은 경우 아래와 같이 입력하면 됩니다.

1
ollama list

다른 모델 적용 방법

알림

Hugging Face에는 다양한 모델이 있지만, Ollama를 이용한 경우 거의 대부분 대화형 AI 모델만 이용할 수 있습니다.

뭔가.. 대답도 잘하고 많이 알고 있는거 같은데 영어로 대답하니 정감이 가지 않더군요.. 찾아보니 한국어 전용 LLM이 있었습니다..!

친절하게 .gguf 파일(링크)도 만들어주셔서 다운로드 받아서 model을 만들어 보겠습니다.

README를 보면 파이썬으로 할 수 있는 것 같은데.. 파이썬 설치 버전 문제랑 TensorFlow??? cuda???? Flax????? 입문자가 알아야 할게 많은 것 같습니다.

gguf 파일을 Ollama에서 동작 시킬 수 있기 때문에 아래와 같이 gguf 파일만 다운로드 받습니다.

image

Modelfile을 생성하는 방법은 공식 문서에서도 볼 수 있습니다.

그런데 이것도 모델마다 모델의 Template이 다른 것 같네요. Bllossom은 llama3를 base로 한 것 같으니 llama3 Modelfile의 template을 참조하여 작성하겠습니다. 우선 아래와 같이 설치된 llama3 모델 파일 정보를 확인합니다.

1
ollama show --modelfile llama3

위와 같이 입력하면 llama3의 Modelfile의 정보는 아래와 같습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# Modelfile generated by "ollama show"
# To build a new Modelfile based on this, replace FROM with:
# FROM llama3:latest

FROM D:\ProgramFiles\ollama_model\blobs\sha256-6a0746a1ec1aef3e7ec53868f220ff6e389f6f8ef87a01d77c96807de94ca2aa
TEMPLATE "{{ if .System }}<|start_header_id|>system<|end_header_id|>

{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>

{{ .Response }}<|eot_id|>"
PARAMETER num_keep 24
PARAMETER stop <|start_header_id|>
PARAMETER stop <|end_header_id|>
PARAMETER stop <|eot_id|>
LICENSE "META LLAMA 3 COMMUNITY LICENSE AGREEMENT
... 라이센스 정보...

일단 보니까 go 느낌인거 같네요. 다운로드 받은 gguf 파일과 Modelfile의 파일명으로 아래의 정보를 추가합니다.

FROM 절에는 gguf 다운로드 받은 파일의 절대 경로를 입력해주세요.

한 곳에 두고 아래의 명령어를 입력하면 ollama에 모델을 학습할 수 있습니다.

제 경우 Modelfile은 아래와 같이 입력했습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
FROM D:\Reference\llm_model\llama3-korean\llama-3-Korean-Bllossom-8B-Q4_K_M.gguf

TEMPLATE """
{{ if .System }}<|start_header_id|>system<|end_header_id|>

{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>

{{ .Response }}<|eot_id|>
"""

# 모델 온도(높을수록 창의적으로 대답함 기본 0.8)
PARAMETER temperature 0.1
# 텍스트 예상 토큰 수(기본 128, -1 = 무한 생성)
PARAMETER num_predict 3000
PARAMETER stop <|start_header_id|>
PARAMETER stop <|end_header_id|>
PARAMETER stop <|eot_id|>

그리고 아래와 같이 명령어를 이용해 모델을 생성하면 됩니다.

1
ollama create ko-llama3 -f Modelfile

그리고 실행을 하면 사용할 수 있습니다..!

1
ollama run ko-llama3

처음에는 PARAMETER의 temperature를 1로 주고 모델을 생성하니 뭐랄까.. 조금 이상하게 설명을 한 것 같습니다.

image image

이후 답변이 마음에 안들어서 지적하니까 GPU가 부족한건지 그 뒤로 한참동안 답변이 없더라구요.. 😂

다시 temperature를 0.1로 변경하여 모델을 만들어서 실행해보니 아래와 같이 조금은 맞게 답변을 해주는 것 같긴 했습니다.

image

나무위키에서 찾아본 손흥민 선수의 정보와 다르긴 하지만 그래도 대략적으로 맞는 것을 보면 또 신기하기도 하고..

Java 코딩도 대략 맞는 것 같네요.

LLM에서 GGUF(Georgi Gerganov Unified Format) 파일 구조 및 어떻게 만드는지도 궁금하긴 하지만 이 정도만 알아도 사용하는데 문제는 없을 것이라 생각됩니다..!

이것을 응용해보면 Hugging Face 사이트에서 gguf와 관련된 모델을 찾아서 이용할 수 있습니다.

마치며

image

위처럼 Hugging Face에서 모델 항목에서 다운로드 수로 정렬을 해보면 다양한 모델들이 많이 있습니다. 결국 제대로 이용하고 싶다면 python과 공식 문서를 보면서 공부해야 할 것 같아요.

평소에 Web Backend와 Frontend, Devops 위주로 보다 AI 쪽을 찍먹해보니.. 뭔가 다른 세상 같기도 신기하면서도 알아야 할게 많은 것 같네요.

AI Roadmap(링크)을 봐도 꽤 낯설긴 합니다.

우선 다시 Backend와 Devops에 집중해야겠습니다. :D..