๋ก์ปฌ LLM ์ ์ ๊ฐ์ด๋ (v23)
1. ๊ฐ์ ๋ฐ ์ฌ์ ์ค๋น
๋ก์ปฌ LLM(๋ํ ์ธ์ด ๋ชจ๋ธ)์ ์คํํ๋ ๊ฒ์ ๋น์ฉ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก AI ๊ธฐ๋ฅ์ ํตํฉํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ์ด ๊ฐ์ด๋๋ Linux ๊ธฐ๋ฐ ์์คํ ์์ ๋ก์ปฌ LLM์ ์ค์ ํ๊ณ ์ต์ ํํ๋ ์ค์ฉ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์ฌ์ ์๊ตฌ์ฌํญ
- ์ด์ ์ฒด์ : Ubuntu 20.04 ์ด์ ๋๋ Debian 11 ์ด์
-
ํ๋์จ์ด:
- GPU: NVIDIA RTX 30xx ์ด์ (์ต์ 8GB VRAM)
- CPU: ์ต์ 8์ฝ์ด
- RAM: ์ต์ 32GB (64GB ์ด์ ๊ถ์ฅ)
- ์ ์ฅ์: ์ต์ 100GB ์ฌ์ ๊ณต๊ฐ
์์คํ ํ์ธ
# GPU ํ์ธ
nvidia-smi
# RAM ํ์ธ
free -h
# CPU ํ์ธ
lscpu
2. ํ๋ ์์ํฌ ๋น๊ต
| ํ๋ ์์ํฌ | ์ฅ์ | ๋จ์ | ์ถ์ฒ ์ฌ์ฉ ์ฌ๋ก |
|---|---|---|---|
| llama.cpp | ๋น ๋ฅธ ์ค์น, ์ต์ ํ๋ C++ ๊ตฌํ, ์ต์ ์์กด์ฑ | API ์๋ฒ ๋ฏธํฌํจ | ๋จ์ผ ๋ชจ๋ธ ์คํ |
| Ollama | ์ฌ์ด ์ค์น, ๊ฐ๋จํ API, ์ด๋ฏธ์ง ๊ธฐ๋ฐ ๋ฐฐํฌ | ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋์ | ๊ฐ๋ฐ/ํ ์คํธ ํ๊ฒฝ |
| vLLM | ์ต๊ณ ์ ์ฑ๋ฅ, ๋๊ท๋ชจ ํ ํฌ๋์ด์ฆ ์ฒ๋ฆฌ | ๋ณต์กํ ์ค์น ๊ณผ์ | ํ๋ก๋์ ํ๊ฒฝ |
| LocalAI | ๋ค์ํ API ํธํ์ฑ, ํด๋ผ์ฐ๋ ์ฐ๊ณ | ๊ธฐ์ ์ง์ ์ ํ | API ๊ธฐ๋ฐ ์ดํ๋ฆฌ์ผ์ด์ |
3. ์ถ์ฒ ์ค์ - llama.cpp ์ค์น
llama.cpp๋ ๊ฐ์ฅ ์ ์ ํ ์ ํ์
๋๋ค. ๊ฐ๋จํ๊ณ ๋น ๋ฅด๋ฉฐ ์ต์ ํ๋ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
# ์ค์น ์ ์ค๋น
sudo apt update
sudo apt install build-essential git -y
# llama.cpp ๋ค์ด๋ก๋ ๋ฐ ์ปดํ์ผ
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
# ์ปดํ์ผ
make clean
make
# ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น (ํ์์)
pip install torch numpy
# ๋ชจ๋ธ ๋ค์ด๋ก๋ (์์: LLaMA-2 7B)
mkdir -p models
wget https://huggingface.co/llamav2-7b/resolve/main/llama-2-7b.gguf -O models/llama-2-7b.gguf
4. ๋ชจ๋ธ ์ ํ ๊ฐ์ด๋
| ์ฌ์ฉ ์ฌ๋ก | ์ถ์ฒ ๋ชจ๋ธ | ์ค๋ช |
|---|---|---|
| ์ผ๋ฐ ํ ์คํธ ์์ฑ | LLaMA-2 7B (Q5_K_M) | ๊ท ํ ์กํ ์ฑ๋ฅ๊ณผ ์ ํ๋ |
| ๋น ๋ฅธ ์ถ๋ก | Mistral 7B (Q4_K_M) | ๋น ๋ฅธ ์ถ๋ก ์๋ |
| ๊ณ ์ ๋ฐ๋ | Phi-3 3.8B (Q4_K_M) | ์ ๋ฐํ ๋ต๋ณ |
| ์ฝ๋ ์์ฑ | CodeLLaMA 7B (Q4_K_M) | ํ๋ก๊ทธ๋๋ฐ ๊ด๋ จ ์์ |
5. ์์ํ ์ ํ ์ค๋ช
# ์์ํ ์ ํ๋ณ ์ค๋ช
# Q4_K_M: ์ต์ ํ๋ 4๋นํธ ์์ํ, ๋์ ์ฑ๋ฅ/์ ํ๋ ๋น์จ
# Q5_K_M: 5๋นํธ ์์ํ, ์ ํ๋ ํฅ์
# Q6_K: 6๋นํธ, ์ต๊ณ ์ ํ๋
# Q8_0: 8๋นํธ, ์ต๋ ์ ํ๋
์ค์ ๋ชจ๋ธ ๋ณํ ์์
# Q5_K_M ์์ํ
./convert-hf-to-gguf.py models/llama-2-7b/ --outtype q5_k_m --outfile models/llama-2-7b-q5k.gguf
# Q4_K_M ์์ํ
./convert-hf-to-gguf.py models/llama-2-7b/ --outtype q4_k_m --outfile models/llama-2-7b-q4k.gguf
6. API ์ค์ ๋ฐ ๋๊ตฌ ํตํฉ
# llama.cpp API ์๋ฒ ์์
./server -m models/llama-2-7b-q5k.gguf -c 2048 --host 0.0.0.0 --port 8080
# API ํ
์คํธ
curl http://localhost:8080/completion \
-H "Content-Type: application/json" \
-d '{
"prompt": "Hello, how are you?",
"n_predict": 128,
"temperature": 0.7
}'
์ธ๋ถ ๋๊ตฌ ํตํฉ ์์ (Python)
import requests
def llama_completion(prompt, max_tokens=128, temperature=0.7):
response = requests.post(
"http://localhost:8080/completion",
json={
"prompt": prompt,
"n_predict": max_tokens,
"temperature": temperature
}
)
return response.json()['content']
# ์ฌ์ฉ ์์
result = llama_completion("Python์์ JSON ํ์ฑ ๋ฐฉ๋ฒ์?")
print(result)
7. Systemd ์๋น์ค ์ค์
24์๊ฐ ์คํ์ ์ํด systemd ์๋น์ค๋ฅผ ์ค์ ํฉ๋๋ค.
# ์๋น์ค ํ์ผ ์์ฑ
sudo nano /etc/systemd/system/llama.service
# ์๋น์ค ๋ด์ฉ
[Unit]
Description=Local LLM Server
After=network.target
[Service]
Type=simple
User=your_user
WorkingDirectory=/home/your_user/llama.cpp
ExecStart=/home/your_user/llama.cpp/server -m /home/your_user/llama.cpp/models/llama-2-7b-q5k.gguf -c 2048 --host 0.0.0.0 --port 8080
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
# ์๋น์ค ํ์ฑํ
sudo systemctl daemon-reload
sudo systemctl enable llama.service
sudo systemctl start llama.service
8. ๋ชจ๋ํฐ๋ง ๋ฐ ์ฑ๋ฅ ์ต์ ํ
์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ์คํฌ๋ฆฝํธ
# ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ์คํฌ๋ฆฝํธ (monitor.sh)
#!/bin/bash
while true; do
echo "=== Memory Usage ==="
free -h
echo "=== GPU Usage ==="
nvidia-smi
echo "=== CPU Load ==="
top -bn1 | grep "Cpu(s)"
sleep 30
done
์ต์ ํ ์ต์
# ๋น ๋ฅธ ์ถ๋ก (์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ)
./server -m models/llama-2-7b-q5k.gguf -c 512 -n 128
# ์ต๋ ์ฑ๋ฅ (๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ)
./server -m models/llama-2-7b-q5k.gguf -c 2048 -n 2048 --threads 8
# GPU ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
./server -m models/llama-2-7b-q5k.gguf --gpu-layers 30 -c 1024
9. ์ค์ ์ฑ๋ฅ ๋ฒค์น๋งํฌ
์ถ๋ก ์ฑ๋ฅ ํ ์คํธ
# ์ฑ๋ฅ ํ
์คํธ
./server -m models/llama-2-7b-q5k.gguf -c 2048 --port 8081
# ๋น ๋ฅธ ํ
์คํธ
ab -n 10 -c 5 http://localhost:8081/completion
# ์ค์ ์์ฒญ ํ
์คํธ
curl -X POST http://localhost:8080/completion \
-H "Content-Type: application/json" \
-d '{"prompt": "The capital of France is", "n_predict": 10}' \
-w "%{time_total}s\n"
์ถ๋ก ์๊ฐ ๊ธฐ๋ก (์์)
LLaMA-2 7B (Q5_K_M):
- ๋ฌธ๋งฅ ๊ธธ์ด 512: 0.8์ด
- ๋ฌธ๋งฅ ๊ธธ์ด 1024: 1.2์ด
- ๋ฌธ๋งฅ ๊ธธ์ด 2048: 2.1์ด
Mistral 7B (Q4_K_M):
- ๋ฌธ๋งฅ ๊ธธ์ด 512: 0.5์ด
- ๋ฌธ๋งฅ ๊ธธ์ด 1024: 0.9์ด
- ๋ฌธ๋งฅ ๊ธธ์ด 2048: 1.6์ด
10. ์ค์ ์ฌ์ฉ ์ฌ๋ก
๐ฅ Get the full guide on Gumroad: https://gumroad.com/l/auto ($7)













