네, 사용할 수 있습니다.
llama-server가 라우터 모드(Router Mode, --models-dir 등을 사용하는 모드)로 동작할 때, 클라이언트가 복잡한 .gguf 전체 파일명 대신 깔끔한 단어(Alias)로 모델을 지정하게 만드는 방법은 크게 두 가지가 있습니다.
현재 llama-server가 업데이트되면서 가장 권장되는 정석적인 방법은 INI 설정 파일을 사용하는 것입니다.
1. 정석: --models-preset (INI 설정 파일) 사용하기
가장 깔끔하고 확실한 방법입니다. 라우터 모드를 켤 때 --models-dir 대신 --models-preset 플래그를 사용하여 각 GGUF 파일에 원하는 ID(Alias)를 매핑하는 models.ini 파일을 지정하는 방식입니다.
① models.ini 파일 작성
원하는 경로에 설정 파일을 만들고, 대괄호 [...] 안에 클라이언트에서 사용할 Alias(ID)를 적어준 뒤 내부에서 실제 model 경로를 지정합니다.
1 | [gemma-4] |
② llama-server 실행
1 | ./llama-server --models-preset ./models.ini --port 8080 |
③ 클라이언트 호출
이제 OpenAI 호환 API나 클라이언트(파이썬, curl, Open WebUI 등)에서 모델 이름으로 복잡한 파일명 대신 지정한 Alias를 바로 넘겨주면 됩니다.
1 | curl http://localhost:8080/v1/chat/completions \ |
2. 편법: 심볼릭 링크(Symbolic Link) 활용하기
만약 별도의 INI 설정 파일을 관리하기 귀찮고, --models-dir을 통해 특정 디렉토리 안의 GGUF 파일들을 자동으로 탐색(Auto-discovery)하는 방식을 고수하고 싶다면 리눅스 심볼릭 링크를 사용하는 것이 가장 원시적이면서도 효과적입니다.
llama-server는 --models-dir 내부에 있는 파일명을 그대로 model ID로 인식하므로, 파일명을 alias 구조로 링크해 두면 됩니다.
① 심볼릭 링크 생성
1 | # 실제 복잡한 파일이 있는 곳: /path/to/models/ |
② llama-server 실행
1 | ./llama-server --models-dir /path/to/router_dir/ --port 8080 |
③ 클라이언트 호출
이 경우 확장자를 포함한 gemma-4.gguf 또는 gemma-4 형식으로 호출이 가능해집니다.
요약 및 추천
- 추천:
--models-preset(INI 방식)을 사용하는 것이 좋습니다. 모델별로 상이한 컨텍스트 크기(--ctx), VRAM 할당량(--n-gpu_layers) 같은 하드웨어 가속 옵션을 개별적으로 튜닝해서 지정할 수 있기 때문입니다. - 단일 모델 전용으로 띄울 때 쓰던 개별 플래그인
--alias는--models-dir기반의 멀티 모델 라우터 모드에서는 전역 적용이 모호해지므로, 여러 모델을 스왑할 때는 위의 INI 형식을 쓰는 것이 현재llama.cpp생태계의 표준입니다.
llama-server에서 여러 모델을 동적으로 스위칭하며 서비스할 수 있는 라우터 모드(Router Mode) 기능인 --models-preset 설정 파일(일반적으로 .ini 또는 .toml 형식으로 파싱 가능)에 사용할 수 있는 주요 파라미터 구성입니다.
각 섹션 이름([model_id])은 클라이언트가 API 요청 시 model 필드에 지정할 고유 ID가 됩니다.
1. 모델 구성 및 메모리 맵핑 (Model & Memory)
| 파라미터명 | 설명 |
|---|---|
model (또는 m) |
로컬 시스템에 저장된 GGUF 모델 파일의 절대 경로를 지정합니다. |
hf |
Hugging Face 저장소에서 모델을 직접 지정할 때 사용합니다. (예: ggml-org/Qwen2.5-7B-Instruct-GGUF) |
mmap |
Memory-map 사용 여부 (1 또는 0). 활성화 시 모델 로드가 빨라지지만 OS 페이지 아웃이 발생할 수 있습니다. |
mlock |
모델을 RAM에 강제로 잠금 처리하여 스왑(Swap) 영역으로 빠지는 것을 방지합니다. (1 or 0) |
2. 하드웨어 가속 및 연산 제어 (Hardware Allocation)
| 파라미터명 | 설명 |
|---|---|
n-gpu-layers (또는 ngl) |
GPU로 오프로드할 레이어 수입니다. VRAM 용량에 맞춰 조절하며, 전체 레이어를 올리려면 대개 99 같은 큰 값을 지정합니다. |
main-gpu (또는 mg) |
멀티 GPU 환경에서 기본 가속 및 중간 연산 결과(KV)를 처리할 메인 GPU 인덱스(0, 1 등)를 지정합니다. |
split-mode (또는 sm) |
멀티 GPU 분할 방식을 정의합니다. (none, layer, row, tensor) |
threads (또는 t) |
GPU에 올라가지 않고 CPU 영역에 남은 레이어를 연산할 때 사용할 쓰레드 수입니다. |
threads-batch (또는 tb) |
프롬프트 배치 가공 시 사용할 CPU 쓰레드 수입니다. (일반적으로 threads와 동일하게 지정) |
3. 컨텍스트 및 배치 관리 (Context & Batching)
| 파라미터명 | 설명 |
|---|---|
ctx-size (또는 c) |
프롬프트 및 컨텍스트 윈도우 크기를 토큰 단위로 지정합니다. (기본값 0 시 모델 메타데이터값 추종) |
batch-size (또는 b) |
텍스트 처리를 위한 논리적 최대 배치 크기입니다. (기본값 2048) |
ubatch-size (또는 ub) |
물리적 최대 배치 크기로, 청크 단위 연산 크기를 제어합니다. (기본값 512) |
flash-attn (또는 fa) |
Flash Attention 활성화 여부입니다. 지원하는 아키텍처에서 연산 속도와 VRAM 절약에 유용합니다. |
4. 추론 및 샘플링 파라미터 (Sampling Parameters)
⚠️ 주의:
llama.cpp버전 및 클라이언트 프레임워크 연동에 따라 일부 샘플링 파라미터는 프리셋 파일에 직접 선언하기보다 클라이언트 요청(API Payload) 단에서 동적으로 전달하는 것이 구동 안정성에 더 유리할 수 있습니다.
| 파라미터명 | 설명 |
|---|---|
temp |
생성 텍스트의 다양성(확률 분포 평탄화)을 조절하는 온도 값입니다. |
top-p |
누적 확률 분포 상위 P 범위 내의 토큰들만 후보군으로 압축합니다. |
top-k |
확률이 가장 높은 상위 K개의 토큰으로 후보군을 제한합니다. |
min-p |
가장 유력한 토큰 확률 대비 최소 임계치 비율 이하인 토큰을 배제합니다. |
predict (또는 n) |
한 번의 요청으로 모델이 생성할 최대 토큰 수를 지정합니다. (-1 지정 시 무한대 생성) |
💡 구성 예시 (Configuration Example)
동일한 장비(VRAM) 안에서 가볍게 서빙할 작은 모델과 대형 모델의 리소스를 차등 분배하여 작성한 프리셋 예시입니다.
1 | # 전역 설정 필드 (필요시 최상단 배치) |
서버 시작
1 | llama-server --models-preset llamaserver_preset.toml --port 8001 --host 0.0.0.0 |
확인
서버에 접속해
1 | 3.19.587.902 I srv ensure_model: waiting until model name=gemma4-26b is fully loaded... |
모델 정보
curl http://localhost:8080/v1/models
1 | {"data":[{"id":"g4coder","aliases":[],"tags":[],"object":"model","owned_by":"llamacpp","created":1780772059,"status":{"value":"unloaded","args":["/home/qkboo/.local/bin/llama-server","--host","127.0.0.1","--port","0","--repeat-penalty","1.1","--temperature","0.1","--top-k","64","--top-p","0.1","--alias","g4coder","--ctx-size","65536","--model","/home/qkboo/Models/unsloth/gemma-4-26B-A4B-it-UD-Q5_K_S.gguf","--n-gpu-layers","-1"],"preset":"[g4coder]\nrepeat-penalty = 1.1\ntemperature = 0.1\ntop-k = 64\ntop-p = 0.1\nctx-size = 65536\nmodel = /home/qkboo/Models/unsloth/gemma-4-26B-A4B-it-UD-Q5_K_S.gguf\nn-gpu-layers = -1\n\n"},"architecture":{"input_modalities":["text"],"output_modalities":["text"]}},{"id":"gemma4-26b","aliases":[],"tags":[],"object":"model","owned_by":"llamacpp","created":1780772059,"status":{"value":"unloaded","args":["/home/qkboo/.local/bin/llama-server","--host","127.0.0.1","--port","0","--repeat-penalty","1.1","--temperature","1.0","--top-k","64","--top-p","0.95","--alias","gemma4-26b","--ctx-size","12288","--model","/home/quboo/Models/unsloth/gemma-4-26B-A4B-it-UD-Q5_K_S.gguf","--n-gpu-layers","-1"],"preset":"[gemma4-26b]\nrepeat-penalty = 1.1\ntemperature = 1.0\ntop-k = 64\ntop-p = 0.95\nctx-size = 12288\nmodel = /home/quboo/Models/unsloth/gemma-4-26B-A4B-it-UD-Q5_K_S.gguf\nn-gpu-layers = -1\n\n"},"architecture":{"input_modalities":["text"],"output_modalities":["text"]}}],"object":"list"} |