Ollama, RAM에 모델 동시 로드 대신 강제 언로드한다
원문 제목 — Ollama forcefully unload models instead of load concurrent models in RAM
📄 전문 번역
내가 뭔가 잘못하고 있을 가능성이 크니 여기서 무엇을 잘못했는지 한번 보자. Ollama는 리눅스 서버에서 구동 중이며 하드웨어는 12GB 카드에서 실행된다. 메인 모델은 12BQ4 모델이고 보조 모델은 7BQ4이다. 두 모델을 지원하기 위해 OLLAMA_NUM_PARALLEL=2와 OLLAMA_MAX_LOADED_MODELS=2 환경 변수를 설정했다. VRAM 12GB와 RAM 32GB를 갖추고 있으며, 첫 번째 모델이 대화형으로 실행되는 동안 두 번째 모델은 로컬 작업을 백그라운드에서 처리하는 보조 모델이므로 RAM에서 문제없이 구동될 수 있다.
실제로는 요청이 들어오면 첫 번째 모델이 로드되어 거의 모든 VRAM을 차지하고 모든 것이 정상적이다. 그러나 두 번째 모델이 호출되면 첫 번째 모델이 언로드된다. NVTOP으로 GPU 활동을 관찰하면 VRAM이 0으로 떨어진 뒤 두 번째 모델을 위해 5.5GB의 VRAM이 사용되는 것을 확인할 수 있다. 이후 두 번째 모델이 언로드되고 첫 번째 모델이 다시 로드된다.
요컨대 모델들이 끊임없이 교체되고 RAM은 전혀 사용되지 않아 시스템에 치명적인 상태가 된다. OLLAMA_MAX_LOADED_MODELS 파라미터를 2로, 병렬 파라미터를 2로 설정했으므로 VRAM이 수용할 수 있는 것보다 많은 모델이 있을 때 Ollama가 RAM을 사용하도록 메모리를 처리한다고 이해했다. 왜 작동하지 않는 것인가? 그리고 어떻게 작동하게 만들 수 있는가?
💬 주요 댓글 번역 (2)
🔍 루키 분석
12GB VRAM과 32GB RAM을 갖춘 리눅스 서버에서 OLLAMA_MAX_LOADED_MODELS=2와 OLLAMA_NUM_PARALLEL=2를 설정했음에도 두 번째 모델 로드 시 첫 번째 모델이 언로드되고 VRAM만 반복 사용되는 문제가 보고됐다. 사용자는 Ollama가 VRAM 부족 시 RAM으로 모델을 처리할 것으로 기대했으나 실제로는 모델이 계속 교체되며 RAM이 활용되지 않는다. 댓글에서는 로드 순서와 자동 언로드 동작이 원인일 수 있다고 지적하며 세밀한 제어를 위해 llama.cpp와 llama swap 조합이 필요하다고 언급했다. 또한 병렬 설정 시 컨텍스트가 절반으로 나뉜다는 점도 함께 지적됐다.
— 루키 · glm-5.3-flash:cloud
친구라면 친구가 Ollama를 쓰게 내버두지 않는다
아마 로드 순서 때문에 문제가 생겼을 것이다. 모델은 잠시 후 자동으로 언로드되며 GPU에 먼저 로드된다. 이 때문에 작은 모델이 VRAM에 남고 큰 모델은 절반씩 나눠 탑재되는 결과가 생길 수 있다. Ollama로는 그 정도 세밀한 제어가 불가능하다고 본다. 그러려면 llama.cpp와 llama swap이 필요하다. 또한 병렬(parallel)은 설정한 컨텍스트의 절반만 사용한다는 뜻이며 각 병렬 인스턴스가 절반을 가져간다. 이를 단독으로 사용하는 것은 좋지 않은 선택이다.