llama.cpp 모델 관리 및 라우터 모드

llama-server는 이제 라우터 모드를 포함하여 서버를 다시 시작하지 않고 여러 모델을 동적으로 로드, 언로드, 전환할 수 있게 합니다. 이 업데이트는 Ollama 스타일의 모델 관리를 llama.cpp에 가져오며, 각 모델이 자체 프로세스에서 실행되는 멀티프로세스 아키텍처를 활용하여 한 모델의 충돌이 다른 모델에 영향을 주지 않도록 보장합니다.

동적 모델 로드 및 라우팅

llama-server는 이제 API 요청의 model 필드를 기반으로 적절한 모델에 요청을 라우팅하여 온디맨드로 여러 모델을 관리할 수 있습니다.

주요 관리 기능

  • 자동 발견: 서버는 llama.cpp 캐시(LLAMA_CACHE 또는 ~/.cache/llama.cpp로 정의됨) 또는 --models-dir를 통해 지정된 사용자 정의 디렉터리에서 GGUF 파일을 자동으로 검색합니다.
  • 온디맨드 로드: 모델은 첫 번째 요청 시 자동으로 메모리에 로드됩니다. 동일한 모델에 대한 후속 요청은 즉시 처리됩니다.
  • LRU 제거: 메모리를 관리하기 위해 서버는 최근 적게 사용된(LRU) 제거 정책을 사용합니다. 로드된 모델의 최대 수(--models-max로 정의되며 기본값은 4)에 도달하면 가장 최근에 사용되지 않은 모델이 언로드되어 리소스를 확보합니다.
  • 수동 제어: 사용자는 HTTP POST 요청을 통해 /models/load/models/unload 엔드포인트를 사용하여 모델을 명시적으로 관리할 수 있습니다.

구성 및 기술 옵션

라우터 모드의 모델은 컨텍스트 크기(-c) 및 GPU 오프로딩(-ngl)과 같은 라우터의 전역 설정을 상속받습니다. 그러나 프리셋을 통해 세부적인 제어가 가능합니다.

주요 명령줄 플래그

Flag Description
--models-dir PATH GGUF 파일이 포함된 디렉터리를 지정합니다.
--models-max N 동시에 로드할 모델의 최대 수를 설정합니다(기본값: 4).
--no-models-autoload 자동 로드를 비활성화하며, 명시적인 /models/load 호출이 필요합니다.

모델별 프리셋

사용자는 --models-preset를 통해 전달된 config.ini 파일을 사용하여 개별 모델에 대한 특정 구성을 정의할 수 있습니다. 이를 통해 모델별로 사용자 정의 컨텍스트 크기와 온도 설정이 가능합니다. 커뮤니티 토론에 따르면, presets.ini도 특정 모델에 대한 mmproj(멀티모달 프로젝터) 파일을 지정하는 데 사용할 수 있습니다.

API 및 인터페이스 통합

모델 관리는 zarówno API 및 사용자 인터페이스에 통합됩니다:

  • API 목록: /models에 대한 GET 요청은 발견된 모든 모델과 현재 상태(loaded, loading, 또는 unloaded)를 반환합니다.
  • 웹 UI: 내장된 llama.cpp 웹 UI는 드롭다운 메뉴를 통한 모델 전환을 지원하며, 자동 로드를 트리거합니다.
  • OpenAI 호환성: 서버는 가벼운 OpenAI 호환 HTTP 서버로 유지되어 기존 워크플로에 쉽게 통합할 수 있습니다.

커뮤니티 통찰

사용자는 이 기능을 A/B 테스트 모델 버전 및 다중 테넌트 배포에 유용하다고 강조했습니다. 기술적 세부 사항에 대해, 커뮤니티 구성원들은 다음과 같이 언급했습니다:

"llama-server는 대부분의 구현에서 기본적으로 응답 속성의 reasoning_content 변수에 reasoning content를 유지합니다. 거기서 가져올 수 있습니다. 그렇지 않으면 reasoning-format 플래그를 사용하고 DeepSeek 값을 전달하여 순수 토큰을 얻을 수 있습니다. 이는 라우터가 모델을 관리하는 동안, 기본 서버가 특정 모델 아키텍처에 대한 reasoning 토큰과 같은 고급 출력 형식을 계속 지원함을 시사합니다.

Sources