본문으로 건너뛰기

Ollama & Open WebUI 최적화

등록일: 2026-05-06


본 문서는 AMD Ryzen 7 5825U CPU 및 32GB RAM 환경에서 EXAONE 3.5 2.4b 모델 등의 소형 LLM을 구동할 때, 응답 지연(Latency)을 최소화하고 시스템 자원을 효율적으로 사용하기 위한 가이드임.


1. Ollama (로컬 설치) 서비스 최적화

로컬에 설치된 Ollama 서비스의 환경 변수를 수정하여 CPU 가동 효율을 높이고 모델 상주를 강제함.

설정 방법

  1. 터미널에서 서비스 편집기 실행: sudo systemctl edit ollama.service
  2. 아래 내용을 [Service] 섹션에 추가:
    [Service]
    Environment="OLLAMA_NUM_PARALLEL=1"
    Environment="OLLAMA_MAX_LOADED_MODELS=1"
    Environment="OLLAMA_KEEP_ALIVE=24h"
  3. 서비스 적용 및 재시작: sudo systemctl daemon-reload sudo systemctl restart ollama

설정 사유

  • OLLAMA_NUM_PARALLEL=1: CPU 기반 추론 시 여러 요청을 동시 처리하면 컨텍스트 스위칭 비용으로 인해 개별 응답 속도가 급락함. 단일 요청에 자원을 집중하여 응답 속도를 극대화함.
  • OLLAMA_MAX_LOADED_MODELS=1: 여러 모델을 동시에 램에 올리지 않음으로써 단일 모델에 최대 가용 자원을 할당함.
  • OLLAMA_KEEP_ALIVE=24h: 모델을 램에 24시간 동안 상주시켜 첫 호출 시 발생하는 로딩 딜레이(약 5~10초)를 제거함. '불멸(-1)' 설정 시 발생할 수 있는 무한 루프나 좀비 프로세스 문제를 방지하면서도 실질적인 '상시 대기'를 보장하는 최적의 시간임.

2. Open WebUI (Docker) 최적화

docker-compose.yaml 수정을 통해 추론 전 불필요한 백그라운드 연산을 차단하고 보안을 강화함.

docker-compose.yaml 수정안

services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: always
ports:
- "8083:8080"
environment:
- "OLLAMA_BASE_URL=https://ollama-api.sleepzz.xyz"
- "VECTOR_DB=pgvector"
- "PGVECTOR_DB_URL=postgresql://sleepzz:******@postgres:5432/postgres"
# [최적화 항목]
- "ENABLE_RAG=False" # 문서 검색 기능 비활성화
- "ENABLE_SEARCH_ENGINE=False" # 웹 검색 연동 비활성화
- "ENABLE_IMAGE_GENERATION=False" # 이미지 생성 엔진 비활성화
# (참고) 프런트엔드 컨테이너의 OLLAMA_KEEP_ALIVE는 서버 설정에 종속되므로 불필요하여 삭제함.
networks:
- serverzz-net

설정 사유

  • PGVECTOR_DB_URL: 보안을 위해 패스워드 마스킹 및 DB 접근 경로 확인.
  • ENABLE_RAG=False: 대화 시작 시마다 모든 지식 베이스를 검색하는 오버헤드를 차단하여 음성 비서/봇 대화 시 불필요한 검색 딜레이를 방지함.
  • ENABLE_SEARCH_ENGINE/IMAGE=False: 불필요한 외부 API 체크 및 엔진 로딩 시간을 단축함.

3. 하드웨어 가속 및 스레드 최적화 (Modelfile)

모델 자체의 동작 파라미터를 수정하여 5825U의 물리 코어 성능을 극대화함.

Modelfile 생성 및 적용

  1. Modelfile 생성:
    FROM exaone3.5:2.4b
    PARAMETER num_thread 8
    PARAMETER num_ctx 4096
  2. 전용 모델 생성: ollama create exaone-fast -f Modelfile

설정 사유

  • num_thread 8: 5825U(8C/16T)의 물리 코어 수에 맞춤. 하이퍼스레딩 가상 코어까지 쓰면 오히려 CPU 캐시 간섭으로 속도가 느려질 수 있으므로 물리 코어 수인 8로 고정함.
  • num_ctx 4096: 컨텍스트 크기를 4k로 축소함. CPU 환경에서 과도한 컨텍스트(32k 등)는 연산량을 기하급수적으로 늘려 프롬프트 분석 속도를 저해하므로, 비서용 대화에는 4k가 가장 적합함.

4. 기능 복구 및 유지보수

RAG(문서 검색) 기능이 다시 필요한 경우

  • docker-compose.yaml에서 ENABLE_RAG=True로 수정 후 재배포함.
  • 특정 문서 분석 시에는 전체 RAG를 켜지 않고 채팅창에 파일을 직접 업로드하여 분석하는 방식을 권장함(CPU 부하 최소화).

램 자원 회수 및 트러블슈팅

  • 수동 회수: ollama stop <모델명>을 통해 즉시 램 점유 해제 가능.
  • 강제 진압: 무한 루프나 CPU 폭주시 sudo pkill -9 ollamadocker compose restart open-webui 콤보를 사용함.