앞에서 Ollama로 Gemma 경량화 모델을 실행해봤습니다. 이번엔 한글을 지원하는 경량화 모델중에
https://huggingface.co/heegyu/EEVE-Korean-Instruct-10.8B-v1.0-GGUF
사이트에 설치 방법과 테스트 방법이 잘 기술되어있습니다. 다만, GPU Cuda 버전이 안맞을경우 가이드대로 실행할때 Execption이 발생해서
- Original model is yanolja/EEVE-Korean-Instruct-10.8B-v1.0
- quantized using llama.cpp
llama.cpp는 4비트 정수 양자화를 이용해서 Llama 모델과 Python이 함께 실행하는(저수준 액세스 바인더) 것을 목표로 만들어진 프로젝트입니다. 의존성 없는 순수 C/C++를 통해서 구현되었으며, Mac OS, Windows, Linux 모두 실행 가능합니다.
다운로드 가능한 세가지 모델의 비교입니다
GGUF |
ggml-model-Q4_K_M.gguf
|
ggml-model-Q5_K_M.gguf
|
ggml-model-f16.gguf
|
Size |
6.51 GB
|
7.65 GB
|
21.6 GB
|
Metadata | Value | Value | Value |
version | 3 | 3 | 3 |
tensor_count | 435 | 435 | 435 |
kv_count | 24 | 24 | 23 |
general.architecture | llama | llama | llama |
general.name | LLaMA v2 | LLaMA v2 | LLaMA v2 |
general.file_type | 15 | 17 | 1 |
general.quantization_version | 2 | 2 | 4096 |
llama.context_length | 4096 | 4096 | 4096 |
llama.embedding_length | 4096 | 4096 | 48 |
llama.block_count | 48 | 48 | 14336 |
llama.feed_forward_length | 14336 | 14336 | 128 |
llama.rope.dimension_count | 128 | 128 | 10000 |
llama.rope.freq_base | 10000 | 10000 | 32 |
llama.attention.head_count | 32 | 32 | 8 |
llama.attention.head_count_kv | 8 | 8 | 1E-05 |
llama.attention.layer_norm_rms_epsilon | 1E-05 | 1E-05 | - |
tokenizer.ggml.model | llama | llama | llama |
tokenizer.ggml.tokens | [<unk>, <s>, </s>, <0x00>, <0x01>, ...] | [<unk>, <s>, </s>, <0x00>, <0x01>, ...] | [<unk>, <s>, </s>, <0x00>, <0x01>, ...] |
tokenizer.ggml.scores | [-1000, -1000, -1000, -1000, -1000, ...] | [-1000, -1000, -1000, -1000, -1000, ...] | [-1000, -1000, -1000, -1000, -1000, ...] |
tokenizer.ggml.token_type | [3, 3, 3, 6, 6, ...] | [3, 3, 3, 6, 6, ...] | [3, 3, 3, 6, 6, ...] |
tokenizer.ggml.bos_token_id | 1 | 1 | 1 |
tokenizer.ggml.eos_token_id | 32000 | 32000 | 32000 |
tokenizer.ggml.unknown_token_id | 0 | 0 | 0 |
tokenizer.ggml.padding_token_id | 2 | 2 | 2 |
tokenizer.ggml.add_bos_token | TRUE | TRUE | TRUE |
tokenizer.ggml.add_eos_token | FALSE | FALSE | FALSE |
tokenizer.chat_template | {% if messages[0]['role'] == 'system' %}{% set loop_messages = messages[1:] %}{% set system_message = messages[0]['content'] %}{% else %}{% set loop_messages = messages %}{% set system_message = 'You are a helpful assistant.' %}{% endif %}{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% for message in loop_messages %}{% if loop.index0 == 0 %}{{'<|im_start|>system ' + system_message + '<|im_end|> '}}{% endif %}{{'<|im_start|>' + message['role'] + ' ' + message['content'] + '<|im_end|>' + ' '}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant ' }}{% endif %} | {% if messages[0]['role'] == 'system' %}{% set loop_messages = messages[1:] %}{% set system_message = messages[0]['content'] %}{% else %}{% set loop_messages = messages %}{% set system_message = 'You are a helpful assistant.' %}{% endif %}{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% for message in loop_messages %}{% if loop.index0 == 0 %}{{'<|im_start|>system ' + system_message + '<|im_end|> '}}{% endif %}{{'<|im_start|>' + message['role'] + ' ' + message['content'] + '<|im_end|>' + ' '}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant ' }}{% endif %} | {% if messages[0]['role'] == 'system' %}{% set loop_messages = messages[1:] %}{% set system_message = messages[0]['content'] %}{% else %}{% set loop_messages = messages %}{% set system_message = 'You are a helpful assistant.' %}{% endif %}{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% for message in loop_messages %}{% if loop.index0 == 0 %}{{'<|im_start|>system ' + system_message + '<|im_end|> '}}{% endif %}{{'<|im_start|>' + message['role'] + ' ' + message['content'] + '<|im_end|>' + ' '}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant ' }}{% endif %} |
셋중에서 가장작은 Q4 모델을 다운로드 받습니다.
그리고 modelfile 파일을 만들어서 다운로드 받은 모델을 Ollama에 등록해주면 됩니다.
다운로드 받는 GGML은 Apple M1 및 M2 실리콘에 최적화된 양자화 구현이라고 합니다.
다운로드 받은 모델파일을 Ollama에 등록해주기 위해서 Modelfile을 생성합니다.
ModelFile
FROM /Users/dongsik/GitHub/llm/eeve/EEVE-Korean-Instruct-10.8B-v1.0-GGUF/ggml-model-Q4_K_M.gguf
TEMPLATE """### User:
{{ .Prompt }}
### Assistant:
"""
PARAMETER temperature 0.1
PARAMETER num_ctx 4096
PARAMETER stop "</s>"
PARAMETER stop "### System:"
PARAMETER stop "### User:"
PARAMETER stop "### Assistant:"
Modelfile과 다운로드받은 GGUF 파일이 준비되었습니다.
% ll
total 40
drwxr-xr-x 8 dongsik staff 256 Apr 12 14:28 .
drwxr-xr-x 7 dongsik staff 224 Apr 12 11:33 ..
drwxr-xr-x 5 dongsik staff 160 Apr 11 00:11 .ipynb_checkpoints
drwxr-xr-x 3 dongsik staff 96 Apr 10 23:55 EEVE-Korean-Instruct-10.8B-v1.0-GGUF
-rw-r--r-- 1 dongsik staff 325 Apr 12 14:27 Modelfile
-rw-r--r-- 1 dongsik staff 5957 Apr 11 00:26 ollama_eeve_gguf.ipynb
eeve 모델을 Ollama에 등록해줍니다
% ollama create eeve:q4 -f Modelfile
2024/04/12 14:28:50 parser.go:73: WARN Unknown command:
2024/04/12 14:28:50 parser.go:73: WARN Unknown command:
2024/04/12 14:28:50 parser.go:73: WARN Unknown command:
transferring model data
creating model layer
creating template layer
creating parameters layer
creating config layer
using already created layer sha256:5a79b80eb5e2eec5cf5d514dfa32187872dde1dae6a2b9c8
using already created layer sha256:c3de887d2d041bfea1bfed395834ea828839af278003269e
using already created layer sha256:e6b785eab1777ecfc57eab9a85f9b623931e6f1079ae6d75
using already created layer sha256:8b03799cdb5862e5cdfda70f0e116193aa07f2309015a158
writing manifest
success
성공적으로 등록되면 모델을 확인가능합니다.
gemma:2b 모델과 eeve:q4 모델 두개가 등록된것을 확인합니다.
% ollama list
NAME ID SIZE MODIFIED
eeve:q4 68f4c2c2d9fe 6.5 GB 8 seconds ago
gemma:2b b50d6c999e59 1.7 GB 2 days ago
지울때는 rm 명령을 사용합니다 (ollama rm eeve:q4)
cli로 ollama eeve:q4 모델에 질문을 해봅니다.
M1 노트북임을 감안했을때 상당히 빠르게 답변을 해주고 있고 퀄리티도 상당합니다.
아래 추가로 ChatGPT 3.5와 뤼튼의 GPT 4를 통해서 동일한 질문을 해본 결과 입니다.
eeve:q4 의 답변
% ollama run eeve:q4 하늘은 왜 파란색일까요?
하늘이 파란색인 이유는 대기 중에 있는 공기 분자와 먼지 입자들이 햇빛을 산란시키기 때문입니다. 태양빛이 지구 대기를 통과할 때, 이 작은 입자들과 상호 작용하여 빛을 다양한 방향으로 흩어지게 합니다. 우리가 하늘에서 보는 빛은 주로
파란색과 보라색의 가시광선 스펙트럼에 집중되어 있습니다.
이 현상은 빛이 공기 분자와 먼지 입자에 부딪힐 때 일어나는 산란 효과 때문입니다. 이 작은 입자들은 태양빛을 다양한 방향으로 흩어지게 하여, 우리가 하늘에서 보는 색깔을 만들어냅니다. 파란색과 보라색 빛은 다른 색들보다 더
산란되기 때문에, 우리 눈에 가장 많이 도달하여 하늘을 파랗게 보이게 합니다.
또한 대기 중에 있는 물방울이나 얼음 결정도 햇빛의 산란에 역할을 할 수 있습니다. 이 입자들이 태양빛과 상호 작용할 때, 빛을 다양한 방향으로 흩어지게 하여 하늘을 더욱 파랗게 보이게 만듭니다.
하늘이 항상 파란색인 것은 아니며, 대기 조건에 따라 색깔이 변할 수 있다는 점을 주목하는 것이 중요합니다. 예를 들어, 일출이나 일몰 때는 대기 중에 있는 먼지 입자와 물방울의 양이 증가하여 햇빛을 더 많이 산란시켜 하늘에 주황색,
분홍색 또는 보라색을 만들 수 있습니다.
요약하자면, 하늘이 파란색인 이유는 공기 분자, 먼지 입자 및 대기 중 물방울이나 얼음 결정과 같은 다양한 요소가 태양빛의 산란에 기여하기 때문입니다. 이 상호 작용은 파란색과 보라색 빛의 높은 농도를 만들어내어 우리가 하늘에서 보는
색깔을 만들어냅니다.
GPT-3.5의 답변
뤼튼 GPT-4의 답변
Ollama Langchain을 이용해서 추론을 잘하는지 질문을 해보겠습니다.
import time
import langchain
from langchain_community.llms import Ollama
import logging
# Configure basic logging
logging.basicConfig(level=logging.INFO)
try:
llm = Ollama(model="eeve:q4")
# 프롬프트가 잘 정의되어 있는지 확인하는 것이 필요합니다. (모델의 기능에 따라 조정가능)
start = time.time()
prompt = ("한국의 수도는 어디인가요? 아래 선택지 중 골라주세요.\n\n(A) 경성\n(B) 부산\n(C) 평양\n(D) 서울\n(E) 전주")
response = llm.invoke(prompt)
print(response)
print(time.time() - start)
except ImportError:
logging.error("Failed to import Ollama from langchain_community. Is the package installed?")
except Exception as e:
logging.error(f"An unexpected error occurred: {e}")
정답은 (D) 서울입니다.
3.465108871459961
'AI > LLM' 카테고리의 다른 글
M1 Ollama로 heegyu/EEVE-Korean-Instruct-10.8B-v1.0-GGUF 양자화 모델 테스트 (1) | 2024.04.20 |
---|---|
M1 llama.cpp로 EEVE Korean Instruct GGUF 모델 실행 (0) | 2024.04.14 |
M1 Ollama+Gemma+LangChain 설치하고 간단히 돌려보기 (0) | 2024.04.10 |
OPENAI_API_KEY 키 설정하기 (0) | 2024.03.18 |
LLM은 언제쯤 내 띠를 맞출려나 (0) | 2024.02.24 |