Self-Hosted GPT, Ollama + Open WebUI

최근 회사에서 ChatGPT 사용이 급증하면서, 보안 사고와 비용 증가에 대한 우려가 커졌습니다. 이에 대한 해결책을 고민하던 중, 자체 GPT 시스템 구축이 좋은 대안이 될 수 있겠다는 생각이 들었습니다. ChatGPT와 유사하면서도 우리 회사에 맞게 확장 가능한 솔루션을 찾아 나섰고, 그 과정에서 Ollama와 Open WebUI의 조합을 발견했습니다. Meta에서 제공하는 Ollama의 강력한 언어 모델과 Open WebUI의 사용자 친화적 인터페이스가 눈에 띄었죠. Docker를 이용해 쉽게 구축할 수 있다는 점도 매력적이어서, 이를 기반으로 자체 GPT 시스템을 구축해보기로 결심했습니다.

자 오늘은 자체 호스팅 GPT 서비스 구축해보는 것에 대해 이야기 해보도록 하겠습니다.

Ollama와 Open WebUI 소개

  • Ollama: Meta에서 제공하는 오픈소스 LLM(Large Language Model) 솔루션
  • Open WebUI: Ollama를 위한 사용자 친화적 웹 인터페이스
  • Docker 기반으로 쉽게 구축 가능한 장점

 

설치 준비

시스템 요구사항

  • CPU: 최소 4코어 (8코어 이상 권장)
  • RAM: 최소 16GB (32GB 이상 권장)
  • GPU: NVIDIA GPU, 최소 8GB VRAM (16GB 이상 권장) 
  • 스토리지: 최소 100GB SSD (모델 크기에 따라 더 필요할 수 있음)
  • 집에서 구동시킬경우 전기세와 넓고 탄탄한 등짝

 

설치 환경

  • OS: Ubuntu 22.04 LTS
  • Docker 및 Docker Compose 최신 버전

 

참고사이트

 

⏱️ Quick Start | Open WebUI

- Admin Creation: The first account created on Open WebUI gains Administrator privileges, controlling user management and system settings.

docs.openwebui.com

 

GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...)

User-friendly AI Interface (Supports Ollama, OpenAI API, ...) - open-webui/open-webui

github.com

 

Docker-compose 파일 작성

services:
  ollama:
    volumes:
      - ollama:/root/.ollama
    container_name: ollama
    pull_policy: always
    tty: true
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia 
              count: all  # 사용할 GPU 수
              capabilities: [gpu] 
    restart: unless-stopped
    image: ollama/ollama:latest

  open-webui:
    image: ghcr.io/open-webui/open-webui:cuda  #NVIDA GPU
    container_name: open-webui
    volumes:
      - open-webui:/app/backend/data
    depends_on:
      - ollama
    ports:
      - 3000:8080
    environment:
      - 'OLLAMA_BASE_URL=http://ollama:11434'
      - 'WEBUI_SECRET_KEY='
    extra_hosts:
      - host.docker.internal:host-gateway
    restart: unless-stopped

volumes:
  ollama: {}
  open-webui: {}

※ AMD GPU 참고 : https://burakberk.dev/deploying-ollama-open-webui-self-hosted

 

설치 과정

  1. Ubuntu 22.04 LTS 설치
  2. Docker 및 Docker Compose 설치
  3. sudo apt update sudo apt install docker.io docker-compose
  4. Docker Compose 파일 구성
    • docker-compose.yml 파일 작성 (Ollama 및 Open WebUI 서비스 정의)
  5. 서비스 실행
  6. docker-compose up -d
  7. 서비스 접속 - http://localhost:3000
  8. 서비스 관리자 계정 생성
  9. 모델 다운로드 
    • # https://ollama.com/library에서 조회해서 다운받고자 하는 모델로 다운로드
      docker exec -it ollama ollama pull llama2
  10. 관리자패널 > 설정 > 모델 : 상태 확인

모델을 다운받기 전
모델을 다운받고난 후

 

성능 최적화

  • 정확도 향상: 웹 검색 활성화

  • 반응속도 개선: GPU 자동 절전 해제 
  • service: ollama: ... environment: - OLLAMA_KEEP_ALIVE=24h #깨어있는 시간을 설정

보안 설정

  • Open WebUI에서 사용자 등록 허용
  • 기본 유저 상태 : pending - 수락된 사용자만 가입 허용

사내 도메인 접속 설정(옵션)

  • 사내용 도메인 (ex. gpt.makeit.app )을 설정하여 A레코드를 설정하기 위함.
  • Synology NAS 에서 DNS Server 세팅 후 자체 도메인 세팅 > IP 설정
  • 접속 PC에서 DNS 주소를 Synology NAS IP로 설정 필요.
  • 또는 PC의 호스트파일에 Open WebUI가 세팅된 서버의 IP를 지정하는 방법으로도 가능함.

 

서비스 확인

 

이상 오늘의 포스팅을 마치겠습니다.