#!/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_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