[Ollama] llama3.2 한국어 버전 사용해보기
최근 폐쇄망에서 챗봇을 개발하고 있는 도중 llama3.2가 새롭게 출시되었다는 사실을 알게 되었다.
llama3.2 특징을 간단하게 요약하자면, 성능은 기존 모델보다 업그레이드 된 것이며, 모바일 및 엣지 디바이스에 적합한 소형(1B, 3B) 및 중형 비전 모델(11B, 90B)로 구분된다고 한다.
엄청난 분기 처리를 통해 AI를 활용하는 것 처럼 개발할 예정이었는데, 가뭄에 단비같은 소식이 아닐 수가 없다 ㅎㅎ
하지만 한국어는 지원되지 않는 것이 큰 아쉬움이 있었는데, Hugging Face에 이것을 한국어 버전으로 사용할 수 있게 파인튜닝 한 것을 찾아볼 수 있었다..! (이번에는 테스트용으로 3B 버전 사용)
https://huggingface.co/Bllossom/llama-3.2-Korean-Bllossom-3B-gguf-Q4_K_M
Bllossom/llama-3.2-Korean-Bllossom-3B-gguf-Q4_K_M · Hugging Face
huggingface.co
관련 모델을 업로드시킨 저장소를 보니, 다음과 같은 소개글이 있었다.
저희 Bllossom 팀에서 Bllossom-3B 모델을 공개합니다.
llama3.2-3B가 나왔는데 한국어가 포함 안되었다구?? 이번 Bllossom-3B는 한국어가 지원되지 않는 기본 모델을 한국어-영어로 강화모델입니다.
- 100% full-tuning으로 150GB의 정제된 한국어로 추가 사전학습 되었습니다. (GPU많이 태웠습니다)
- 굉장히 정제된 Instruction Tuning을 진행했습니다.
- 영어 성능을 전혀 손상시키지 않은 완전한 Bilingual 모델입니다.
- LogicKor 기준 5B이하 최고점수를 기록했고 6점 초반대 점수를 보입니다.
- Instruction tuning만 진행했습니다. DPO 등 성능 올릴 방법으로 튜닝해보세요.
- MT-Bench, LogicKor 등 벤치마크 점수를 잘받기 위해 정답데이터를 활용하거나 혹은 벤치마크를 타겟팅 해서 학습하지 않았습니다. (해당 벤치마크 타게팅해서 학습하면 8점도 나옵니다...)
언제나 그랬듯 해당 모델은 상업적 이용이 가능합니다.
1. Bllossom은 AAAI2024, NAACL2024, LREC-COLING2024 (구두) 발표되었습니다.
2. 좋은 언어모델 계속 업데이트 하겠습니다!! 한국어 강화를위해 공동 연구하실분(특히논문) 언제든 환영합니다!!
상업적 이용을 풀어주시다니 감사합니다!
그리고 편법으로 Score를 뻥튀기한 것이 아니라고 하니 신뢰를 가지고, 한번 사용해보고자 한다.
1. Ollama 설치
ollama는 Homebrew의 공식 저장소에 포함되어 있으니 다음과 같이 간단하게 설치 가능하다.
# 설치
brew install ollama
# 설치 확인
ollama --version
2. Ollama 서버 실행
ollama 명령어를 사용하기 위해서는 로컬에서 Ollama 앱(백엔드 서버)이 실행 중이어야 하기에 다음 명령어로 ollama를 실행시켜준다.
ollama serve
3. Bllossom-3B 모델 다운로드 및 Modelfile 생성
처음 상단에 게시한 hugging face에서 모델을 다운받는다.
이후에 같은 디렉토리 내 Modelfile을 생성하여 다음 내용을 복사, 붙여넣기를 해준다.
여기서 Modelfile은 Dockerfile과 비슷한 역할을 하는 것으로 이해하면 될 것 같다.
FROM ./llama-3.2-Korean-Bllossom-3B-gguf-Q4_K_M.gguf
PARAMETER temperature 0.6
PARAMETER top_p 0.9
TEMPLATE """<|start_header_id|>system<|end_header_id|>
Cutting Knowledge Date: December 2023
{{ if .System }}{{ .System }}
{{- end }}
{{- if .Tools }}When you receive a tool call response, use the output to format an answer to the orginal user question.
You are a helpful assistant with tool calling capabilities.
{{- end }}<|eot_id|>
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 }}
{{- if eq .Role "user" }}<|start_header_id|>user<|end_header_id|>
{{- if and $.Tools $last }}
Given the following functions, please respond with a JSON for a function call with its proper arguments that best answers the given prompt.
Respond in the format {"name": function name, "parameters": dictionary of argument name and its value}. Do not use variables.
{{ range $.Tools }}
{{- . }}
{{ end }}
{{ .Content }}<|eot_id|>
{{- else }}
{{ .Content }}<|eot_id|>
{{- end }}{{ if $last }}<|start_header_id|>assistant<|end_header_id|>
{{ end }}
{{- else if eq .Role "assistant" }}<|start_header_id|>assistant<|end_header_id|>
{{- if .ToolCalls }}
{{ range .ToolCalls }}
{"name": "{{ .Function.Name }}", "parameters": {{ .Function.Arguments }}}{{ end }}
{{- else }}
{{ .Content }}
{{- end }}{{ if not $last }}<|eot_id|>{{ end }}
{{- else if eq .Role "tool" }}<|start_header_id|>ipython<|end_header_id|>
{{ .Content }}<|eot_id|>{{ if $last }}<|start_header_id|>assistant<|end_header_id|>
{{ end }}
{{- end }}
{{- end }}"""
SYSTEM """You are a helpful AI assistant. Please answer the user's questions kindly. 당신은 유능한 AI 어시스턴트 입니다. 사용자의 질문에 대해 친절하게 답변해주세요."""
4. 모델 생성하기
이후 Modelfile을 통해 모델을 생성시켜준다.
완료 후 터미널에 success가 뜨면 모델 생성에 성공한 것이다.
ollama create llama3.2-korean -f Modelfile
5. 실행하기
이전 단계에서 생성된 모델을 run 명령어를 통해 실행시켜준다.
그러면 ollama를 실행시킨 서버에서 여러 로그들이 뜨면서 성공한 것을 확인해 볼 수 있을 것이다.
ollama run llama3.2-korean
6. 테스트
실행 후 간단한 프롬프트를 넣고, 테스트를 진행해보았다.
여러 번 테스트 해보니 hallucination은 조금씩 존재했지만, 로컬에서 LLM을 쓸 수 있는 것이 얼마나 큰 장점인지 알기에, 성능은 충분하다고 생각한다.