From 3660556a724aca4713583161e6db2d06fe37ee59 Mon Sep 17 00:00:00 2001 From: MyeonghoeLee Date: Fri, 3 Apr 2026 16:29:32 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B8=B0=EC=A1=B4=20Qwen=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20qwen/=20=EB=94=94=EB=A0=89=ED=84=B0=EB=A6=AC=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99,=20Gemma=204=20(31B-IT)=20Ollama=20=EC=85=8B?= =?UTF-8?q?=EC=97=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- README.md | 101 ++--------- gemma4/Modelfile | 7 + gemma4/README.md | 70 ++++++++ gemma4/docker-compose.yml | 16 ++ gemma4/setup-ollama.sh | 167 ++++++++++++++++++ gemma4/stop-ollama.sh | 33 ++++ qwen/README.md | 97 ++++++++++ SETUP_MLX.md => qwen/SETUP_MLX.md | 0 SETUP_OLLAMA.md => qwen/SETUP_OLLAMA.md | 0 SETUP_VLLM.md => qwen/SETUP_VLLM.md | 0 .../docker-compose.mlx.yml | 0 docker-compose.yml => qwen/docker-compose.yml | 0 setup-mlx.sh => qwen/setup-mlx.sh | 0 setup-ollama.sh => qwen/setup-ollama.sh | 0 setup-vllm.sh => qwen/setup-vllm.sh | 0 setup.sh => qwen/setup.sh | 0 stop-mlx.sh => qwen/stop-mlx.sh | 0 stop-ollama.sh => qwen/stop-ollama.sh | 0 stop-vllm.sh => qwen/stop-vllm.sh | 0 stop.sh => qwen/stop.sh | 0 20 files changed, 405 insertions(+), 86 deletions(-) create mode 100644 gemma4/Modelfile create mode 100644 gemma4/README.md create mode 100644 gemma4/docker-compose.yml create mode 100755 gemma4/setup-ollama.sh create mode 100755 gemma4/stop-ollama.sh create mode 100644 qwen/README.md rename SETUP_MLX.md => qwen/SETUP_MLX.md (100%) rename SETUP_OLLAMA.md => qwen/SETUP_OLLAMA.md (100%) rename SETUP_VLLM.md => qwen/SETUP_VLLM.md (100%) rename docker-compose.mlx.yml => qwen/docker-compose.mlx.yml (100%) rename docker-compose.yml => qwen/docker-compose.yml (100%) rename setup-mlx.sh => qwen/setup-mlx.sh (100%) rename setup-ollama.sh => qwen/setup-ollama.sh (100%) rename setup-vllm.sh => qwen/setup-vllm.sh (100%) rename setup.sh => qwen/setup.sh (100%) rename stop-mlx.sh => qwen/stop-mlx.sh (100%) rename stop-ollama.sh => qwen/stop-ollama.sh (100%) rename stop-vllm.sh => qwen/stop-vllm.sh (100%) rename stop.sh => qwen/stop.sh (100%) diff --git a/README.md b/README.md index 8cebd89..5bd1c17 100644 --- a/README.md +++ b/README.md @@ -1,97 +1,26 @@ -# Qwen3.5 로컬 서빙 + Open WebUI +# LLM 로컬 서빙 + Open WebUI -Qwen3.5-35B 모델을 로컬에서 서빙하고, Open WebUI로 채팅할 수 있는 환경을 원클릭으로 구축합니다. +다양한 LLM을 로컬에서 서빙하고 Open WebUI로 테스트하는 환경 모음입니다. -텍스트 대화 + 이미지 입력 모두 지원합니다. +--- + +## 모델별 디렉터리 + +| 디렉터리 | 모델 | 방식 | +|-----------|------|------| +| [qwen/](qwen/) | Qwen3.5-35B | Ollama / MLX / vLLM | +| [gemma4/](gemma4/) | Gemma 4 31B-IT | Ollama | --- ## 빠른 시작 ```bash -# 시스템 환경을 자동 감지하여 최적의 방식을 선택합니다 -./setup.sh +# Gemma 4 (Ollama) +cd gemma4 && ./setup-ollama.sh -# 종료 (실행 중인 서비스를 자동 감지하여 종료) -./stop.sh +# Qwen3.5 (자동 감지) +cd qwen && ./setup.sh ``` -셋업 완료 후 **http://localhost:3000** 접속 - -첫 접속 시 회원가입 → 첫 번째 계정이 관리자(admin)입니다. - ---- - -## 자동 감지 기준 - -| 조건 | 선택 | 이유 | -|------|------|------| -| NVIDIA GPU 있음 | **vLLM** | CUDA 가속, 가장 빠름 | -| Apple Silicon + RAM 32GB↑ | **MLX** | Mac GPU 최적화 | -| Apple Silicon + RAM 부족 | **Ollama** | 메모리 관리 우수 | -| 그 외 | **Ollama** | 범용, CPU에서도 동작 | - ---- - -## 방식별 비교 - -| | Ollama | MLX (vllm-mlx) | vLLM | -|---|---|---|---| -| 환경 | Mac / Linux | Apple Silicon Mac | NVIDIA GPU (Linux) | -| 장점 | 간편, 설정 적음 | Mac GPU 최적화 | CUDA 가속, 고성능 | -| 이미지 입력 | O | O | O | -| 개별 셋업 | `./setup-ollama.sh` | `./setup-mlx.sh` | `./setup-vllm.sh` | -| 개별 종료 | `./stop-ollama.sh` | `./stop-mlx.sh` | `./stop-vllm.sh` | - ---- - -## 사전 요구사항 - -**공통:** -- Docker Desktop (또는 Docker Engine) 설치 및 실행 - -**Ollama:** -- Homebrew - -**MLX:** -- Apple Silicon Mac (M1/M2/M3/M4) -- Python 3.10+ -- RAM 32GB 이상 권장 - -**vLLM:** -- NVIDIA GPU (VRAM 20GB 이상 권장) -- nvidia-container-toolkit - ---- - -## 파일 구조 - -``` -├── setup.sh # 통합 셋업 (자동 감지) -├── stop.sh # 통합 종료 (자동 감지) -│ -├── setup-ollama.sh # Ollama 셋업 -├── setup-mlx.sh # MLX 셋업 -├── setup-vllm.sh # vLLM 셋업 -│ -├── stop-ollama.sh # Ollama 종료 -├── stop-mlx.sh # MLX 종료 -├── stop-vllm.sh # vLLM 종료 -│ -├── docker-compose.yml # Ollama용 -├── docker-compose.mlx.yml # MLX용 -├── docker-compose.vllm.yml # vLLM용 (자동 생성) -│ -├── SETUP_OLLAMA.md # Ollama 상세 가이드 -└── SETUP_MLX.md # MLX 상세 가이드 -``` - ---- - -## 상세 가이드 - -수동 설치, 파라미터 조정, 트러블슈팅 등은 아래 문서를 참고하세요. - -- [SETUP_OLLAMA.md](SETUP_OLLAMA.md) — Ollama 방식 상세 -- [SETUP_MLX.md](SETUP_MLX.md) — MLX 방식 상세 (파라미터 레퍼런스, 이미지 프로세서 패치 설명 포함) -- [SETUP_VLLM.md](SETUP_VLLM.md) — vLLM 방식 상세 (NVIDIA GPU, VRAM별 권장 설정) +각 디렉터리의 README를 참고하세요. diff --git a/gemma4/Modelfile b/gemma4/Modelfile new file mode 100644 index 0000000..4671e44 --- /dev/null +++ b/gemma4/Modelfile @@ -0,0 +1,7 @@ +FROM gemma4:31b + +PARAMETER num_ctx 8192 +PARAMETER num_predict 8192 +PARAMETER temperature 1.0 +PARAMETER top_p 0.95 +PARAMETER top_k 64 diff --git a/gemma4/README.md b/gemma4/README.md new file mode 100644 index 0000000..0251f08 --- /dev/null +++ b/gemma4/README.md @@ -0,0 +1,70 @@ +# Gemma 4 (31B-IT) 로컬 서빙 + Open WebUI + +Google Gemma 4 31B-IT 모델을 Ollama로 로컬 서빙하고, Open WebUI로 채팅하는 환경을 원클릭으로 구축합니다. + +- HuggingFace: `google/gemma-4-31B-it` +- Ollama: `gemma4:31b` (Q4_K_M, ~20GB) +- 컨텍스트 윈도우: 256K 토큰 +- 멀티모달: 이미지/비디오 입력 지원 (140+ 언어) +- 라이선스: Apache 2.0 + +--- + +## 빠른 시작 + +```bash +./setup-ollama.sh # 설치 + 모델 다운로드 + Open WebUI 실행 +./stop-ollama.sh # 종료 +``` + +셋업 완료 후 **http://localhost:3000** 접속 + +첫 접속 시 회원가입 → 첫 번째 계정이 관리자(admin)입니다. + +--- + +## 모델 스펙 + +| 항목 | 값 | +|------|-----| +| 파라미터 | 30.7B | +| 컨텍스트 윈도우 | 256K 토큰 | +| 양자화 (Ollama) | Q4_K_M (~20GB) | +| 멀티모달 | 이미지, 비디오 (최대 60초) | +| 지원 언어 | 140+ | + +--- + +## 기본 파라미터 + +| 파라미터 | 값 | 설명 | +|----------|-----|------| +| temperature | 1.0 | Google 권장값 | +| top_p | 0.95 | Google 권장값 | +| top_k | 64 | Google 권장값 | +| num_ctx | 8192 | 입력 컨텍스트 길이 | +| num_predict | 8192 | 최대 출력 토큰 | + +파라미터를 변경하려면 `setup-ollama.sh` 상단의 변수를 수정하세요. + +--- + +## 사전 요구사항 + +- Homebrew +- Docker Desktop 실행 중 +- 충분한 디스크 공간 (~20GB) +- RAM 32GB 이상 권장 + +--- + +## 파일 구조 + +``` +gemma4/ +├── setup-ollama.sh # 원클릭 셋업 +├── stop-ollama.sh # 종료 +├── docker-compose.yml # (자동 생성) +├── Modelfile # (자동 생성) +└── README.md # 이 문서 +``` diff --git a/gemma4/docker-compose.yml b/gemma4/docker-compose.yml new file mode 100644 index 0000000..dee2c81 --- /dev/null +++ b/gemma4/docker-compose.yml @@ -0,0 +1,16 @@ +services: + open-webui: + image: ghcr.io/open-webui/open-webui:main + container_name: open-webui-gemma4 + ports: + - "3000:8080" + environment: + - OLLAMA_BASE_URL=http://host.docker.internal:11434 + volumes: + - open-webui-gemma4-data:/app/backend/data + extra_hosts: + - "host.docker.internal:host-gateway" + restart: unless-stopped + +volumes: + open-webui-gemma4-data: diff --git a/gemma4/setup-ollama.sh b/gemma4/setup-ollama.sh new file mode 100755 index 0000000..4062934 --- /dev/null +++ b/gemma4/setup-ollama.sh @@ -0,0 +1,167 @@ +#!/bin/bash +set -e + +#==================================================================== +# Gemma 4 (31B-IT) + Open WebUI (Ollama) 원클릭 셋업 +# 모델: google/gemma-4-31B-it (Ollama: gemma4:31b) +# 환경: Mac / Docker Desktop / Homebrew +#==================================================================== + +PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)" +BASE_MODEL="gemma4:31b" +CUSTOM_MODEL="gemma4-custom" +WEBUI_PORT=3000 +MAX_TOKENS=8192 +CONTEXT_LENGTH=8192 +TEMPERATURE=1.0 +TOP_P=0.95 +TOP_K=64 + +echo "============================================" +echo " Gemma 4 (31B-IT) + Open WebUI (Ollama) 셋업" +echo "============================================" +echo "" + +#-------------------------------------------------------------------- +# 1. 사전 요구사항 확인 +#-------------------------------------------------------------------- +echo "[1/6] 사전 요구사항 확인..." + +if ! command -v brew &>/dev/null; then + echo "❌ Homebrew가 설치되어 있지 않습니다." + echo " /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"" + exit 1 +fi +echo " ✓ Homebrew" + +if ! command -v docker &>/dev/null; then + echo "❌ Docker가 설치되어 있지 않습니다." + exit 1 +fi +if ! docker info &>/dev/null; then + echo "❌ Docker Desktop이 실행 중이 아닙니다." + exit 1 +fi +echo " ✓ Docker" + +echo "" + +#-------------------------------------------------------------------- +# 2. Ollama 설치 및 시작 +#-------------------------------------------------------------------- +echo "[2/6] Ollama 설치..." + +if ! command -v ollama &>/dev/null; then + brew install ollama + echo " ✓ Ollama 설치 완료" +else + echo " ✓ Ollama 이미 설치됨" +fi + +if ! brew services list | grep ollama | grep -q started; then + brew services start ollama + echo " Ollama 시작 대기 중..." + for i in $(seq 1 15); do + if curl -s http://localhost:11434/ > /dev/null 2>&1; then + break + fi + sleep 1 + done + echo " ✓ Ollama 서비스 시작" +else + echo " ✓ Ollama 서비스 실행 중" +fi + +echo "" + +#-------------------------------------------------------------------- +# 3. 모델 다운로드 +#-------------------------------------------------------------------- +echo "[3/6] 모델 다운로드 ($BASE_MODEL)..." +echo " (약 20GB — 네트워크 속도에 따라 시간이 걸릴 수 있습니다)" + +ollama pull "$BASE_MODEL" +echo " ✓ 모델 다운로드 완료" + +echo "" + +#-------------------------------------------------------------------- +# 4. 커스텀 모델 생성 (파라미터 설정) +#-------------------------------------------------------------------- +echo "[4/6] 파라미터 설정..." + +MODELFILE="$PROJECT_DIR/Modelfile" +cat > "$MODELFILE" << EOF +FROM $BASE_MODEL + +PARAMETER num_ctx $CONTEXT_LENGTH +PARAMETER num_predict $MAX_TOKENS +PARAMETER temperature $TEMPERATURE +PARAMETER top_p $TOP_P +PARAMETER top_k $TOP_K +EOF + +ollama create "$CUSTOM_MODEL" -f "$MODELFILE" 2>&1 | grep -v "^$" + +echo " ✓ 커스텀 모델 생성: $CUSTOM_MODEL" +echo " 입력 컨텍스트: $CONTEXT_LENGTH 토큰" +echo " 출력 토큰: $MAX_TOKENS" +echo " temperature: $TEMPERATURE" +echo " top_p: $TOP_P" +echo " top_k: $TOP_K" + +echo "" + +#-------------------------------------------------------------------- +# 5. Docker Compose 설정 및 실행 +#-------------------------------------------------------------------- +echo "[5/6] Open WebUI 실행..." + +if [ ! -f "$PROJECT_DIR/docker-compose.yml" ]; then + cat > "$PROJECT_DIR/docker-compose.yml" << EOF +services: + open-webui: + image: ghcr.io/open-webui/open-webui:main + container_name: open-webui-gemma4 + ports: + - "${WEBUI_PORT}:8080" + environment: + - OLLAMA_BASE_URL=http://host.docker.internal:11434 + volumes: + - open-webui-gemma4-data:/app/backend/data + extra_hosts: + - "host.docker.internal:host-gateway" + restart: unless-stopped + +volumes: + open-webui-gemma4-data: +EOF + echo " ✓ docker-compose.yml 생성" +fi + +cd "$PROJECT_DIR" +docker compose up -d 2>&1 | grep -v "^$" +echo " ✓ Open WebUI 실행 중" + +echo "" + +#-------------------------------------------------------------------- +# 6. 완료 +#-------------------------------------------------------------------- +echo "[6/6] 셋업 완료!" +echo "" +echo "============================================" +echo " 브라우저에서 http://localhost:${WEBUI_PORT} 접속" +echo " (첫 접속 시 회원가입 → 첫 계정이 admin)" +echo "" +echo " 모델 선택: $CUSTOM_MODEL" +echo " (파라미터가 적용된 커스텀 모델)" +echo " 또는: $BASE_MODEL" +echo " (기본 설정 모델)" +echo "" +echo " HuggingFace: google/gemma-4-31B-it" +echo " 컨텍스트 윈도우: 256K 토큰" +echo " 멀티모달: 이미지/비디오 입력 지원" +echo "" +echo " 종료: ./stop-ollama.sh" +echo "============================================" diff --git a/gemma4/stop-ollama.sh b/gemma4/stop-ollama.sh new file mode 100755 index 0000000..a29cfc0 --- /dev/null +++ b/gemma4/stop-ollama.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +#==================================================================== +# Gemma 4 + Open WebUI (Ollama) 종료 +#==================================================================== + +PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)" + +echo "============================================" +echo " Gemma 4 + Open WebUI (Ollama) 종료" +echo "============================================" +echo "" + +# Open WebUI 컨테이너 종료 +if docker ps -q --filter name=open-webui-gemma4 2>/dev/null | grep -q .; then + cd "$PROJECT_DIR" + docker compose down 2>&1 | grep -v "^$" + echo " ✓ Open WebUI 종료" +else + echo " - Open WebUI 컨테이너 없음 (이미 종료됨)" +fi + +# Ollama 서비스 종료 +if command -v brew &>/dev/null && brew services list 2>/dev/null | grep ollama | grep -q started; then + brew services stop ollama + echo " ✓ Ollama 서비스 종료" +else + echo " - Ollama 이미 종료됨" +fi + +echo "" +echo " 완료. 재시작하려면: ./setup-ollama.sh" +echo "" diff --git a/qwen/README.md b/qwen/README.md new file mode 100644 index 0000000..8cebd89 --- /dev/null +++ b/qwen/README.md @@ -0,0 +1,97 @@ +# Qwen3.5 로컬 서빙 + Open WebUI + +Qwen3.5-35B 모델을 로컬에서 서빙하고, Open WebUI로 채팅할 수 있는 환경을 원클릭으로 구축합니다. + +텍스트 대화 + 이미지 입력 모두 지원합니다. + +--- + +## 빠른 시작 + +```bash +# 시스템 환경을 자동 감지하여 최적의 방식을 선택합니다 +./setup.sh + +# 종료 (실행 중인 서비스를 자동 감지하여 종료) +./stop.sh +``` + +셋업 완료 후 **http://localhost:3000** 접속 + +첫 접속 시 회원가입 → 첫 번째 계정이 관리자(admin)입니다. + +--- + +## 자동 감지 기준 + +| 조건 | 선택 | 이유 | +|------|------|------| +| NVIDIA GPU 있음 | **vLLM** | CUDA 가속, 가장 빠름 | +| Apple Silicon + RAM 32GB↑ | **MLX** | Mac GPU 최적화 | +| Apple Silicon + RAM 부족 | **Ollama** | 메모리 관리 우수 | +| 그 외 | **Ollama** | 범용, CPU에서도 동작 | + +--- + +## 방식별 비교 + +| | Ollama | MLX (vllm-mlx) | vLLM | +|---|---|---|---| +| 환경 | Mac / Linux | Apple Silicon Mac | NVIDIA GPU (Linux) | +| 장점 | 간편, 설정 적음 | Mac GPU 최적화 | CUDA 가속, 고성능 | +| 이미지 입력 | O | O | O | +| 개별 셋업 | `./setup-ollama.sh` | `./setup-mlx.sh` | `./setup-vllm.sh` | +| 개별 종료 | `./stop-ollama.sh` | `./stop-mlx.sh` | `./stop-vllm.sh` | + +--- + +## 사전 요구사항 + +**공통:** +- Docker Desktop (또는 Docker Engine) 설치 및 실행 + +**Ollama:** +- Homebrew + +**MLX:** +- Apple Silicon Mac (M1/M2/M3/M4) +- Python 3.10+ +- RAM 32GB 이상 권장 + +**vLLM:** +- NVIDIA GPU (VRAM 20GB 이상 권장) +- nvidia-container-toolkit + +--- + +## 파일 구조 + +``` +├── setup.sh # 통합 셋업 (자동 감지) +├── stop.sh # 통합 종료 (자동 감지) +│ +├── setup-ollama.sh # Ollama 셋업 +├── setup-mlx.sh # MLX 셋업 +├── setup-vllm.sh # vLLM 셋업 +│ +├── stop-ollama.sh # Ollama 종료 +├── stop-mlx.sh # MLX 종료 +├── stop-vllm.sh # vLLM 종료 +│ +├── docker-compose.yml # Ollama용 +├── docker-compose.mlx.yml # MLX용 +├── docker-compose.vllm.yml # vLLM용 (자동 생성) +│ +├── SETUP_OLLAMA.md # Ollama 상세 가이드 +└── SETUP_MLX.md # MLX 상세 가이드 +``` + +--- + +## 상세 가이드 + +수동 설치, 파라미터 조정, 트러블슈팅 등은 아래 문서를 참고하세요. + +- [SETUP_OLLAMA.md](SETUP_OLLAMA.md) — Ollama 방식 상세 +- [SETUP_MLX.md](SETUP_MLX.md) — MLX 방식 상세 (파라미터 레퍼런스, 이미지 프로세서 패치 설명 포함) +- [SETUP_VLLM.md](SETUP_VLLM.md) — vLLM 방식 상세 (NVIDIA GPU, VRAM별 권장 설정) diff --git a/SETUP_MLX.md b/qwen/SETUP_MLX.md similarity index 100% rename from SETUP_MLX.md rename to qwen/SETUP_MLX.md diff --git a/SETUP_OLLAMA.md b/qwen/SETUP_OLLAMA.md similarity index 100% rename from SETUP_OLLAMA.md rename to qwen/SETUP_OLLAMA.md diff --git a/SETUP_VLLM.md b/qwen/SETUP_VLLM.md similarity index 100% rename from SETUP_VLLM.md rename to qwen/SETUP_VLLM.md diff --git a/docker-compose.mlx.yml b/qwen/docker-compose.mlx.yml similarity index 100% rename from docker-compose.mlx.yml rename to qwen/docker-compose.mlx.yml diff --git a/docker-compose.yml b/qwen/docker-compose.yml similarity index 100% rename from docker-compose.yml rename to qwen/docker-compose.yml diff --git a/setup-mlx.sh b/qwen/setup-mlx.sh similarity index 100% rename from setup-mlx.sh rename to qwen/setup-mlx.sh diff --git a/setup-ollama.sh b/qwen/setup-ollama.sh similarity index 100% rename from setup-ollama.sh rename to qwen/setup-ollama.sh diff --git a/setup-vllm.sh b/qwen/setup-vllm.sh similarity index 100% rename from setup-vllm.sh rename to qwen/setup-vllm.sh diff --git a/setup.sh b/qwen/setup.sh similarity index 100% rename from setup.sh rename to qwen/setup.sh diff --git a/stop-mlx.sh b/qwen/stop-mlx.sh similarity index 100% rename from stop-mlx.sh rename to qwen/stop-mlx.sh diff --git a/stop-ollama.sh b/qwen/stop-ollama.sh similarity index 100% rename from stop-ollama.sh rename to qwen/stop-ollama.sh diff --git a/stop-vllm.sh b/qwen/stop-vllm.sh similarity index 100% rename from stop-vllm.sh rename to qwen/stop-vllm.sh diff --git a/stop.sh b/qwen/stop.sh similarity index 100% rename from stop.sh rename to qwen/stop.sh