๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿฆ™Llama.cpp ์‹œ์ž‘ํ•˜๊ธฐ

๊ฐœ์š”โ€‹

Open WebUI๋Š” ๋กœ์ปฌ Llama.cpp ์„œ๋ฒ„๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์—ฌ ํšจ์œจ์ ์ด๊ณ  ์–‘์žํ™”๋œ ์–ธ์–ด ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ„๋‹จํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Llama.cpp๋ฅผ ์ง์ ‘ ์ปดํŒŒ์ผํ–ˆ๋“  ์‚ฌ์ „ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋“ , ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค:

  • Llama.cpp ์„œ๋ฒ„ ์„ค์ •
  • ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ์„ ๋กœ์ปฌ์—์„œ ๋กœ๋“œ
  • Open WebUI์™€ ํ†ตํ•ฉํ•˜์—ฌ ๋งค๋„๋Ÿฌ์šด ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

์‹œ์ž‘ํ•ด๋ด…์‹œ๋‹ค!


1๋‹จ๊ณ„: Llama.cpp ์„ค์น˜โ€‹

Llama.cpp๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋จผ์ € ๋กœ์ปฌ์— Llama.cpp ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ์„ค์น˜ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

์„ค์น˜ ํ›„, llama-server๊ฐ€ ๋กœ์ปฌ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•˜์‹ญ์‹œ์˜ค.


2๋‹จ๊ณ„: ์ง€์›๋˜๋Š” ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œโ€‹

Llama.cpp๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ GGUF ํ˜•์‹์˜ ์–‘์žํ™” LLM์„ ๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆˆ์— ๋„๋Š” ์˜ˆ๋กœ๋Š” UnslothAI๊ฐ€ ์ตœ์ ํ™”ํ•œ DeepSeek-R1 1.58-๋น„ํŠธ ๋ชจ๋ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œํ•˜๋ ค๋ฉด:

  1. Hugging Face์˜ Unsloth DeepSeek-R1 ์ €์žฅ์†Œ ๋ฐฉ๋ฌธ
  2. 1.58-๋น„ํŠธ ์–‘์žํ™” ๋ฒ„์ „ ๋‹ค์šด๋กœ๋“œ โ€“ ์•ฝ 131GB.

๋˜๋Š” Python์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋‹ค์šด๋กœ๋“œ:

# pip install huggingface_hub hf_transfer

from huggingface_hub import snapshot_download

snapshot_download(
repo_id = "unsloth/DeepSeek-R1-GGUF",
local_dir = "DeepSeek-R1-GGUF",
allow_patterns = ["*UD-IQ1_S*"], # 1.58-๋น„ํŠธ ๋ฒ„์ „๋งŒ ๋‹ค์šด๋กœ๋“œ
)

์ด๋กœ์จ ๋ชจ๋ธ ํŒŒ์ผ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ์— ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค:

DeepSeek-R1-GGUF/
โ””โ”€โ”€ DeepSeek-R1-UD-IQ1_S/
โ”œโ”€โ”€ DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf
โ”œโ”€โ”€ DeepSeek-R1-UD-IQ1_S-00002-of-00003.gguf
โ””โ”€โ”€ DeepSeek-R1-UD-IQ1_S-00003-of-00003.gguf

๐Ÿ“ ์ฒซ ๋ฒˆ์งธ GGUF ํŒŒ์ผ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ๊ธฐ์–ตํ•˜์„ธ์š” โ€” 3๋‹จ๊ณ„์—์„œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


3๋‹จ๊ณ„: Llama.cpp๋กœ ๋ชจ๋ธ ์ œ๊ณตโ€‹

llama-server ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. llama.cpp ํด๋”(์˜ˆ: build/bin)๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”:

./llama-server \
--model /your/full/path/to/DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf \
--port 10000 \
--ctx-size 1024 \
--n-gpu-layers 40

๐Ÿ› ๏ธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๋จธ์‹ ์— ๋งž๊ฒŒ ์กฐ์ •ํ•˜์„ธ์š”:

  • --model: .gguf ๋ชจ๋ธ ํŒŒ์ผ ๊ฒฝ๋กœ
  • --port: 10000 (๋˜๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‹ค๋ฅธ ํฌํŠธ ์„ ํƒ)
  • --ctx-size: ํ† ํฐ ์ปจํ…์ŠคํŠธ ๊ธธ์ด (RAM์ด ํ—ˆ์šฉํ•˜๋ฉด ์ฆ๊ฐ€ ๊ฐ€๋Šฅ)
  • --n-gpu-layers: ๋” ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์œ„ํ•ด GPU์— ๊ณ„์ธต์„ ์˜คํ”„๋กœ๋“œ

์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋กœ์ปฌ์—์„œ OpenAI ํ˜ธํ™˜ API๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค:

http://127.0.0.1:10000

4๋‹จ๊ณ„: Llama.cpp๋ฅผ Open WebUI์— ์—ฐ๊ฒฐโ€‹

Open WebUI์—์„œ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋ธ์„ ์ง์ ‘ ์ œ์–ดํ•˜๊ณ  ์ฟผ๋ฆฌํ•˜๋ ค๋ฉด:

  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ Open WebUI ์—ด๊ธฐ
  2. โš™๏ธ ๊ด€๋ฆฌ์ž ์„ค์ • โ†’ ์—ฐ๊ฒฐ โ†’ OpenAI ์—ฐ๊ฒฐ๋กœ ์ด๋™
  3. โž• ์—ฐ๊ฒฐ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋‹ค์Œ์„ ์ž…๋ ฅ:
  • URL: http://127.0.0.1:10000/v1
    (WebUI๋ฅผ Docker ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ http://host.docker.internal:10000/v1 ์‚ฌ์šฉ)
  • API ํ‚ค: none (๋น„์›Œ๋‘ก๋‹ˆ๋‹ค)

๐Ÿ’ก ์ €์žฅ ํ›„, Open WebUI๋Š” ๋กœ์ปฌ Llama.cpp ์„œ๋ฒ„๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค!

Open WebUI ๋‚ด Llama.cpp ์—ฐ๊ฒฐ


๋น ๋ฅธ ํŒ: ์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ชจ๋ธ ์‚ฌ์šฉํ•ด๋ณด๊ธฐโ€‹

์—ฐ๊ฒฐ์ด ์™„๋ฃŒ๋˜๋ฉด Open WebUI ์ฑ„ํŒ… ๋ฉ”๋‰ด์—์„œ ๋ชจ๋ธ์„ ์„ ํƒํ•˜๊ณ  ์ƒํ˜ธ์ž‘์šฉ์„ ์‹œ์ž‘ํ•˜์„ธ์š”!

๋ชจ๋ธ ์ฑ„ํŒ… ๋ฏธ๋ฆฌ๋ณด๊ธฐ


์ค€๋น„ ์™„๋ฃŒ!โ€‹

๊ตฌ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด Open WebUI๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์€:

  • Llama.cpp๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋กœ์ปฌ ๋ชจ๋ธ ๊ด€๋ฆฌ ๋ฐ ์ „ํ™˜
  • ํ‚ค ์—†์ด OpenAI ํ˜ธํ™˜ API ์‚ฌ์šฉ
  • DeepSeek-R1๊ณผ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ—˜

๐Ÿš€ ์žฌ๋ฏธ์žˆ๊ฒŒ ์‹คํ—˜ํ•˜๊ณ  ๊ตฌ์ถ•ํ•˜์„ธ์š”!