에이전트와 개발

llama.cpp 서버, 메모리 한도 넘으면 모델 자동 언로드하는 옵션 추가

llama.cpp 서버에 모델이 메모리 한도를 넘으면 안 쓰는 모델을 내리는 --models-memory-max 옵션이 b11930에 들어갔다. 같은 날 b11929와 b11932 빌드도 나왔다.

루카스 ·

llama.cpp 프로젝트가 서버에 --models-memory-max 옵션을 넣은 b11930 빌드를 공개했다. 서버가 불러오려는 모델의 크기까지 더해 메모리 사용량을 추정하고, 한도를 넘으면 모델을 동적으로 내리는(언로드) 기능이다. 변경 항목은 PR #21231이다.

추정 방식은 모델을 실제로 올리지 않고 필요한 메모리만 계산하는 no_alloc을 쓴다. 전체 크기 제한 대신 메모리 여유분(margin) 기준을 쓰며, 이 기준은 장치마다 따로 적용된다. 모델별 메모리 추정은 하위 프로세스에서 하도록 옮겼고, 메모리 여유분 설정은 자식 프로세스에 넘기지 않고 떼어낸다. 서버에는 메모리 디버그 로그도 추가됐다.

같은 변경 안에 두 가지 오류 수정이 들어 있다. 측정용 자식 프로세스는 no_alloc으로 돌기 때문에 보고하는 여유 메모리에 자기 추정치가 들어 있지 않은데, 여기서 자기 몫을 한 번 더 빼는 바람에 다른 프로세스가 보유한 메모리가 계산에서 지워졌다. --fit on에서는 그 값이 0까지 내려갔고, 다음 모델을 올릴 때 여유분을 넘길 수 있었다. 이제는 인스턴스 보고에서만 자기 몫을 뺀다.

대기열에 들어간 모델 로드는 점유 전에 --models-max만 확인했다. 그래서 메모리 여유분 때문에 사용 중인 모델 뒤에 막히면 load()가 예외를 던지고 대기 쪽이 쉬지 않고 재시도를 반복했다. 이제는 한도를 넘었는데 내릴 수 있는 유휴 모델이 없으면 점유를 거절하고, 대기 쪽은 모델 하나가 유휴 상태가 될 때까지 조건 변수에서 잠든다. 이 변경에는 Xuan Son Nguyen과 Pascal이 공동 작성자로 올라 있다.1

b11930 앞뒤로 두 빌드가 나왔다. b11929는 --model 또는 -hf 지정을 필수로 하는 변경(#31242)으로, 작업 기록에 Codex의 도움을 받았다고 적혀 있다. b11932는 mtmd-cli에서 배치 포인터의 범위를 줄이고 CLI 회귀 테스트를 제거했다(#31155, #31165). 세 빌드는 macOS, Linux, Android, Windows용 바이너리에 더해 iOS XCFramework와 UI 번들도 제공하며, CUDA 12와 13, Vulkan, ROCm 10.0, OpenVINO, SYCL, Snapdragon(GPU와 NPU 포함) 빌드가 들어 있다. macOS KleidiAI 빌드와 openEuler 빌드는 세 빌드 모두 비활성(DISABLED)으로 표시돼 있다.1,2,3

댓글

기사에 대한 의견이나 틀린 내용 제보를 남겨 주세요.

댓글을 불러오고 있습니다.