openwebui/setup.sh
MyeonghoeLee 5f5435cec7 셸 스크립트 안정성 개선 (실행 흐름 변경 없음)
- stop.sh/stop-mlx.sh: kill -9 → SIGTERM 후 2초 대기, 미종료 시 SIGKILL fallback
- stop-mlx.sh/stop-ollama.sh: docker ps에 2>/dev/null 추가 (Docker 미실행 시 에러 억제)
- stop-ollama.sh: brew 명령어 존재 여부 체크 추가
- setup.sh: VRAM_MB 빈 값 방어 코드 추가 (set -e 크래시 방지)
- setup-ollama.sh: sleep 3 → 최대 15초 readiness 체크 루프로 교체

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 11:17:09 +09:00

111 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
set -e
#====================================================================
# Qwen3.5 + Open WebUI 통합 셋업
# 시스템 환경을 자동 감지하여 최적의 방식을 선택합니다.
#
# Apple Silicon + RAM 32GB↑ → MLX (vllm-mlx)
# Apple Silicon + RAM 부족 → Ollama
# NVIDIA GPU → vLLM (Docker)
# 그 외 → Ollama
#====================================================================
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
echo "============================================"
echo " Qwen3.5 + Open WebUI 통합 셋업"
echo " 시스템 환경을 자동 감지합니다..."
echo "============================================"
echo ""
#--------------------------------------------------------------------
# 시스템 감지
#--------------------------------------------------------------------
OS=$(uname -s)
ARCH=$(uname -m)
HAS_APPLE_SILICON=false
HAS_NVIDIA_GPU=false
RAM_GB=0
# Apple Silicon 감지
if [ "$OS" = "Darwin" ] && [ "$ARCH" = "arm64" ]; then
if sysctl -n machdep.cpu.brand_string 2>/dev/null | grep -q "Apple"; then
HAS_APPLE_SILICON=true
RAM_GB=$(sysctl -n hw.memsize | awk '{printf "%.0f", $1/1024/1024/1024}')
fi
fi
# Linux RAM 감지
if [ "$OS" = "Linux" ]; then
RAM_GB=$(free -g | awk '/^Mem:/{print $2}')
fi
# NVIDIA GPU 감지 + VRAM 확인
VRAM_GB=0
if command -v nvidia-smi &>/dev/null; then
if nvidia-smi &>/dev/null; then
HAS_NVIDIA_GPU=true
VRAM_MB=$(nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits 2>/dev/null | head -1)
VRAM_MB=${VRAM_MB:-0}
VRAM_GB=$((VRAM_MB / 1024))
fi
fi
echo " OS: $OS ($ARCH)"
echo " Apple Silicon: $HAS_APPLE_SILICON"
echo " NVIDIA GPU: $HAS_NVIDIA_GPU"
if [ "$HAS_NVIDIA_GPU" = true ]; then
echo " VRAM: ${VRAM_GB}GB"
fi
echo " RAM: ${RAM_GB}GB"
echo ""
#--------------------------------------------------------------------
# 방식 결정
# - NVIDIA GPU + VRAM 20GB 이상 → vLLM
# - NVIDIA GPU + VRAM 부족 → Ollama (GPU로는 모델 못 올림)
# - Apple Silicon + RAM 32GB↑ → MLX
# - Apple Silicon + RAM 부족 → Ollama
# - 그 외 → Ollama
#--------------------------------------------------------------------
SELECTED=""
if [ "$HAS_NVIDIA_GPU" = true ] && [ "$VRAM_GB" -ge 20 ]; then
SELECTED="vllm"
echo " → NVIDIA GPU (VRAM ${VRAM_GB}GB) → vLLM 선택"
elif [ "$HAS_NVIDIA_GPU" = true ] && [ "$VRAM_GB" -lt 20 ]; then
SELECTED="ollama"
echo " → NVIDIA GPU 감지되었으나 VRAM ${VRAM_GB}GB (20GB 미만) → Ollama 선택"
elif [ "$HAS_APPLE_SILICON" = true ] && [ "$RAM_GB" -ge 32 ]; then
SELECTED="mlx"
echo " → Apple Silicon + RAM ${RAM_GB}GB → MLX (vllm-mlx) 선택"
elif [ "$HAS_APPLE_SILICON" = true ]; then
SELECTED="ollama"
echo " → Apple Silicon + RAM ${RAM_GB}GB (32GB 미만) → Ollama 선택"
else
SELECTED="ollama"
echo " → 범용 환경 → Ollama 선택"
fi
echo ""
echo "============================================"
echo " $SELECTED 방식으로 셋업을 시작합니다"
echo "============================================"
echo ""
#--------------------------------------------------------------------
# 선택된 스크립트 실행
#--------------------------------------------------------------------
case "$SELECTED" in
ollama)
exec "$PROJECT_DIR/setup-ollama.sh"
;;
mlx)
exec "$PROJECT_DIR/setup-mlx.sh"
;;
vllm)
exec "$PROJECT_DIR/setup-vllm.sh"
;;
esac