#!/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 감지 if command -v nvidia-smi &>/dev/null; then if nvidia-smi &>/dev/null; then HAS_NVIDIA_GPU=true fi fi echo " OS: $OS ($ARCH)" echo " Apple Silicon: $HAS_APPLE_SILICON" echo " NVIDIA GPU: $HAS_NVIDIA_GPU" echo " RAM: ${RAM_GB}GB" echo "" #-------------------------------------------------------------------- # 방식 결정 #-------------------------------------------------------------------- SELECTED="" if [ "$HAS_NVIDIA_GPU" = true ]; then SELECTED="vllm" echo " → NVIDIA GPU 감지 → vLLM 선택" 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 "" #-------------------------------------------------------------------- # 사용자 확인 #-------------------------------------------------------------------- read -p " $SELECTED 방식으로 진행할까요? [Y/n] (직접 선택: o=ollama, m=mlx, v=vllm): " CONFIRM CONFIRM=${CONFIRM:-Y} case "$CONFIRM" in [Yy]|"") # 자동 선택 유지 ;; [Oo]) SELECTED="ollama" echo " → Ollama로 변경" ;; [Mm]) SELECTED="mlx" echo " → MLX로 변경" ;; [Vv]) SELECTED="vllm" echo " → vLLM으로 변경" ;; [Nn]) echo " 취소됨." exit 0 ;; *) echo " 알 수 없는 입력. 취소됨." exit 1 ;; esac 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