CLI 및 서버를 활용한 llama.cpp 빠른 시작
OpenCode 설치, 설정 및 사용 방법
로컬 추론을 위해 llama.cpp 로 계속 돌아오게 됩니다. 이 도구는 Ollama 와 다른 도구들이 추상화하는 제어를 제공하며, 실제로 작동합니다. llama-cli 를 통해 GGUF 모델을 대화식으로 쉽게 실행하거나, llama-server 를 통해 OpenAI 호환 HTTP API 를 노출할 수 있습니다.
로컬, 자체 호스팅, 클라우드 접근 방식 중 어떤 것을 선택할지 아직 결정 중이시라면, 다음 가이드에서 시작해 보세요. LLM 호스팅 2026: 로컬, 자체 호스팅 및 클라우드 인프라 비교.
2026 년 llama.cpp 를 선택하는 이유
llama.cpp 는 다음과 같은 편향을 가진 경량 추론 엔진입니다:
- CPU 와 여러 GPU 백엔드 간 이식성,
- 단일 기기에서 예측 가능한 지연 시간,
- 랩톱부터 온프레미스 노드까지의 배포 유연성.
프라이버시 및 오프라인 운영이 필요할 때, 런타임 플래그에 대해 결정론적 제어가 필요할 때, 또는 전체적인 Python 기반 스택을 실행하지 않고 더 큰 시스템에 추론을 임베드하고 싶을 때 빛을 발합니다.
나중에 더 높은 처리량 서버 런타임을 선택하더라도 llama.cpp 를 이해하는 것이 도움이 됩니다. 예를 들어, GPU 에서 최대 서빙 처리량을 목표로 한다면 vLLM 과 비교해 볼 수도 있습니다:
vLLM 빠른 시작: 고성능 LLM 서빙
그리고 도구 선택을 벤치마킹할 수 있습니다:
Ollama vs vLLM vs LM Studio: 2026 년 로컬 LLM 실행의 최선의 방법?.

Windows, macOS, Linux 에서 llama.cpp 설치
편의성, 이식성, 최대 성능 중 무엇을 원하느냐에 따라 세 가지 실용적인 설치 경로가 있습니다.
패키지 매니저를 통한 설치
이것이 가장 빠른 “실행” 옵션입니다.
# macOS 또는 Linux
brew install llama.cpp
# Windows
winget install llama.cpp
# macOS (MacPorts)
sudo port install llama.cpp
# macOS 또는 Linux (Nix)
nix profile install nixpkgs#llama-cpp
팁: 설치 후 도구가 존재하는지 확인하세요:
llama-cli --version
llama-server --version
사전 빌드된 바이너리를 통한 설치
컴파일러 없이 깨끗한 설치가 필요하면 llama.cpp GitHub 릴리스에서 게시된 공식 사전 빌드된 바이너리를 사용하세요. 이는 일반적으로 여러 OS 타겟과 여러 백엔드(CPU 전용 및 GPU 지원 변형) 를 포함합니다.
일반적인 워크플로우:
# 1) OS 와 백엔드에 맞는 아카이브 다운로드
# 2) 추출
# 3) 추출된 폴더에서 실행
./llama-cli --help
./llama-server --help
정확한 하드웨어를 위한 소스 빌드
CPU/GPU 백엔드에서 최적의 성능을 끌어내려면 CMake 를 사용하여 소스에서 빌드하세요.
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
# CPU 빌드
cmake -B build
cmake --build build --config Release
빌드 후 바이너리는 일반적으로 다음 위치에서 찾을 수 있습니다:
ls -la ./build/bin/
한 명령어로 GPU 빌드
하드웨어와 일치하는 백엔드를 활성화하세요 (CUDA 와 Vulkan 예시):
# NVIDIA CUDA
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release
# Vulkan
cmake -B build -DGGML_VULKAN=ON
cmake --build build --config Release
Ubuntu 24.04 + NVIDIA GPU: 전체 빌드 walkthrough
NVIDIA GPU 가 장착된 Ubuntu 24.04 에서 빌드하려면 CUDA 툴킷과 OpenSSL 이 필요합니다. 다음은 테스트된 순서입니다:
1. CUDA 툴킷 13.1 설치
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin
sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/13.1.1/local_installers/cuda-repo-ubuntu2404-13-1-local_13.1.1-590.48.01-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2404-13-1-local_13.1.1-590.48.01-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2404-13-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-13-1
2. CUDA 환경 추가 (~/.bashrc 에 추가):
# cuda toolkit
export PATH=/usr/local/cuda-13.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-13.1/lib64:$LD_LIBRARY_PATH
그런 다음 source ~/.bashrc 를 실행하거나 새 터미널을 엽니다.
3. OpenSSL 개발 헤더 설치 (깨끗한 빌드를 위해 필요):
sudo apt update
sudo apt install libssl-dev
4. llama.cpp 빌드 (llama.cpp 클론이 있는 디렉토리에서 CUDA 활성화):
cmake llama.cpp -B llama.cpp/build -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-cli llama-mtmd-cli llama-server llama-gguf-split llama-embedding
cp llama.cpp/build/bin/llama-* llama.cpp
이로써 llama.cpp 디렉토리에 llama-cli, llama-mtmd-cli, llama-server, llama-embedding, llama-gguf-split 이 생성됩니다.
여러 백엔드를 컴파일하여 런타임에 장치를 선택할 수도 있습니다. 이는 동일한 빌드를 이종 머신에 배포할 때 유용합니다.
GGUF 모델 및 양자화 선택
추론을 실행하려면 GGUF 모델 파일 (*.gguf) 이 필요합니다. GGUF 는 llama.cpp 와 같은 엔진에 필요한 모델 가중치와 표준화된 메타데이터를 번들하는 단일 파일 형식입니다.
모델을 얻는 두 가지 방법
옵션 A: 로컬 GGUF 파일 사용
GGUF 파일을 ./models/ 에 다운로드하거나 복사하세요:
mkdir -p models
# GGUF 를 models/my-model.gguf 에 배치
그런 다음 경로로 실행하세요:
llama-cli -m models/my-model.gguf -p "Hello! Explain what llama.cpp is." -n 128
옵션 B: llama.cpp 를 통해 Hugging Face 에서 다운로드
최신 llama.cpp 빌드는 Hugging Face 에서 다운로드하여 파일을 로컬 캐시에 유지할 수 있습니다. 이는 빠른 실험을 위한 가장 쉬운 워크플로우입니다.
# HF 에서 모델 다운로드 및 프롬프트 실행
llama-cli \
--hf-repo ggml-org/tiny-llamas \
--hf-file stories15M-q4_0.gguf \
-p "Once upon a time," \
-n 200
저장소 선택기에서 양자화를 지정하고 도구가 일치하는 파일을 선택하도록 할 수도 있습니다:
llama-cli \
--hf-repo unsloth/phi-4-GGUF:q4_k_m \
-p "Summarize the concept of quantization in one paragraph." \
-n 160
나중에 완전히 오프라인 워크플로우가 필요하면 --offline 플래그를 사용하여 캐시 사용을 강제하고 네트워크 접근을 방지할 수 있습니다.
로컬 추론을 위한 양자화 선택
양자화는 “로컬 추론을 위해 어떤 GGUF 양자화를 선택해야 하는가"라는 질문의 실용적인 답입니다. 이는 품질, 모델 크기, 속도를 직접적으로 트레이드오프하기 때문입니다.
실용적인 시작점:
- CPU 우선 기기에서는 Q4 또는 Q5 변형부터 시작하세요,
- RAM 또는 VRAM 여유가 있으면 더 높은 정밀도 (또는 덜 공격적인 양자화) 로 이동하세요,
- 모델이 작업에 대해 “아주 바보같이” 느껴질 때, 해결책은 종종 더 나은 모델이나 덜 공격적인 양자화이며, 샘플링 트윅만은 아닙니다.
또한 컨텍스트 윈도우 크기가 중요함을 기억하세요: 더 큰 컨텍스트 크기는 GGUF 파일 자체가 맞더라도 메모리 사용량 (때로는 극적으로) 을 증가시킵니다.
llama-cli 빠른 시작 및 주요 매개변수
llama-cli 는 모델이 로드되고, 백엔드가 작동하며, 프롬프트가 예상대로 작동하는지 확인하는 가장 빠른 방법입니다.
최소 실행
llama-cli \
-m models/my-model.gguf \
-p "Write a short TCP vs UDP comparison." \
-n 200
대화형 채팅 실행
대화 모드는 채팅 템플릿을 위해 설계되었습니다. 일반적으로 대화형 동작을 활성화하고 모델의 템플릿에 따라 프롬프트를 포맷합니다.
llama-cli \
-m models/my-model.gguf \
--conversation \
--system-prompt "You are a concise systems engineering assistant." \
--ctx-size 4096
모델이 특정 시퀀스를 출력할 때 생성을 종료하려면 역 프롬프트 (reverse prompt) 를 사용하세요. 이는 대화형 모드에서 특히 유용합니다.
중요한 주요 llama-cli 플래그
200 개의 플래그를 외우기보다는 정확성, 지연 시간, 메모리에 지배적인 것들에 집중하세요.
모델 및 다운로드
| 목표 | 플래그 | 사용 시기 |
|---|---|---|
| 로컬 파일 로드 | -m, --model |
이미 *.gguf 가 있을 때 |
| Hugging Face 에서 다운로드 | --hf-repo, --hf-file, --hf-token |
빠른 실험, 자동화된 캐싱 |
| 오프라인 캐시 강제 | --offline |
에어갭 또는 재현 가능한 실행 |
컨텍스트 및 처리량
| 목표 | 플래그 | 실용적 참고 |
|---|---|---|
| 컨텍스트 증가 또는 감소 | -c, --ctx-size |
더 큰 컨텍스트는 더 많은 RAM 또는 VRAM 비용 |
| 프롬프트 처리 개선 | -b, --batch-size 및 -ub, --ubatch-size |
배치 크기는 속도와 메모리에 영향 |
| CPU 병렬성 튜닝 | -t, --threads 및 -tb, --threads-batch |
CPU 코어 및 메모리 대역폭에 맞춤 |
GPU 오프로드 및 하드웨어 선택
| 목표 | 플래그 | 실용적 참고 |
|---|---|---|
| 사용 가능한 장치 목록 | --list-devices |
여러 백엔드가 컴파일될 때 유용 |
| 장치 선택 | --device |
CPU 및 GPU 하이브리드 선택 활성화 |
| 레이어 오프로드 | -ngl, --n-gpu-layers |
가장 큰 속도 레버 중 하나 |
| 멀티 GPU 로직 | --split-mode, --tensor-split, --main-gpu |
멀티 GPU 호스트 또는 불균형 VRAM 에 유용 |
샘플링 및 출력 품질
| 목표 | 플래그 | 시작을 위한 좋은 기본값 |
|---|---|---|
| 창의성 | --temp |
작업에 따라 0.2~0.9 |
| Nucleus 샘플링 | --top-p |
0.9~0.98 일반적 |
| 토큰 차단 | --top-k |
40 은 고전적인 기준 |
| 반복 감소 | --repeat-penalty 및 --repeat-last-n |
작은 모델에 특히 유용 |
llama-cli 를 사용한 예시 워크로드
프롬프트뿐만 아니라 파일 요약
llama-cli \
-m models/my-model.gguf \
--system-prompt "You summarize technical documents. Output five bullets max." \
--file ./docs/incident-report.txt \
-n 300
결과의 재현성 향상
프롬프트를 디버깅할 때는 시드를 고정하고 무작위성을 줄이세요:
llama-cli \
-m models/my-model.gguf \
-p "Extract key risks from this design note." \
-n 200 \
--seed 42 \
--temp 0.2
OpenAI 호환 API 와 llama-server 빠른 시작
llama-server 는 다음을 노출할 수 있는 내장 HTTP 서버입니다:
- 채팅, 완성, 임베딩, 응답을 위한 OpenAI 호환 엔드포인트,
- 대화형 테스트를 위한 웹 UI,
- 프로덕션 가시성을 위한 선택적 모니터링 엔드포인트.
로컬 모델로 서버 시작
llama-server \
-m models/my-model.gguf \
-c 4096
기본적으로 127.0.0.1:8080 에서 수신합니다.
외부에서 바인딩하려면 (예: Docker 내부 또는 LAN), 호스트와 포트를 지정하세요:
llama-server \
-m models/my-model.gguf \
-c 4096 \
--host 0.0.0.0 \
--port 8080
선택적이지만 중요한 서버 플래그
| 목표 | 플래그 | 중요성 |
|---|---|---|
| 동시성 | --parallel |
병렬 요청을 위한 서버 슬롯 제어 |
| 부하 하에서 더 나은 처리량 | --cont-batching |
연속 배치 활성화 |
| 접근 제한 | --api-key 또는 --api-key-file |
API 요청 인증 |
| Prometheus 메트릭 활성화 | --metrics |
/metrics 노출 필요 |
| 프롬프트 재처리 위험 감소 | --cache-prompt |
지연 시간을 위한 프롬프트 캐시 동작 |
컨테이너에서 실행하는 경우, 많은 설정은 LLAMA_ARG_* 환경 변수를 통해서도 제어할 수 있습니다.
예시 API 호출
curl 을 사용한 채팅 완성
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer no-key" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{ "role": "user", "content": "Give me a quick llama.cpp checklist." }
],
"temperature": 0.7
}'
실제 배포를 위한 팁: --api-key 를 설정한 경우 x-api-key 헤더를 통해 전송할 수 있습니다 (또는 게이트웨이 설정에 따라 Authorization 헤더를 계속 사용).
llama-server 를 타겟팅한 OpenAI Python 클라이언트
OpenAI 호환 서버에서는 base_url 만 변경하여 많은 클라이언트가 작동할 수 있습니다.
import openai
client = openai.OpenAI(
base_url="http://localhost:8080/v1",
api_key="sk-no-key-required",
)
resp = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain threads vs batch size in llama.cpp."},
],
)
print(resp.choices[0].message.content)
임베딩
OpenAI 호환 임베딩은 /v1/embeddings 에서 노출되지만, 모델은 none 이 아닌 임베딩 풀링 모드를 지원해야 합니다.
curl http://localhost:8080/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer no-key" \
-d '{
"input": ["hello", "world"],
"model": "GPT-4",
"encoding_format": "float"
}'
전용 임베딩 모델을 실행하는 경우, 서버를 임베딩 전용 모드로 시작하는 것을 고려하세요:
llama-server \
-m models/Qwen3-Embedding-0.6B-Q8_0.gguf \
--embeddings \
--host 127.0.0.1 \
--pooling last \
--port 8080
또는 CPU 에서 임베딩 모델로 llama-cpp 를 실행하고 싶다면:
CUDA_VISIBLE_DEVICES="" llama-server \
-m models/Qwen3-Embedding-0.6B-Q8_0.gguf \
--embeddings \
--host 127.0.0.1 \
--pooling last \
--port 8080
이렇게 시도해 보세요:
CUDA_VISIBLE_DEVICES="" llama-embedding \
-m /path/to/Qwen3-Embedding-0.6B-Q8_0.gguf \
-p "your text here" \
--pooling last \
--verbose-prompt
하나의 프로세스에서 여러 모델 서빙
위의 예시는 llama-server 를 시작 시 단일 모델에 바인딩합니다. 프로세스를 재시작하지 않고 요청마다 모델을 전환해야 한다면, 바로 라우터 모드의 역할입니다.
llama-server 라우터 모드: 재시작 없이 동적 모델 전환.
성능, 모니터링 및 프로덕션 강화
FAQ 질문인 “속도와 메모리에 가장 중요한 llama.cpp 명령줄 옵션은 무엇인가?“는 추론을 시스템으로 취급할 때 훨씬 쉬워집니다:
- 메모리 제한은 일반적으로 첫 번째 제약 사항입니다 (CPU 의 RAM, GPU 의 VRAM).
- 컨텍스트 크기는 주요 메모리 승수입니다.
- GPU 레이어 오프로드는 종종 초당 토큰 수를 높이는 가장 빠른 경로입니다.
- 배치 크기와 스레드는 처리량을 향상시킬 수 있지만 메모리 압력을 증가시킬 수도 있습니다.
더 깊은 엔지니어링 중심의 관점을 위해 다음을 참조하세요: LLM 성능 2026: 벤치마크, 병목 현상 및 최적화.
16 GB 등급 GPU 에서 측정된 llama-cli 스타일의 결과 (초당 토큰 수, VRAM, GPU 부하) 를 얻고 싶다면, 밀집 및 MoE GGUF 를 통해 컨텍스트 (19K / 32K / 64K) 를 스윕하는 경우를 확인하세요: 16 GB VRAM LLM 벤치마크 with llama.cpp (속도 및 컨텍스트).
Prometheus 와 Grafana 를 사용한 llama-server 모니터링
--metrics 가 활성화되면 llama-server 는 /metrics 에서 Prometheus 호환 메트릭을 노출할 수 있습니다. 이는 Prometheus 스크랩 설정 및 Grafana 대시보드와 자연스럽게 짝을 이룹니다.
llama.cpp (및 vLLM, TGI) 에 대한 대시보드 및 경고: 프로덕션 LLM 추론 모니터링 (2026): vLLM, TGI, llama.cpp 를 위한 Prometheus & Grafana. 더 넓은 가이드: 가시성: 모니터링, 메트릭, Prometheus & Grafana 가이드 및 LLM 시스템의 가시성.
기본 강화 체크리스트
llama-server 가 로컬호스트를 넘어 도달할 수 있을 때:
- 요청이 인증되도록
--api-key(또는--api-key-file) 를 사용하세요, - 필요하지 않다면
0.0.0.0에 바인딩하지 마세요, - 서버의 SSL 플래그를 통한 TLS 또는リバiproxy 에서 TLS 를 종료하는 것을 고려하세요,
- 부하 하에서 지연 시간을 보호하기 위해
--parallel로 동시성을 제한하세요.
문제 해결 빠른 해결책
모델은 로드되지만 채팅 답변이 이상함
채팅 엔드포인트는 모델이 지원되는 채팅 템플트를 가질 때 가장 좋습니다. 출력이 구조화되지 않게 보인다면 다음을 시도하세요:
llama-cli --conversation및 명시적인--system-prompt사용,- 모델이 지시 또는 채팅 튜닝 변형인지 확인,
- 앱에 연결하기 전에 서버 웹 UI 를 테스트.
메모리 부족 발생
컨텍스트를 줄이거나 더 작은 양자화를 선택하세요:
--ctx-size낮추기,- VRAM 문제가 있다면
--n-gpu-layers줄이기, - 더 작은 모델 또는 더 압축된 양자화로 전환.
CPU 에서 느림
다음으로 시작하세요:
- 물리 코어 수와 동일한
--threads, - 적절한 배치 크기,
- 머신 (CPU 기능 및 백엔드) 과 일치하는 빌드를 설치했는지 확인.