๋น ๋ฅธ ์ค์ (3๊ฐ์ง ๋ช ๋ น์ด)
- 1Ollama ์ค์น
Why it matters: `brew install ollama` โ ์ํด๋ฆญ ์ค์น. - 2๋ชจ๋ธ ๋ค์ด๋ก๋
Why it matters: `ollama pull llama2` โ Llama 3.3 7B๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. - 3์ฑํ ์์
Why it matters: `ollama run llama2` โ ๋ํํ ์ฑํ ์ธํฐํ์ด์ค๋ฅผ ์์ํฉ๋๋ค.
Metal GPU ํ์ธ
macOS์์ Ollama์ Metal GPU ๊ฐ์์ ์๋์ผ๋ก ์ค์ ๋ฉ๋๋ค. ๋ณ๋ ๊ตฌ์ฑ์ด ํ์ํ์ง ์์ต๋๋ค. Metal ์๋ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- 1์์ธ ์ถ๋ ฅ์ผ๋ก ์คํ
Why it matters: `ollama run llama3.1:8b --verbose`๋ฅผ ์คํํ๊ณ ์ฝ์ ์ถ๋ ฅ์์ `ggml_metal_init: found device: Apple M[X]`๋ฅผ ํ์ธํ์ญ์์ค. - 2์ถ๋ก ์ค ์๋ ํ์ธ
Why it matters: ํ ํฐ ์์ฑ ์๋๋ฅผ ํ์ธํ์ญ์์ค. Mac์ ๋ฐ๋ผ ์ด๋น 20โ60ํ ํฐ์ด์ด์ผ ํฉ๋๋ค (M5 Pro: Llama 3.3 8B์์ ์ฝ 50 tok/s). CPU ์ ์ฉ ํด๋ฐฑ ์: ์ฝ 1โ5 tok/s. - 3GPU ์ฌ์ฉ๋ฅ ๋ชจ๋ํฐ๋ง
Why it matters: ํ์ฑ ์ํ ๋ณด๊ธฐ(์์ฉ ํ๋ก๊ทธ๋จ โ ์ ํธ๋ฆฌํฐ)๋ฅผ ์ด๊ณ GPU ์น์ ์ ํ์ธํ์ญ์์ค. Metal์ด ์๋ ์ค์ด๋ผ๋ฉด ์ถ๋ก ์ค GPU ์ฌ์ฉ๋ฅ ์ด 80-100%๋ก ํ์๋์ด์ผ ํฉ๋๋ค.
๋ชจ๋ธ ๊ด๋ฆฌ
- 1`ollama pull <model>`
Why it matters: ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํฉ๋๋ค. ์: `ollama pull mistral`. - 2`ollama list`
Why it matters: ๋ค์ด๋ก๋๋ ๋ชจ๋ ๋ชจ๋ธ์ ๋์ดํฉ๋๋ค. - 3`ollama run <model>`
Why it matters: ๋ชจ๋ธ๊ณผ ๋ํํ ์ฑํ ์ ์์ํฉ๋๋ค. - 4`ollama rm <model>`
Why it matters: ๊ณต๊ฐ ํ๋ณด๋ฅผ ์ํด ๋ชจ๋ธ์ ์ญ์ ํฉ๋๋ค.
Apple Silicon ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
- OLLAMA_MAX_LOADED_MODELS: ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํ ๋ชจ๋ธ ์. ๊ธฐ๋ณธ๊ฐ: 1. ๋ฉํฐ ๋ชจ๋ธ ์ค์ ์ ๊ฒฝ์ฐ 2โ3์ผ๋ก ์ค์ ํ์ญ์์ค.
- GPU ๋ ์ด์ด: ๊ธฐ๋ณธ์ ์ผ๋ก Ollama๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ํตํฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ Modelfile์์ `num_gpu_layers`๋ฅผ ์ค์ ํ์ญ์์ค.
- Whisper: ์๋ฒ ๋ฉ ๋ชจ๋ธ ๋ฐ LLM๊ณผ ๊ฒฐํฉํ๋ฉด Ollama์ ํจ๊ป 64GB M5 Pro์์ ์คํ๋ฉ๋๋ค.
์ฌ๋ฌ ๋ชจ๋ธ ๋์ ์คํ
Whisper STT + Llama 3.3 8B + LLaVA Vision์ ๋์์ ์คํํด์ผ ํฉ๋๊น? Ollama๊ฐ ๋ชจ๋ ๋ชจ๋ธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํ๋๋ก ๊ตฌ์ฑํ์ญ์์ค.
export OLLAMA_MAX_LOADED_MODELS=3
export OLLAMA_KEEP_ALIVE=1h
brew services restart ollama
# Now pull all models you need
ollama pull llama3.1:8b
ollama pull llava:7b
# Send requests to each โ they stay loaded
curl http://localhost:11434/api/chat -d '{"model": "llama3.1:8b", "messages": [{"role": "user", "content": "Hello"}]}'
curl http://localhost:11434/api/chat -d '{"model": "llava:7b", "messages": [{"role": "user", "content": "Describe this image"}]}'๋ก๊ทธ์ธ ์ ์๋ ์์
brew services๋ฅผ ํตํด Mac์ ๋ก๊ทธ์ธํ ๋ Ollama๊ฐ ์๋์ผ๋ก ์์๋๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
# Enable auto-start
brew services start ollama
# Check status
brew services list | grep ollama
# Disable auto-start (optional)
brew services stop ollama๊ฐ๋ฐ์๋ฅผ ์ํ API ์ค์
Ollama๋ `localhost:11434`์์ OpenAI ํธํ REST API๋ฅผ ์ ๊ณตํฉ๋๋ค. `ollama serve`๋ก ์๋ฒ๋ฅผ ์์ํ๊ฑฐ๋ brew services๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์ดํ ์ด๋ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ์์ฒญ์ ์ ์กํ ์ ์์ต๋๋ค.
# Chat endpoint (streaming)
curl http://localhost:11434/api/chat -d '{
"model": "llama3.1:8b",
"messages": [{"role": "user", "content": "Write a Python function"}],
"stream": false
}'
# Python example
import requests
response = requests.post(
"http://localhost:11434/api/chat",
json={
"model": "llama3.1:8b",
"messages": [{"role": "user", "content": "Hello"}],
"stream": False
}
)
print(response.json()["message"]["content"])Modelfile ์ปค์คํฐ๋ง์ด์ง
์์คํ ํ๋กฌํํธ ๋ฐ ํ๋ผ๋ฏธํฐ๋ก ์ปค์คํ ๋ชจ๋ธ์ ์์ฑํ์ญ์์ค.
- `ollama create llm-expert -f Modelfile` โ ์ปค์คํ ๋ชจ๋ธ ๋น๋
- `ollama run llm-expert` โ ์ปค์คํ ๋ชจ๋ธ๋ก ๋ํํ ์ฑํ ์์
- `ollama run llm-expert "Code review this function"` โ ํ๋กฌํํธ ์ง์ ์ ์ก
FROM llama2
SYSTEM "You are an expert software engineer reviewing code for security and performance issues. Provide actionable feedback."
PARAMETER temperature 0.7
PARAMETER top_p 0.9์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ
- Metal์ด ๊ฐ์ง๋์ง ์์: `ollama run llama3.1:8b --verbose`๋ก ํ์ธํ๊ณ `ggml_metal_init: found device: Apple M[X]`๋ฅผ ์ฐพ์ผ์ญ์์ค. ์์ผ๋ฉด ์ฌ์์ํ์ญ์์ค: `brew services restart ollama` ๋๋ `pkill ollama && ollama serve &`.
- ๋๋ฆฐ ์ถ๋ก (CPU ํด๋ฐฑ): ์์ธ: Metal ์ด๊ธฐํ ์คํจ, ๋ชจ๋ธ์ด CPU์์ ์คํ ์ค. ํ์ฑ ์ํ ๋ณด๊ธฐ์์ GPU ์ฌ์ฉ๋ฅ ์ด ์ถ๋ก ์ค 80-100%์ฌ์ผ ํฉ๋๋ค. GPU๊ฐ 0%์ด๋ฉด: Ollama๋ฅผ ์ฌ์์ํ๊ณ ์์ Metal ๋ฏธ๊ฐ์ง ํญ๋ชฉ์ ํ์ธํ์ญ์์ค.
- ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ (OOM): ๋ชจ๋ธ ์ถฉ๋ ๋๋ ์๋ต ์๋ฆผ. ์์ธ: ๋ชจ๋ธ + ์ปจํ ์คํธ + macOS ์ค๋ฒํค๋๊ฐ RAM์ ์ด๊ณผํจ. ํด๊ฒฐ์ฑ : (1) ๋ ์์ ์์ํ ์ฌ์ฉ (`ollama pull llama3.1:8b-q4_K_M`), (2) ์ปจํ ์คํธ ์ถ์ (`OLLAMA_NUM_CTX=2048 ollama run llama3.1:8b`), (3) ๋ ์์ ๋ชจ๋ธ ์ฌ์ฉ (`ollama pull phi4` โ 2.5GB).
- ๋ชจ๋ธ ๋ค์ด๋ก๋ ์ค๋จ: ์์ธ: ๋คํธ์ํฌ ์ ํ ๋๋ HuggingFace ์๋ ์ ํ. ํด๊ฒฐ์ฑ : `pkill ollama && ollama pull llama3.1:8b` (์ด์ ์งํ ์ํ์์ ์ฌ๊ฐ).
- ํฌํธ 11434 ์ด๋ฏธ ์ฌ์ฉ ์ค: ๋ค๋ฅธ Ollama ์ธ์คํด์ค๊ฐ ์คํ ์ค์ด๊ฑฐ๋ ๋ค๋ฅธ ์๋น์ค๊ฐ ํด๋น ํฌํธ๋ฅผ ์ฌ์ฉ ์ค์ ๋๋ค. ํ์ธ: `lsof -i :11434`. ํด๊ฒฐ์ฑ : `pkill ollama` ํ ์ฌ์์.
- ๋ชจ๋ธ์ด ์๋ฏธ ์๋ ๋ฌธ์ ์ถ๋ ฅ: ์์ธ: Modelfile ํ๋ผ๋ฏธํฐ ๋ฒ์ ์ด๊ณผ ๋๋ ์๋ชป๋ ํ ํ๋ฆฟ. ํด๊ฒฐ์ฑ : ๊ณต์ ๋ชจ๋ธ ๋ค์ด๋ก๋ `ollama pull llama3.1:8b` (์ปค์คํ ๋ฎ์ด์ฐ๊ธฐ) ํ ํ ์คํธ: `ollama run llama3.1:8b "Hello, how are you?"`.
- ์ ์ฅ ๊ณต๊ฐ ๋ถ์กฑ: ๋ชจ๋ธ์ `~/.ollama/models/`์ ์ ์ฅ๋ฉ๋๋ค. ํฌ๊ธฐ ํ์ธ: `du -sh ~/.ollama/`. ๋ฏธ์ฌ์ฉ ๋ชจ๋ธ ์ ๊ฑฐ: `ollama rm <model-name>`.
Ollama๋ ๋ฌด๋ฃ์ ๋๊น?
๋ค. Ollama๋ ์คํ์์ค์ ๋๋ค. ๋ชจ๋ธ(Llama, Mistral)์ ๋ฌด๋ฃ ๋ผ์ด์ ์ค์ ๋๋ค. ๋ณ๋ ๋น์ฉ์ด ์์ต๋๋ค.
GPU ์์ด Ollama๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
๋ค, ๋ค๋ง ์๋๊ฐ ๋๋ฆฝ๋๋ค. CPU ์ ์ฉ: 7B ๋ชจ๋ธ์์ ์ฝ 1โ5 tok/s. GPU (Mac์ Metal): Mac์ ๋ฐ๋ผ 20โ60 tok/s.
์ฒ์ ์ฌ์ฉํ ๋ชจ๋ธ๋ก ๋ฌด์์ ์ถ์ฒํฉ๋๊น?
Mistral Small ๋๋ Llama 3.3 7B๋ฅผ ๊ถ์ฅํฉ๋๋ค. ๋ ๋ชจ๋ธ ๋ชจ๋ M1+ Mac์์ ์คํ๋๋ฉฐ ์ฐ์ํ ์ถ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ฐ๊ฐ ์ฝ 4GB์ ๋๋ค.
์ฌ๋ฌ ์ฌ๋์ด Ollama API๋ฅผ ๋์์ ์ฌ์ฉํ ์ ์์ต๋๊น?
๋ค. ํ ๋์ ๊ธฐ๊ธฐ์์ `ollama serve`๋ฅผ ์คํํ๋ฉด LAN์ ๋ชจ๋ ์ฌ๋์ด ํด๋น ๊ธฐ๊ธฐ์ IP:11434๋ก REST API์ ์ ๊ทผํ ์ ์์ต๋๋ค.
Mac์์ Ollama ๋ค์ด๋ก๋ ๋ชจ๋ธ์ ์ด๋์ ์ ์ฅ๋ฉ๋๊น?
๊ธฐ๋ณธ ์์น: `~/.ollama/models/`. ๊ฐ ๋ชจ๋ธ์ ์ GB์ ๋๋ค. ์ ์ฒด ๋์คํฌ ์ฌ์ฉ๋ ํ์ธ: `du -sh ~/.ollama/`. ์์น๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด Ollama ์์ ์ ์ `OLLAMA_MODELS=/path/to/models` ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ์ญ์์ค.
Intel Mac์์ Ollama๋ฅผ ์คํํ ์ ์์ต๋๊น?
๋ค, ๋ค๋ง Metal GPU ๊ฐ์ ์์ด ์คํ๋ฉ๋๋ค. CPU ์ ์ฉ ์ฑ๋ฅ: 7B ๋ชจ๋ธ์์ 1-5 tok/s (Apple Silicon์ 20-60 tok/s ๋๋น). ํ ์คํธ ๋ชฉ์ ์ผ๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ ์ด์ ํ๊ฒฝ์๋ ์ ํฉํ์ง ์์ต๋๋ค.
์ค์น ํ Ollama๋ฅผ ์คํ๋ผ์ธ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๊น?
๋ค. ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ ํ Ollama๋ ์์ ํ ์คํ๋ผ์ธ์ผ๋ก ์คํ๋ฉ๋๋ค. ์ถ๋ก ์ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ํ์ํ์ง ์์ต๋๋ค. ๋ชจ๋ธ ๋ค์ด๋ก๋(`ollama pull`)๋ง ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ํ์ํฉ๋๋ค.