inpaintServer/scripts/install.sh

272 lines
8.4 KiB
Bash
Executable File

#!/bin/bash
# 인페인팅 서버 자동 설치 스크립트
# 플랫폼 자동 감지 및 최적 설치 방법 선택
# Usage: ./install.sh
set -e
# 색상 코드
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
MAGENTA='\033[0;35m'
NC='\033[0m' # No Color
# 로고 출력
print_logo() {
echo -e "${CYAN}"
echo " ██║ ███╗ ██╗██████╗ █████╗ ██╗███╗ ██╗████████╗"
echo " ██║ ████╗ ██║██╔══██╗██╔══██╗██║████╗ ██║╚══██╔══╝"
echo " ██║ ██╔██╗ ██║██████╔╝███████║██║██╔██╗ ██║ ██║ "
echo " ██║ ██║╚██╗██║██╔═══╝ ██╔══██║██║██║╚██╗██║ ██║ "
echo " ██║ ██║ ╚████║██║ ██║ ██║██║██║ ╚████║ ██║ "
echo " ╚═╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═╝ "
echo ""
echo " 🎨 AI 인페인팅 서버 - 자동 설치 도구"
echo -e "${NC}"
}
# 로그 함수들
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_step() {
echo -e "${CYAN}[STEP]${NC} $1"
}
log_platform() {
echo -e "${MAGENTA}[PLATFORM]${NC} $1"
}
# 플랫폼 감지
detect_platform() {
local arch=$(uname -m)
local os_info=$(uname -a)
log_step "플랫폼 감지 중..."
if [[ "$arch" == "aarch64" ]] && echo "$os_info" | grep -q "tegra"; then
PLATFORM="jetson"
PLATFORM_NAME="NVIDIA Jetson Xavier"
INSTALL_SCRIPT="setup_jetson.sh"
log_platform "🚀 $PLATFORM_NAME 감지됨"
elif [[ "$arch" == "x86_64" ]] || [[ "$arch" == "amd64" ]]; then
PLATFORM="x86"
PLATFORM_NAME="x86-64 Desktop"
INSTALL_SCRIPT="setup_x86.sh"
log_platform "🖥️ $PLATFORM_NAME 감지됨"
elif [[ "$arch" == "aarch64" ]]; then
PLATFORM="arm64"
PLATFORM_NAME="ARM64 (Generic)"
INSTALL_SCRIPT="setup_jetson.sh"
log_platform "💻 $PLATFORM_NAME 감지됨 (Jetson 설치 방법 사용)"
else
log_error "지원하지 않는 아키텍처: $arch"
echo "지원 플랫폼:"
echo " - x86-64 (Intel/AMD)"
echo " - ARM64 (NVIDIA Jetson Xavier)"
exit 1
fi
echo "감지된 정보:"
echo " 아키텍처: $arch"
echo " 플랫폼: $PLATFORM_NAME"
echo " 설치 스크립트: $INSTALL_SCRIPT"
echo ""
}
# GPU 정보 표시
show_gpu_info() {
log_step "GPU 정보 확인 중..."
if command -v nvidia-smi >/dev/null 2>&1; then
echo "=== NVIDIA GPU 정보 ==="
nvidia-smi --query-gpu=name,driver_version,memory.total --format=csv,noheader 2>/dev/null | while read line; do
echo " GPU: $line"
done
echo ""
else
log_warning "NVIDIA GPU 또는 드라이버가 설치되지 않았습니다."
echo ""
fi
}
# 시스템 요구사항 확인
check_requirements() {
log_step "시스템 요구사항 확인 중..."
local errors=0
# Python 3.8+ 확인
if command -v python3 >/dev/null 2>&1; then
local python_version=$(python3 --version 2>&1 | awk '{print $2}')
if python3 -c "import sys; exit(0 if sys.version_info >= (3, 8) else 1)" 2>/dev/null; then
log_success "Python $python_version 확인됨"
else
log_error "Python 3.8 이상이 필요합니다. 현재: $python_version"
errors=$((errors + 1))
fi
else
log_error "Python3가 설치되지 않았습니다."
errors=$((errors + 1))
fi
# Git 확인
if command -v git >/dev/null 2>&1; then
log_success "Git 확인됨"
else
log_warning "Git이 설치되지 않았습니다. 설치 과정에서 자동으로 설치됩니다."
fi
# 메모리 확인
if [ "$PLATFORM" = "jetson" ]; then
local total_mem=$(free -g | grep '^Mem:' | awk '{print $2}')
if [ "$total_mem" -ge 16 ]; then
log_success "메모리 ${total_mem}GB 확인됨 (Jetson 권장: 16GB+)"
else
log_warning "메모리 ${total_mem}GB (권장: 16GB+)"
fi
else
local total_mem=$(free -g | grep '^Mem:' | awk '{print $2}')
if [ "$total_mem" -ge 8 ]; then
log_success "메모리 ${total_mem}GB 확인됨"
else
log_warning "메모리 ${total_mem}GB (권장: 8GB+)"
fi
fi
# 디스크 공간 확인
local free_space=$(df -BG . | tail -1 | awk '{print $4}' | sed 's/G//')
if [ "$free_space" -ge 10 ]; then
log_success "디스크 여유 공간 ${free_space}GB 확인됨"
else
log_warning "디스크 여유 공간 ${free_space}GB (권장: 10GB+)"
fi
if [ $errors -gt 0 ]; then
log_error "필수 요구사항이 충족되지 않았습니다. 위 문제를 해결한 후 다시 시도하세요."
exit 1
fi
echo ""
}
# 설치 옵션 표시
show_installation_options() {
echo "=== 설치 옵션 ==="
echo ""
if [ "$PLATFORM" = "jetson" ]; then
echo "🚀 Jetson Xavier 최적화 설정:"
echo " - ONNX Runtime GPU (ARM64 특화)"
echo " - 32GB 통합 메모리 최적화"
echo " - CUDA + TensorRT 가속"
echo " - 세션 풀: LAMA(4), MIGAN(4), REMBG(3)"
echo " - 워커: 8개 (자동 조정)"
else
echo "🖥️ x86-64 데스크톱 설정:"
echo " - ONNX Runtime GPU (x86-64)"
echo " - RTX GPU 최적화"
echo " - CUDA + TensorRT 가속"
echo " - 세션 풀: LAMA(3), MIGAN(3), REMBG(2)"
echo " - 워커: 4-8개 (GPU 메모리에 따라)"
fi
echo ""
}
# 사용자 확인
confirm_installation() {
echo "=== 설치 확인 ==="
echo "다음 설정으로 설치를 진행합니다:"
echo " 플랫폼: $PLATFORM_NAME"
echo " 설치 스크립트: $INSTALL_SCRIPT"
echo ""
read -p "계속 진행하시겠습니까? (y/N): " -r
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "설치가 취소되었습니다."
exit 0
fi
echo ""
}
# 메인 실행
main() {
clear
print_logo
# 스크립트 디렉토리로 이동
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
cd "$SCRIPT_DIR"
detect_platform
show_gpu_info
check_requirements
show_installation_options
confirm_installation
# 플랫폼별 설치 스크립트 실행
log_step "플랫폼별 설치 스크립트 실행 중..."
if [ ! -f "$INSTALL_SCRIPT" ]; then
log_error "설치 스크립트를 찾을 수 없습니다: $INSTALL_SCRIPT"
exit 1
fi
chmod +x "$INSTALL_SCRIPT"
bash "$INSTALL_SCRIPT"
# 설치 완료
echo ""
echo "=========================================="
log_success "🎉 인페인팅 서버 설치 완료!"
echo "=========================================="
echo ""
echo "다음 단계:"
echo " 1. 서버 시작: bash scripts/start_server.sh"
echo " 2. 서버 상태 확인: bash scripts/status.sh"
echo " 3. 서버 중지: bash scripts/stop_server.sh"
echo ""
echo "접속 주소:"
echo " 🖥️ 모니터링 대시보드: http://localhost:8009"
echo " 🔗 API 엔드포인트: http://localhost:8008"
echo " 📊 헬스체크: curl http://localhost:8008/api/v1/health"
echo ""
if [ "$PLATFORM" = "jetson" ]; then
echo "Jetson Xavier 참고사항:"
echo " - tegrastats로 시스템 상태 모니터링 가능"
echo " - 32GB 통합 메모리로 다중 세션 최적화됨"
echo " - GPU 온도/클럭 정보가 모니터링 대시보드에 표시됨"
else
echo "x86-64 참고사항:"
echo " - nvidia-smi로 GPU 상태 확인 가능"
echo " - GPU 메모리에 따라 세션 수 자동 조정됨"
echo " - TensorRT 사용 시 최고 성능"
fi
echo ""
}
# 스크립트 실행
main "$@"