TheKoguryo's 기술 블로그

 Version 2025-08-08

OpenAI gpt-oss를 GPU기반 OCI Compute VM으로 구성하기

OpenAI가 8월 5일에 오픈 웨이트 추론 모델 2가지를 출시 하였습니다. 두 모델을 아래와 같이 설명하고 있습니다.

  • gpt-oss-120b: 핵심 추론 벤치마크에서 OpenAI o4-mini와 거의 동등한 결과를 달성한 동시에 단일 80GB GPU에서 효율적으로 작동
  • gpt-oss-20b: 일반 벤치마크에서 OpenAI o3‑mini와 비슷한 결과를 제공하며, 단 16GB 메모리의 에지 디바이스에서 실행할 수 있음

VRAM 80GB, 16GB는 맥북 Apple Silicon 기준으로도 아주 고급사양에서 구동이 가능합니다. 가지고 있는 M1 Pro 16GB에 구동해 본 결과, hello에 대한 응답도 한참이 걸립니다. 사용하지 못할 수준입니다.

6GB GPU (VRAM)에 해당하는 OCI Shape을 보면, 비용을 고려하면 VM.GPU.A10.1, VM.GPU2.1, VM.GPU3.1이 해당합니다. 다만, 아래 문서에서 GPU shapes 항목을 보면, VM.GPU.A10 시리즈만, 인스턴스를 중지하면, 비용이 발생하지 않아, 테스트를 위해 VM.GPU.A10.1을 사용하려고 합니다.

환경 준비
  1. private subnet과 public subnet이 있는 VCN을 준비합니다.
  2. public subnet에 Compute VM을 생성합니다.
    • 이름: openwebui
    • OS: Oracle Linux 9
    • Shape: VM.Standard.E4.Flex, 1 OCPU, 16 GB
  3. private subnet에 Compute VM을 생성합니다.
    • 이름: gpt-oss
    • Shape: VM.GPU.A10.1
      • 최하단 Oracle and Nvidia Terms of Use 체크할 것
    • OS: Oracle Linux 9, Gen2-GPU-최신 빌드 이미지
    • Boot volume: 100GB
gpt-oss VM 구성
  1. SSH로 접속하여 nvidia-smi 를 실행하여, NVIDIA 드라이버가 설치되어 있는지 확인합니다.

  2. Ollama를 설치합니다.

    curl -fsSL https://ollama.com/install.sh | sh
    
  3. 모델을 다운받고 실행합니다.

    ollama run gpt-oss:20b
    
  4. 리모트에서 연결할 수 있도록 추가 작업을 합니다.

    1. 다음 파일을 엽니다.

      sudo vi /etc/systemd/system/ollama.service
      
    2. 다음 한 줄을 추가합니다. 이미 Environment이 있으면, 그 다음에 한 줄 더 추가합니다.

      Environment="OLLAMA_HOST=0.0.0.0"
      
    3. 재시작합니다.

      sudo systemctl daemon-reload
      sudo systemctl restart ollama
      
    4. 0.0.0.0:11434 또는 :::11434로 수신하고 있는 확인합니다.

      netstat -an | grep 11434
      
  5. OS 방화벽을 개방합니다.

    # OS 방화벽에서 Ollama용 포트, 11434 포트 개방
    sudo firewall-cmd --permanent --add-port=11434/tcp
    # 방화벽 변경정보 다시 반영
    sudo firewall-cmd --reload
    
  6. 인터넷 연결을 끊으려면, 속한 서브넷의 라우팅룰에서 NAT Gateway를 제외합니다.

  7. 속한 서브넷의 보안 규칙에서 Ingress Rule에 11434 포트를 추가합니다.

Open WebUI VM 구성

https://github.com/open-webui/open-webui?tab=readme-ov-file#how-to-install-

Python pip로 설치하는 경우

  1. Python pip로 설치하면 sqlite3 버전 문제로 다음과 같이 오류가 발생하니, 해당 방법은 사용하지 않습니다.

    • Chroma의 sqlite 3.35.0 대체 방안을 적용해도, Open WebUI도 sqlite3을 사용해 여전히 오류 발생함
    $ open-webui serve
    ...
    RuntimeError: [91mYour system has an unsupported version of sqlite3. Chroma                     requires sqlite3 >=
    3.35.0.[0m
    
    $ sudo dnf info sqlite --all | grep Version
    Version      : 3.34.1
    

Docker로 시작

  1. Docker Engine을 설치합니다.

    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    sudo dnf install -y docker-ce docker-ce-cli containerd.io
    
    sudo systemctl start docker
    
    sudo usermod -aG docker $USER
    newgrp docker
    
    docker run hello-world
    
  2. Ollama API가 호출되는 지 확인합니다. 네트워크에 문제가 없는 지 체크합니다.

    • 예, Ollama VM의 Private IP: 10.0.1.136
    [opc@openwebui ~]$ curl http://10.0.1.136:11434/api/ps
    {"models":[]}
    
  3. OLLAMA_BASE_URL에 Ollama가 위치한 VM의 Private IP로 업데이트하여, Open WebUI 컨테이너를 실행합니다.

    export HF_HUB_OFFLINE=1
    
    docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=http://10.0.1.136:11434 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
    
  4. OS 방화벽을 개방합니다.

    # OS 방화벽에서 Open WebUI용 포트, 3000 포트 개방
    sudo firewall-cmd --permanent --add-port=3000/tcp
    # 방화벽 변경정보 다시 반영
    sudo firewall-cmd --reload
    
  5. 속한 서브넷의 보안 규칙에서 Ingress Rule에 3000 포트를 추가합니다.

  6. 웹브라우저에서 서버로 접속합니다.

    http://{openwebui-VM-Public-IP}:3000
    
  7. 첫 접속시 화면을 따라 Admin 유저를 생성합니다.

  8. Ollama와 연결이 잘 되었다면, 기본 모델로 gpt-oss:20b가 선택된 상태로 보입니다.

  9. 첫 질문을 하면 아래와 같이 잘 답변합니다.

    image-20250808150347687



이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.