- setup.sh: 시스템 자동 감지 (Apple Silicon/NVIDIA GPU/RAM) → 최적 방식 선택 - stop.sh: 실행 중인 서비스 자동 감지 후 종료 - setup-vllm.sh / stop-vllm.sh: NVIDIA GPU + Docker 기반 vLLM 서빙 - docker-compose.vllm.yml 자동 생성 (vLLM + Open WebUI) - README 전면 개편 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
130 lines
3.6 KiB
Bash
Executable File
130 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 감지
|
|
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
|