๐Ÿฆ™ llama.cpp์™€ ggml๋กœ ๊ตฌํ˜„ํ•˜๋Š” On-Device LLM ์‹œ๋Œ€ ์ด์ •๋ฆฌ


์ตœ๊ทผ AI ์—…๊ณ„์—์„œ LLM(Large Language Model)์˜ on-device ๊ตฌ๋™์ด ์ ์  ๋” ์ฃผ๋ชฉ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ํ๋ฆ„์˜ ์ค‘์‹ฌ์— ๋ฐ”๋กœ llama.cpp์™€ ggml ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” llama.cpp์˜ ๊ตฌ์กฐ, ํŠน์ง•, ์ฒ ํ•™, ๊ทธ๋ฆฌ๊ณ  ์š”์ฆ˜ ๋œจ๋Š” on-device LLM ์ƒํƒœ๊ณ„์˜ ํŠธ๋ Œ๋“œ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ด์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1๏ธโƒฃ llama.cpp๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

  • llama.cpp๋Š” Meta์˜ LLaMA ๋ชจ๋ธ์„ C/C++ ๊ธฐ๋ฐ˜ ๊ฒฝ๋Ÿ‰ ์—”์ง„์œผ๋กœ inferenceํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ.
  • Georgi Gerganov๊ฐ€ ggml ๊ธฐ๋ฐ˜์œผ๋กœ “์ฃผ๋ง ํ•ดํ‚น ํ”„๋กœ์ ํŠธ”๋กœ ์‹œ์ž‘ํ•œ ๊ฒƒ์ด ์‹œ์ดˆ.
  • ํ˜„์žฌ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ํญ๋ฐœ์ ์œผ๋กœ ์„ฑ์žฅํ•˜์—ฌ **”LLM๊ณ„์˜ ๋ฆฌ๋ˆ…์Šค”**๋ผ ๋ถˆ๋ฆด ๋งŒํผ ์˜ํ–ฅ๋ ฅ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ž๋ฆฌ ์žก์Œ.

llama.cpp โ‰  LLM

  • LLaMA ๋ชจ๋ธ = LLM (Large Language Model) ์ž์ฒด
  • llama.cpp = ๊ทธ LLM ๋ชจ๋ธ์„ ๋Œ๋ฆฌ๋Š” lightweight C/C++ ์—”์ง„
  • LLaMA ์™ธ์—๋„ ์š”์ฆ˜์€ ๋‹ค์–‘ํ•œ LLM ๋ชจ๋ธ๋“ค์ด llama.cpp๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ:
    • Mistral
    • Qwen
    • Phi-2
    • OpenChat
    • Gemma ๋“ฑ

2๏ธโƒฃ ggml: llama.cpp์˜ ๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ggml (Graph Grammar Machine Learning):
    • ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ…์„œ ์—ฐ์‚ฐ ์ง€์›.
    • TensorFlow์ฒ˜๋Ÿผ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ ํ›„ ggml_graph_compute() ๋˜๋Š” ggml_backend_graph_compute()๋กœ ์‹คํ–‰.
    • ํ•™์Šต์€ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  inference ์ „์šฉ์— ์ตœ์ ํ™”.

ํŠน์ง•

  • Pure C ๊ธฐ๋ฐ˜, ์˜์กด์„ฑ ์ตœ์†Œํ™”
  • CPU / CUDA / Metal / ROCm backend ์ง€์›
  • WebAssembly (wasm) ๋นŒ๋“œ ๊ฐ€๋Šฅ โ†’ ์›น์—์„œ๋„ llama.cpp ์‹คํ–‰ ๊ฐ€๋Šฅ

3๏ธโƒฃ llama.cpp๊ฐ€ ์ฃผ๋ชฉ๋ฐ›๋Š” ์ด์œ 

โ‘  ์ด์‹์„ฑ(Portability)

  • C/C++ ๊ธฐ๋ฐ˜ โ†’ ๋ชจ๋ฐ”์ผ, ์ž„๋ฒ ๋””๋“œ, IoT ๋””๋ฐ”์ด์Šค๋กœ ์‰ฝ๊ฒŒ ํฌํŒ… ๊ฐ€๋Šฅ
  • Python runtime ํ•„์š” ์—†์Œ โ†’ Native binary๋งŒ์œผ๋กœ LLM ์‹คํ–‰ ๊ฐ€๋Šฅ

โ‘ก ๊ฒฝ๋Ÿ‰์„ฑ๊ณผ ์„ฑ๋Šฅ

  • ์ตœ์ ํ™”๋œ ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„ + ๋กœ์šฐ๋ ˆ๋ฒจ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ โ†’ ๋น ๋ฅธ ์‹คํ–‰
  • ์—ฌ๋Ÿฌ ๋ฐฑ์—”๋“œ ์ง€์›:
    • CPU (AVX, AVX2, AVX512 ์ตœ์ ํ™”)
    • CUDA (GPU ๊ฐ€์†)
    • Metal (์• ํ”Œ ๋””๋ฐ”์ด์Šค)
    • ROCm (AMD GPU)

โ‘ข ์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์›Œ

  • LLaMA ๊ณต๊ฐœ ์ดํ›„ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋”ฐ๋ผ์žก์œผ๋ฉฐ ๋‹ค์–‘ํ•œ ํˆด๋ง ์ง€์›:
    • gguf ํฌ๋งท ํ†ต์ผ (๋‹ค์–‘ํ•œ LLM ํ˜ธํ™˜ ๊ฐ€๋Šฅ)
    • llama.cpp ๊ธฐ๋ฐ˜ chat-ui ํ”„๋กœ์ ํŠธ ๋‹ค์ˆ˜ ๋“ฑ์žฅ
    • ๋ชจ๋ฐ”์ผ ์•ฑ์—๋„ ์†์‰ฝ๊ฒŒ ํƒ‘์žฌ ๊ฐ€๋Šฅ

4๏ธโƒฃ llama.cpp vs PyTorch

ํ•ญ๋ชฉllama.cppPyTorch
์–ธ์–ดC/C++Python + C++
์šฉ๋„Inference ์ „์šฉํ•™์Šต + Inference
ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ๋›ฐ์–ด๋‚จ (๋ชจ๋ฐ”์ผ, ์ž„๋ฒ ๋””๋“œ ๊ฐ€๋Šฅ)์ œํ•œ์  (์„œ๋ฒ„/๋ฐ์Šคํฌํƒ‘ ์ฃผ๋กœ ์‚ฌ์šฉ)
์„ฑ๋Šฅ ์ตœ์ ํ™”์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ์ปจํŠธ๋กค ๊ฐ€๋Šฅ๊ณ ์ˆ˜์ค€ API ๊ธฐ๋ฐ˜
์‚ฌ์šฉ ํŽธ์˜์„ฑ๋กœ์šฐ๋ ˆ๋ฒจ ์ œ์–ด๊ณ ์ˆ˜์ค€ API ํŽธ์˜

๐Ÿ‘‰ llama.cpp๋Š” “on-device LLM”์ด๋ผ๋Š” ํŠนํ™”๋œ ์˜์—ญ์—์„œ ๊ฐ•๋ ฅํ•œ ์žฅ์ ์„ ๊ฐ€์ง.


5๏ธโƒฃ ์ตœ๊ทผ ์ธ๊ธฐ on-device LLM ํ”„๋กœ์ ํŠธ๋“ค

๐Ÿ† Top ํ•ซํ•œ ํ”„๋กœ์ ํŠธ

ํ”„๋กœ์ ํŠธ๋ช…์„ค๋ช…
llama.cppC/C++ ๊ธฐ๋ฐ˜ LLaMA & ๋‹ค์–‘ํ•œ LLM inference ์—”์ง„
ggmlC ๊ธฐ๋ฐ˜ tensor ์—ฐ์‚ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
llama.cpp + gguf models์ตœ์‹  LLM ๋ชจ๋ธ ๋Œ€๋ถ€๋ถ„ gguf ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ ํ›„ ์‚ฌ์šฉ
llama.cpp WebAssembly ๋นŒ๋“œllama.cpp๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ตฌ๋™ (wasm ๊ธฐ๋ฐ˜)
mlc-llmTVM ๊ธฐ๋ฐ˜ lightweight LLM engine (๋ชจ๋ฐ”์ผ ์ตœ์ ํ™”์— ๊ฐ•์ )
ollamaLocal-first LLM runner, ๋‹ค์–‘ํ•œ LLM ์‰ฝ๊ฒŒ ์‹คํ–‰ ๊ฐ€๋Šฅ
koboldcppLLM ๊ธฐ๋ฐ˜ ํ…์ŠคํŠธ ์ƒ์„ฑ ํˆด (writing, RPG, chatbot ๋“ฑ)
LM StudioGUI ๊ธฐ๋ฐ˜ Local LLM runner (llama.cpp backend ์‚ฌ์šฉ)

๐Ÿ†• ์š”์ฆ˜ ์ž˜ ์“ฐ์ด๋Š” on-device LLM ๋ชจ๋ธ

๋ชจ๋ธ๋ช…ํŠน์ง•
LLaMA 3Meta ์ตœ์‹  ๊ณต๊ฐœ ๋ชจ๋ธ
Mistral 7B์„ฑ๋Šฅ ๋Œ€๋น„ ํฌ๊ธฐ/์†๋„ ์šฐ์ˆ˜
Phi-2Microsoft, ์†Œํ˜• ๋ชจ๋ธ๋กœ ๋งค์šฐ ๋น ๋ฆ„
QwenAlibaba, ๋‹ค์–‘ํ•œ ์–ธ์–ด ์ง€์›
GemmaGoogle, lightweight friendly

6๏ธโƒฃ ์•ž์œผ๋กœ์˜ ์ „๋ง

  • LLM์ด ์ ์  ๋” Edge-first๋กœ ์ด๋™ ์ค‘:
    • ๋ชจ๋ฐ”์ผ
    • ์ž๋™์ฐจ IVI
    • ์Šค๋งˆํŠธํ™ˆ
    • IoT ๋””๋ฐ”์ด์Šค
    • Personal LLM Device (์˜ˆ: Rabbit r1, AI ์Šค๋งˆํŠธํฐ ๋“ฑ)
  • llama.cpp๋Š” ์ด ํ๋ฆ„์˜ ์ตœ์ „์„ ์— ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜๋กœ ์ง€์† ์„ฑ์žฅ ์ค‘.
  • ggml ๊ธฐ๋ฐ˜ ์ƒํƒœ๊ณ„ + llama.cpp + ๋‹ค์–‘ํ•œ gguf ๋ชจ๋ธ โ†’ ์•ž์œผ๋กœ ๋” ๋งŽ์€ ํ˜์‹  ๊ฐ€๋Šฅ.

โœจ ๊ฒฐ๋ก 

  • llama.cpp๋Š” ๋‹จ์ˆœํ•œ LLM์ด ์•„๋‹ˆ๋ผ lightweight, portable LLM inference ์—”์ง„์ž„.
  • C/C++ ๊ธฐ๋ฐ˜์ด๋ผ ์ž„๋ฒ ๋””๋“œ ํฌํŒ…์ด ๋งค์šฐ ์šฉ์ดํ•˜๊ณ , ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ๊ฐ€๋ณ๊ฒŒ LLM์„ ๊ตฌ๋™ ๊ฐ€๋Šฅ.
  • on-device AI๊ฐ€ ๊ธ‰๊ฒฉํžˆ ํ™•์‚ฐ ์ค‘์ธ ์ง€๊ธˆ, llama.cpp์™€ ggml๋Š” ๋ฐ˜๋“œ์‹œ ์ฃผ๋ชฉํ•ด์•ผ ํ•  ํ•ต์‹ฌ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜์ž„.

๐Ÿš€ ์ฐธ๊ณ  ๋งํฌ


๐Ÿ‘‰ ํ•œ๋งˆ๋”” ์š”์•ฝ

“์ด์ œ LLM์€ ์„œ๋ฒ„์—๋งŒ ๋‘์ง€ ์•Š๋Š”๋‹ค. ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ on-device LLM ์‹œ๋Œ€๊ฐ€ ์—ด๋ฆฌ๊ณ  ์žˆ๊ณ , llama.cpp๊ฐ€ ๊ทธ ์ค‘์‹ฌ์— ์žˆ๋‹ค.


์ฝ”๋ฉ˜ํŠธ

๋‹ต๊ธ€ ๋‚จ๊ธฐ๊ธฐ

์ด๋ฉ”์ผ ์ฃผ์†Œ๋Š” ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ํ•„๋“œ๋Š” *๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค