์ต๊ทผ 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.cpp | PyTorch |
---|---|---|
์ธ์ด | C/C++ | Python + C++ |
์ฉ๋ | Inference ์ ์ฉ | ํ์ต + Inference |
ํ๋ซํผ ํธํ์ฑ | ๋ฐ์ด๋จ (๋ชจ๋ฐ์ผ, ์๋ฒ ๋๋ ๊ฐ๋ฅ) | ์ ํ์ (์๋ฒ/๋ฐ์คํฌํ ์ฃผ๋ก ์ฌ์ฉ) |
์ฑ๋ฅ ์ต์ ํ | ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ปจํธ๋กค ๊ฐ๋ฅ | ๊ณ ์์ค API ๊ธฐ๋ฐ |
์ฌ์ฉ ํธ์์ฑ | ๋ก์ฐ๋ ๋ฒจ ์ ์ด | ๊ณ ์์ค API ํธ์ |
๐ llama.cpp๋ “on-device LLM”์ด๋ผ๋ ํนํ๋ ์์ญ์์ ๊ฐ๋ ฅํ ์ฅ์ ์ ๊ฐ์ง.
5๏ธโฃ ์ต๊ทผ ์ธ๊ธฐ on-device LLM ํ๋ก์ ํธ๋ค
๐ Top ํซํ ํ๋ก์ ํธ
ํ๋ก์ ํธ๋ช | ์ค๋ช |
---|---|
llama.cpp | C/C++ ๊ธฐ๋ฐ LLaMA & ๋ค์ํ LLM inference ์์ง |
ggml | C ๊ธฐ๋ฐ tensor ์ฐ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
llama.cpp + gguf models | ์ต์ LLM ๋ชจ๋ธ ๋๋ถ๋ถ gguf ํฌ๋งท์ผ๋ก ๋ณํ ํ ์ฌ์ฉ |
llama.cpp WebAssembly ๋น๋ | llama.cpp๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ๊ตฌ๋ (wasm ๊ธฐ๋ฐ) |
mlc-llm | TVM ๊ธฐ๋ฐ lightweight LLM engine (๋ชจ๋ฐ์ผ ์ต์ ํ์ ๊ฐ์ ) |
ollama | Local-first LLM runner, ๋ค์ํ LLM ์ฝ๊ฒ ์คํ ๊ฐ๋ฅ |
koboldcpp | LLM ๊ธฐ๋ฐ ํ ์คํธ ์์ฑ ํด (writing, RPG, chatbot ๋ฑ) |
LM Studio | GUI ๊ธฐ๋ฐ Local LLM runner (llama.cpp backend ์ฌ์ฉ) |
๐ ์์ฆ ์ ์ฐ์ด๋ on-device LLM ๋ชจ๋ธ
๋ชจ๋ธ๋ช | ํน์ง |
---|---|
LLaMA 3 | Meta ์ต์ ๊ณต๊ฐ ๋ชจ๋ธ |
Mistral 7B | ์ฑ๋ฅ ๋๋น ํฌ๊ธฐ/์๋ ์ฐ์ |
Phi-2 | Microsoft, ์ํ ๋ชจ๋ธ๋ก ๋งค์ฐ ๋น ๋ฆ |
Qwen | Alibaba, ๋ค์ํ ์ธ์ด ์ง์ |
Gemma | Google, 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๊ฐ ๊ทธ ์ค์ฌ์ ์๋ค.“
๋ต๊ธ ๋จ๊ธฐ๊ธฐ