오픈소스 경량 LLM들을 실행할 수 있도록 설명하는 글.
Ollama를 로컬 서버를 띄우기 까지 필요한 지식들을 정리하였다.
LLM을 위한 배경지식
llama.cpp
2023.02 공개된 META의 오픈소스 LLM인 LLaMA를 CPU에서도 추론 및 작동할 수 있도록 C/C++로 구현된 인터페이스이다. llama.cpp github
.gguf
llama.ccp의 개발자인 Georgi Gerganov과 Machine Learning을 합쳐 .ggml
이라는 확장자로 LLaMA를 실행할 수 있도록 하였다. 이후 다른 인공지능도 llama.ccp에서 실행할 수 있도록 GGML Universal Format
확장자를 만들었다. 따라서 .gguf 확장자를 가진 인공지능 모델들은 동일한 인터페이스를 지원한다.
ollama
llama.cpp 기반의 런타임 환경이다. .gguf 포맷을 불러오고, llama.cpp로 실행하고, 이를 로컬 서버의 형태로 사용하는 인터페이스를 제공한다.
양자화
ggma/gguf는 텐서(수의 배열)를 k개의 block으로 나눈다. 이를 정규화한 후 각 블록을 4bit의 근사치에 할당한다. 이후 재현율을 높이기 위해 블록마다 메타데이터를 추가한다. 이렇게 양자화되어 만들어진 .gguf
파일들은 {모델명}_4b_k_m
이라는 이름이 붙는다. (4bit로, k-양자화 한 후, 메타데이터로 보정했다는 뜻) 32float를 4bit로 양자화하면 대략 20%~30%의 자원만을 소모하게 되고, gpu가 아닌 cpu로도 구동이 가능해진다.
멀티턴
LLM은 기본적으로 Stateless로 작동한다. 사용자와의 대화를 기억하지 못한다. 멀티턴은 사용자와의 대화 내용들을 메모리에 저장하고, 이를 맥락으로 이어서 대답하는 것을 의미한다.
RAG (Retrieval-Augmented Generation)
응답을 하기 전에 외부 데이터를 변수로 불러와 사용하는 것을 의미한다. 가령 pdf를 참조하는 등을 의미한다. RAG를 구현할 때에는 텍스트를 vector화하고(주로 openAI의 text-embedding-3-small를 사용), vector를 저장해둘 vector db를 사용하게 된다.
펑션 콜링
응답을 하기 전에 함수를 실행하거나 외부 API를 사용하는 것을 의미한다. 가령 "1+1"을 LLM에게 물어보면, LLM은 이를 답변할 수 없으므로 숫자를 계산하는 함수를 호출한 후 대답하게 된다.
LangChain
인공지능 모델을 어플리케이션화할 수 있도록 돕는 프레임워크이다. 인공지능 서버를 호출한 후 RAG, Function Calling, 프롬프트 엔지니어링 등을 적용하도록 돕는다.
Ollama로 하이퍼클로바X시드 실행하기
하이퍼클로바X시드
하이퍼클로바X시드는 네이버의 LLM인 하이퍼클로바X의 경량화 모델이며, 상업용 라이센스를 지원한다.
한국어 오픈소스 경량화 모델 중에는 알리바바의 Qwen 3
가 성능이 좋고, 한국어도 잘 지원하는 것으로 알려져 있다. 하지만, Qwen
등 외산 LLM들이 낮은 수준의 파라미터에서는 중국어, 태국어, 일본어를 섞어가며 대답하는 것에 비해 하이퍼클로바X시드는 3b보다 낮은 수준(0.5b, 1.5b)에서도 안정적으로 한국어를 구사하고, 한국의 역사 지식과 같은 부분에서 큰 오류없이 대답하는 강점이 있다.
Ollama 설치
https://ollama.com/
해당 사이트에서 자신의 OS에 맞는 Ollama를 설치한다.
양자화 모델 실행
Ollama를 설치한 후 터미널에서 ollama run hf.co/rippertnt/HyperCLOVAX-SEED-Text-Instruct-1.5B-Q4_K_M-GGUF:Q4_K_M
를 실행한다.
https://huggingface.co/rippertnt/HyperCLOVAX-SEED-Text-Instruct-1.5B-Q4_K_M-GGUF 모델은 한국의 스타트업 서큘러스의 대표님이 양자화한 모델로, 현재 하이퍼클로바X시드의 1.5B 모델의 gguf 포맷 중 가장 인기가 많다.
사용
Ollama 인터페이스에서 말을 걸면 대답한다.
Ollama로 실행중인 서버는 http://localhost:11434
의 포트로 실행된다. 따라서 아래와 같이 http 요청을 보내도 응답한다.
curl http://localhost:11434/api/generate \
-d '{
"model": "hf.co/rippertnt/HyperCLOVAX-SEED-Text-Instruct-1.5B-Q4_K_M-GGUF:Q4_K_M",
"prompt": "안녕? 넌 누구니?",
"stream": false
}'
{"model":"hf.co/rippertnt/HyperCLOVAX-SEED-Text-Instruct-1.5B-Q4_K_M-GGUF:Q4_K_M","created_at":"2025-07-02T18:48:44.449608Z","response":"안녕하세요! 저는 인공지능 언어 모델인 CLOVA X입니다. 네이버의 초대규모(Hyperscale) 언어모델인 HyperCLOVA X 기술을 바탕으로 만들어졌으며, 사용자님께 도움이 되는 정보를 제공하고 다양한 요청을 수행하기 위해 존재합니다.\n\n저는 다음과 같은 기능을 제공할 수 있습니다.\n1. 질의응답: 사용자의 질문에 대해 답변을 제공합니다.\n2. 글쓰기: 사용자의 요청에 따라 이메일, 비즈니스 문서 등 다양한 글을 작성할 수 있습니다.\n3. 번역: 여러 언어 간의 번역을 지원하며, 정확도를 높이기 위한 연구가 계속되고 있습니다.\n4. 요약: 원문을 짧게 요약하여 제공하는 기능입니다.\n5. 일상 대화: 일상적인 주제로 대화를 진행합니다.\n\n저는 사용자님을 돕기 위해 최선을 다하겠습니다. 궁금한 점이 있으시면 언제든지 물어보세요!","done":true,"done_reason":"stop","context":[100272,882,198,103221,100889,30,66653,234,101797,84136,30,100273,198,100272,78191,198,101151,0,109176,105569,103176,110172,32428,356,1623,13114,1630,80052,13,101009,21028,105347,102788,11135,1100,388,2296,8,103176,105141,32428,33832,34,1623,13114,1630,110246,107471,104661,109547,107212,11,104658,110084,106729,104138,109115,106887,105012,106393,18359,29833,169,52375,67525,101967,3396,91657,58232,61938,382,109977,107046,109793,106487,104667,29833,101632,627,16,13,108434,21028,105777,104281,25,103441,106630,106938,105331,105874,627,17,13,107642,105370,25,103441,106393,19954,109102,105765,11,101858,100978,78102,105012,108744,108746,48936,29833,101632,627,18,13,106945,25,106402,103176,107967,85721,103953,103797,102000,11,106360,107640,104852,106944,103187,106796,20565,109104,106934,101632,627,19,13,100310,25,101769,103072,105677,58901,100310,83290,105530,102939,80052,627,20,13,102668,110185,25,102668,107510,100385,108104,106942,169,52375,61938,382,109977,104658,109334,105751,21121,101967,109856,50467,100965,13,100874,24486,108843,103323,104010,108921,101866,105929,0],"total_duration":4391004917,"load_duration":47402125,"prompt_eval_count":16,"prompt_eval_duration":136507959,"eval_count":168,"eval_duration":4206392208}%