inpaintServer/scripts/install_deps_legacy.sh

807 lines
26 KiB
Bash
Executable File

#!/bin/bash
# 인페인팅 서버 의존성 설치 스크립트
# Jetson Xavier와 x86 시스템을 모두 지원합니다.
# Usage: ./install_deps.sh [options]
set -e
# 색상 코드
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 로그 함수들
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"
}
# 기본 설정 - 동적 경로 처리
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
# 가상환경 경로 자동 감지
detect_venv_path() {
local possible_paths=(
"$PROJECT_ROOT/venv" # 일반적인 venv 경로
"$PROJECT_ROOT/.venv" # 숨김 venv 경로
"$PROJECT_ROOT/env" # env 경로
"$PROJECT_ROOT/.env" # 숨김 env 경로
"$PROJECT_ROOT" # 프로젝트 루트 (Jetson 방식)
)
for path in "${possible_paths[@]}"; do
if [ -f "$path/bin/python" ] || [ -f "$path/bin/python3" ]; then
VENV_PATH="$path"
log_info "가상환경 경로 감지: $VENV_PATH"
return 0
fi
done
# 현재 활성화된 가상환경 확인
if [ -n "$VIRTUAL_ENV" ]; then
VENV_PATH="$VIRTUAL_ENV"
log_info "활성화된 가상환경 사용: $VENV_PATH"
return 0
fi
# 가상환경을 찾지 못한 경우 시스템별 기본값 사용
if [ "$(uname -m)" = "aarch64" ] && uname -a | grep -q "tegra"; then
VENV_PATH="$PROJECT_ROOT"
log_warning "가상환경을 찾을 수 없어 Jetson 기본값 사용: $VENV_PATH"
else
VENV_PATH="$PROJECT_ROOT/venv"
log_warning "가상환경을 찾을 수 없어 x86 기본값 사용: $VENV_PATH"
fi
}
# 시스템 감지
detect_system() {
log_info "시스템 감지 중..."
if [ "$(uname -m)" = "aarch64" ] && uname -a | grep -q "tegra"; then
SYSTEM_TYPE="jetson"
log_success "Jetson Xavier (ARM64) 감지됨"
# Jetson 버전 확인
if [ -f "/etc/nv_tegra_release" ]; then
JETSON_VERSION=$(cat /etc/nv_tegra_release | head -1)
log_info "Jetson 버전: $JETSON_VERSION"
fi
# CUDA 버전 확인
if command -v nvcc &> /dev/null; then
CUDA_VERSION=$(nvcc --version | grep "release" | awk '{print $6}' | cut -c2-)
log_info "CUDA 버전: $CUDA_VERSION"
fi
# TensorRT 버전 확인
if [ -f "/usr/lib/aarch64-linux-gnu/libnvinfer.so" ]; then
TENSORRT_VERSION=$(strings /usr/lib/aarch64-linux-gnu/libnvinfer.so | grep "TensorRT" | head -1)
log_info "TensorRT: $TENSORRT_VERSION"
fi
elif [ "$(uname -m)" = "x86_64" ]; then
SYSTEM_TYPE="x86"
log_success "x86_64 시스템 감지됨"
# CUDA 버전 설정
CUDA_VERSION="11.8"
TENSORRT_VERSION="8.6.1"
else
log_error "지원되지 않는 시스템 아키텍처: $(uname -m)"
exit 1
fi
# Python 버전 확인
if command -v python3 &> /dev/null; then
PYTHON_VERSION=$(python3 --version | awk '{print $2}')
log_info "Python 버전: $PYTHON_VERSION"
# Python 3.8 이상 필요
if python3 -c "import sys; exit(0 if sys.version_info >= (3, 8) else 1)"; then
log_success "Python 버전 확인 완료"
else
log_error "Python 3.8 이상이 필요합니다 (현재: $PYTHON_VERSION)"
exit 1
fi
else
log_error "Python3이 설치되어 있지 않습니다"
exit 1
fi
}
# 옵션 파싱
FORCE_REINSTALL=false
SKIP_CUDA_CHECK=false
INSTALL_TENSORRT=true
INSTALL_EXTRAS=false
JETSON_OPTIMIZE=false
while [[ $# -gt 0 ]]; do
case $1 in
-f|--force)
FORCE_REINSTALL=true
shift
;;
--skip-cuda)
SKIP_CUDA_CHECK=true
shift
;;
--no-tensorrt)
INSTALL_TENSORRT=false
shift
;;
--extras)
INSTALL_EXTRAS=true
shift
;;
--jetson-optimize)
JETSON_OPTIMIZE=true
shift
;;
-h|--help)
echo "Usage: $0 [options]"
echo "Options:"
echo " -f, --force 기존 패키지 강제 재설치"
echo " --skip-cuda CUDA 설치 확인 건너뛰기"
echo " --no-tensorrt TensorRT 설치 건너뛰기"
echo " --extras 추가 패키지 설치 (개발 도구 등)"
echo " --jetson-optimize Jetson 최적화 설정 (Jetson 전용)"
echo " -h, --help 이 도움말 표시"
exit 0
;;
*)
log_error "알 수 없는 옵션: $1"
exit 1
;;
esac
done
# 시스템 요구사항 확인
check_system_requirements() {
log_info "시스템 요구사항 확인 중..."
# Ubuntu 버전 확인
if [ -f /etc/os-release ]; then
source /etc/os-release
log_info "OS: $PRETTY_NAME"
if [ "$SYSTEM_TYPE" = "jetson" ]; then
# Jetson은 Ubuntu 18.04 이상 권장
if [[ "$VERSION_ID" < "18.04" ]]; then
log_warning "Ubuntu 18.04 이상을 권장합니다 (현재: $VERSION_ID)"
fi
else
# x86은 Ubuntu 18.04 이상 권장
if [[ "$VERSION_ID" < "18.04" ]]; then
log_warning "Ubuntu 18.04 이상을 권장합니다 (현재: $VERSION_ID)"
fi
fi
fi
# 메모리 확인
TOTAL_MEMORY=$(free -g | awk 'NR==2{print $2}')
if [ "$SYSTEM_TYPE" = "jetson" ]; then
if [ "$TOTAL_MEMORY" -lt 4 ]; then
log_warning "4GB 이상의 RAM을 권장합니다 (현재: ${TOTAL_MEMORY}GB)"
fi
else
if [ "$TOTAL_MEMORY" -lt 8 ]; then
log_warning "8GB 이상의 RAM을 권장합니다 (현재: ${TOTAL_MEMORY}GB)"
fi
fi
log_success "시스템 요구사항 확인 완료"
}
# CUDA 설치 확인
check_cuda_installation() {
if [ "$SKIP_CUDA_CHECK" = true ]; then
log_info "CUDA 확인을 건너뛰었습니다"
return 0
fi
log_info "CUDA 설치 확인 중..."
if [ "$SYSTEM_TYPE" = "jetson" ]; then
log_info "Jetson Xavier CUDA 확인 중..."
# Jetson 전용 확인 방법들
jetson_checks_passed=0
# 1. nvcc 확인
if command -v nvcc &> /dev/null; then
CUDA_VERSION_INSTALLED=$(nvcc --version | grep "release" | awk '{print $6}' | cut -c2-)
log_info "CUDA 컴파일러 버전: $CUDA_VERSION_INSTALLED"
jetson_checks_passed=$((jetson_checks_passed + 1))
else
log_warning "nvcc를 찾을 수 없습니다"
fi
# 2. tegrastats 확인 (Jetson 전용)
if command -v tegrastats &> /dev/null; then
log_info "tegrastats 사용 가능 (Jetson 전용)"
jetson_checks_passed=$((jetson_checks_passed + 1))
else
log_warning "tegrastats를 찾을 수 없습니다"
fi
# 3. nvpmodel 확인 (전력 모드 관리)
if command -v nvpmodel &> /dev/null; then
log_info "nvpmodel 사용 가능 (전력 모드 관리)"
jetson_checks_passed=$((jetson_checks_passed + 1))
else
log_warning "nvpmodel을 찾을 수 없습니다"
fi
# 4. TensorRT 확인
if [ -f "/usr/lib/aarch64-linux-gnu/libnvinfer.so" ]; then
TENSORRT_VERSION=$(strings /usr/lib/aarch64-linux-gnu/libnvinfer.so | grep "TensorRT" | head -1)
log_info "TensorRT: $TENSORRT_VERSION"
jetson_checks_passed=$((jetson_checks_passed + 1))
else
log_warning "TensorRT를 찾을 수 없습니다"
fi
# 5. Jetson 버전 확인
if [ -f "/etc/nv_tegra_release" ]; then
JETSON_VERSION=$(cat /etc/nv_tegra_release | head -1)
log_info "Jetson 버전: $JETSON_VERSION"
jetson_checks_passed=$((jetson_checks_passed + 1))
else
log_warning "Jetson 버전 정보를 찾을 수 없습니다"
fi
# 6. GPU 디바이스 확인 (Jetson 전용 경로들)
gpu_detected=false
# Jetson GPU 클래스 확인
if [ -d "/sys/class/nvidia-gpu" ]; then
log_info "Jetson GPU 클래스 감지됨: /sys/class/nvidia-gpu"
gpu_detected=true
fi
# Jetson GPU 디바이스 확인
if [ -d "/sys/devices/platform/*/nvidia-gpu" ]; then
log_info "Jetson GPU 디바이스 감지됨"
gpu_detected=true
fi
# GV11B GPU 확인 (Jetson Xavier)
if [ -d "/sys/firmware/devicetree/base/gv11b" ]; then
log_info "GV11B GPU (Jetson Xavier) 감지됨"
gpu_detected=true
fi
# 디버그 GPU 경로 확인 (권한이 있는 경우)
if [ -r "/sys/kernel/debug/gpu" ]; then
log_info "GPU 디버그 경로 접근 가능: /sys/kernel/debug/gpu"
gpu_detected=true
fi
if [ "$gpu_detected" = true ]; then
log_info "GPU 디바이스 감지됨"
jetson_checks_passed=$((jetson_checks_passed + 1))
else
log_warning "GPU 디바이스를 찾을 수 없습니다 (권한 문제일 수 있음)"
log_info "sudo 권한으로 실행하거나 시스템을 재부팅해보세요"
fi
if [ $jetson_checks_passed -ge 3 ]; then
log_success "Jetson Xavier CUDA 확인 완료 ($jetson_checks_passed/6 체크 통과)"
else
log_warning "Jetson Xavier CUDA 확인 부분 실패 ($jetson_checks_passed/6 체크 통과)"
log_info "Jetson SDK를 재설치하거나 시스템을 재부팅해보세요"
fi
else
# x86 시스템용 기존 확인 방법
if command -v nvidia-smi &> /dev/null; then
log_info "NVIDIA 드라이버가 설치되어 있습니다"
nvidia-smi --query-gpu=name,driver_version,memory.total --format=csv,noheader
# CUDA 런타임 확인
if command -v nvcc &> /dev/null; then
CUDA_VERSION_INSTALLED=$(nvcc --version | grep "release" | awk '{print $6}' | cut -c2-)
log_info "CUDA 버전: $CUDA_VERSION_INSTALLED"
else
log_warning "CUDA 컴파일러(nvcc)를 찾을 수 없습니다"
log_info "런타임만 설치된 상태일 수 있습니다"
fi
log_success "CUDA 확인 완료"
else
log_error "NVIDIA 드라이버가 설치되어 있지 않습니다"
log_info "다음 명령어로 설치하세요:"
log_info "sudo apt update && sudo apt install nvidia-driver-470"
exit 1
fi
fi
}
# 가상환경 활성화
activate_venv() {
log_info "가상환경 활성화 중..."
if [ ! -f "$VENV_PATH/bin/activate" ]; then
log_error "가상환경을 찾을 수 없습니다: $VENV_PATH"
exit 1
fi
cd "$PROJECT_ROOT"
source "$VENV_PATH/bin/activate"
# pip 업그레이드
log_info "pip 업그레이드 중..."
pip install --upgrade pip setuptools wheel
log_success "가상환경 활성화 완료"
}
# PyTorch 설치 (시스템별)
install_pytorch() {
log_info "PyTorch 설치 중..."
# 기존 PyTorch 확인
if pip list | grep -q torch && [ "$FORCE_REINSTALL" = false ]; then
log_info "PyTorch가 이미 설치되어 있습니다"
python -c "import torch; print(f'PyTorch 버전: {torch.__version__}'); print(f'CUDA 사용 가능: {torch.cuda.is_available()}')"
return 0
fi
if [ "$SYSTEM_TYPE" = "jetson" ]; then
log_info "Jetson Xavier용 PyTorch 설치 중..."
# Jetson 전용 PyTorch 설치
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# Jetson 최적화 패키지들
pip install nvidia-ml-py3 pynvml
else
log_info "x86용 PyTorch 설치 중..."
# x86용 PyTorch 설치
case $CUDA_VERSION in
"11.8")
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
;;
"11.7")
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
;;
"cpu")
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
;;
*)
log_warning "지원되지 않는 CUDA 버전: $CUDA_VERSION. 기본 버전을 설치합니다"
pip install torch torchvision torchaudio
;;
esac
fi
# 설치 확인
python -c "import torch; print(f'PyTorch 설치 완료: {torch.__version__}'); print(f'CUDA 사용 가능: {torch.cuda.is_available()}')"
log_success "PyTorch 설치 완료"
}
# TensorRT 설치
install_tensorrt() {
if [ "$INSTALL_TENSORRT" = false ]; then
log_info "TensorRT 설치를 건너뛰었습니다"
return 0
fi
log_info "TensorRT 설치 중..."
# 기존 TensorRT 확인
if pip list | grep -q tensorrt && [ "$FORCE_REINSTALL" = false ]; then
log_info "TensorRT가 이미 설치되어 있습니다"
return 0
fi
if [ "$SYSTEM_TYPE" = "jetson" ]; then
log_info "Jetson Xavier용 TensorRT 설치 중..."
# Jetson에는 TensorRT가 기본적으로 포함되어 있음
if [ -f "/usr/lib/aarch64-linux-gnu/libnvinfer.so" ]; then
log_info "Jetson TensorRT가 이미 설치되어 있습니다"
# Python 바인딩만 설치
pip install nvidia-pyindex
pip install nvidia-tensorrt
else
log_warning "Jetson TensorRT를 찾을 수 없습니다"
log_info "Jetson SDK를 재설치하거나 수동으로 설치해주세요"
fi
else
log_info "x86용 TensorRT 설치 중..."
# x86용 TensorRT 설치 시도
pip install tensorrt==$TENSORRT_VERSION || {
log_warning "TensorRT 패키지 설치에 실패했습니다"
log_info "수동으로 NVIDIA 웹사이트에서 다운로드가 필요할 수 있습니다"
return 1
}
fi
# pycuda 설치
pip install pycuda
log_success "TensorRT 설치 완료"
}
# 메인 패키지 설치
install_main_packages() {
log_info "메인 패키지 설치 중..."
# requirements.txt 확인
if [ ! -f "$PROJECT_ROOT/requirements.txt" ]; then
log_error "requirements.txt 파일을 찾을 수 없습니다"
exit 1
fi
# Jetson 전용 requirements 처리
if [ "$SYSTEM_TYPE" = "jetson" ]; then
log_info "Jetson Xavier용 패키지 설치 중..."
# Jetson에 맞는 패키지 버전으로 설치
pip install fastapi uvicorn python-multipart pillow numpy
# OpenCV - Jetson 최적화 버전
pip install opencv-python-headless || pip install opencv-python
# 나머지 패키지들
pip install psutil asyncio-throttle aiofiles pydantic
else
# x86용 전체 패키지 설치
if [ "$FORCE_REINSTALL" = true ]; then
pip install --force-reinstall -r requirements.txt
else
pip install -r requirements.txt
fi
fi
log_success "메인 패키지 설치 완료"
}
# 모델별 의존성 설치
install_model_dependencies() {
log_info "모델별 의존성 설치 중..."
# Simple LAMA 의존성
log_info "Simple LAMA 의존성 설치 중..."
pip install simple-lama-inpainting || {
log_warning "simple-lama-inpainting 패키지 설치 실패"
log_info "수동 설치가 필요할 수 있습니다"
}
# REMBG 의존성
log_info "REMBG 의존성 설치 중..."
if [ "$SYSTEM_TYPE" = "jetson" ]; then
# Jetson용 REMBG (CPU 버전 권장)
pip install rembg || pip install rembg[cpu]
else
pip install rembg[gpu] || pip install rembg
fi
# 추가 이미지 처리 라이브러리
if [ "$SYSTEM_TYPE" = "jetson" ]; then
# Jetson 최적화 버전 (pillow-simd는 ARM64에서 지원되지 않음)
pip install opencv-python-headless pillow || pip install opencv-python pillow
else
# x86용 최적화 버전
pip install opencv-python-headless pillow-simd || pip install opencv-python pillow
fi
log_success "모델별 의존성 설치 완료"
}
# GPU 라이브러리 설치
install_gpu_libraries() {
log_info "GPU 라이브러리 설치 중..."
# NVIDIA 관련 Python 패키지
pip install nvidia-ml-py3 pynvml
if [ "$SYSTEM_TYPE" = "jetson" ]; then
log_info "Jetson 전용 GPU 라이브러리 설치 중..."
# GCC 버전 확인 및 업그레이드 (ONNX Runtime GPU용)
log_info "GCC 버전 확인 중..."
if ! gcc-11 --version &> /dev/null; then
log_warning "GCC-11이 설치되지 않았습니다. ONNX Runtime GPU 설치를 위해 설치 중..."
# GCC 11 설치
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install -y gcc-11 g++-11
log_success "GCC-11 설치 완료"
else
log_info "GCC-11이 이미 설치되어 있습니다"
fi
# Jetson Xavier용 ONNX Runtime GPU 설치
log_info "Jetson Xavier용 ONNX Runtime GPU 설치 중..."
# 기존 onnxruntime 제거
pip uninstall -y onnxruntime onnxruntime-gpu 2>/dev/null || true
# ONNX Runtime GPU 휠 파일 다운로드
ONNX_WHEEL_NAME="onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl"
if [ ! -f "$PROJECT_ROOT/$ONNX_WHEEL_NAME" ]; then
log_info "ONNX Runtime GPU 휠 파일 다운로드 중..."
cd "$PROJECT_ROOT"
wget https://nvidia.box.com/shared/static/zostg6agm00fb6t5uisw51qi6kpcuwzd.whl \
-O "$ONNX_WHEEL_NAME"
else
log_info "ONNX Runtime GPU 휠 파일이 이미 존재합니다"
fi
# ONNX Runtime GPU 설치
log_info "ONNX Runtime GPU 설치 중..."
pip install --force-reinstall "$PROJECT_ROOT/$ONNX_WHEEL_NAME"
# 설치 확인
if python -c "import onnxruntime as ort; print('Available providers:', ort.get_available_providers())" 2>/dev/null; then
log_success "ONNX Runtime GPU 설치 및 확인 완료"
python -c "
import onnxruntime as ort
providers = ort.get_available_providers()
print('ONNX Runtime 버전:', ort.__version__)
print('사용 가능한 프로바이더:')
for provider in providers:
print(' -', provider)
if 'TensorrtExecutionProvider' in providers:
print('✅ TensorRT 프로바이더 사용 가능')
if 'CUDAExecutionProvider' in providers:
print('✅ CUDA 프로바이더 사용 가능')
"
else
log_error "ONNX Runtime GPU 설치 실패"
log_info "CPU 버전으로 폴백 설치 중..."
pip install onnxruntime==1.19.2
fi
# Jetson 전용 패키지들
pip install jetson-stats || log_warning "jetson-stats 설치 실패"
else
log_info "x86용 GPU 라이브러리 설치 중..."
# x86용 ONNX Runtime GPU 설치
log_info "x86용 ONNX Runtime GPU 설치 중..."
pip install onnxruntime-gpu || {
log_warning "ONNX Runtime GPU 설치 실패, CPU 버전으로 폴백"
pip install onnxruntime==1.19.2
}
# 추가 GPU 가속 라이브러리
if [ "$INSTALL_EXTRAS" = true ]; then
pip install cupy-cuda118 || {
log_warning "CuPy 설치 실패"
log_info "CUDA 버전을 확인하고 수동 설치하세요"
}
fi
fi
log_success "GPU 라이브러리 설치 완료"
}
# Jetson 최적화 설정
setup_jetson_optimization() {
if [ "$SYSTEM_TYPE" != "jetson" ] || [ "$JETSON_OPTIMIZE" != true ]; then
return 0
fi
log_info "Jetson Xavier 최적화 설정 중..."
# 전력 모드 설정
if command -v nvpmodel &> /dev/null; then
log_info "전력 모드를 MAXN으로 설정 중..."
sudo nvpmodel -m 0 # MAXN 모드
sudo nvpmodel -q
else
log_warning "nvpmodel을 찾을 수 없습니다"
fi
# 팬 제어 설정
if [ -f "/sys/devices/pwm-fan/target_pwm" ]; then
log_info "팬 제어 활성화 중..."
echo 128 | sudo tee /sys/devices/pwm-fan/target_pwm > /dev/null
fi
# GPU 클럭 설정
if [ -f "/sys/kernel/debug/clk/gpcclk/clk_rate" ]; then
log_info "GPU 클럭 최적화 중..."
# 최대 클럭으로 설정 (1200MHz)
echo 1200000000 | sudo tee /sys/kernel/debug/clk/gpcclk/clk_rate > /dev/null
fi
# 메모리 클럭 설정
if [ -f "/sys/kernel/debug/clk/emc/clk_rate" ]; then
log_info "메모리 클럭 최적화 중..."
# 최대 클럭으로 설정 (1600MHz)
echo 1600000000 | sudo tee /sys/kernel/debug/clk/emc/clk_rate > /dev/null
fi
log_success "Jetson 최적화 설정 완료"
}
# 개발 도구 설치 (선택적)
install_dev_tools() {
if [ "$INSTALL_EXTRAS" = false ]; then
return 0
fi
log_info "개발 도구 설치 중..."
# 코드 품질 도구
pip install black flake8 isort mypy
# 테스트 도구
pip install pytest pytest-asyncio pytest-cov
# 프로파일링 도구
pip install line_profiler memory_profiler
# Jupyter 노트북
pip install jupyter ipykernel
if [ "$SYSTEM_TYPE" = "jetson" ]; then
# Jetson 전용 개발 도구
pip install jetson-inference || log_warning "jetson-inference 설치 실패"
fi
log_success "개발 도구 설치 완료"
}
# 설치 확인
verify_installation() {
log_info "설치 확인 중..."
# Python 패키지 확인
local packages=("fastapi" "uvicorn" "torch" "PIL" "cv2" "numpy")
for package in "${packages[@]}"; do
if python -c "import $package" 2>/dev/null; then
log_success "$package 설치 확인"
else
log_error "$package 설치 실패"
fi
done
# CUDA 사용 가능성 확인
if python -c "import torch; exit(0 if torch.cuda.is_available() else 1)" 2>/dev/null; then
log_success "CUDA 사용 가능"
python -c "import torch; print(f'사용 가능한 GPU 수: {torch.cuda.device_count()}')"
if [ "$SYSTEM_TYPE" = "jetson" ]; then
python -c "
import torch
if torch.cuda.is_available():
torch.cuda.empty_cache()
print(f'Jetson GPU 메모리: {torch.cuda.get_device_properties(0).total_memory / 1024**3:.1f} GB')
print(f'GPU 이름: {torch.cuda.get_device_properties(0).name}')
"
fi
else
log_warning "CUDA를 사용할 수 없습니다"
fi
# Jetson 전용 확인
if [ "$SYSTEM_TYPE" = "jetson" ]; then
log_info "Jetson 전용 기능 확인 중..."
# jetson-stats 확인
if command -v jtop &> /dev/null; then
log_success "jetson-stats (jtop) 사용 가능"
fi
# TensorRT 확인
if python -c "import tensorrt" 2>/dev/null; then
log_success "TensorRT Python 바인딩 확인"
fi
fi
log_success "설치 확인 완료"
}
# 설치 후 정리
post_install_cleanup() {
log_info "설치 후 정리 중..."
# pip 캐시 정리
pip cache purge
# __pycache__ 정리
find "$PROJECT_ROOT" -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find "$PROJECT_ROOT" -name "*.pyc" -delete 2>/dev/null || true
log_success "정리 완료"
}
# 설치 요약 정보
print_installation_summary() {
echo ""
echo "=========================================="
echo "📦 의존성 설치 완료!"
echo "=========================================="
echo "시스템 타입: $SYSTEM_TYPE"
echo "Python 버전: $(python --version)"
echo "PyTorch 버전: $(python -c 'import torch; print(torch.__version__)' 2>/dev/null || echo 'N/A')"
echo "CUDA 사용 가능: $(python -c 'import torch; print(torch.cuda.is_available())' 2>/dev/null || echo 'N/A')"
if [ "$SYSTEM_TYPE" = "jetson" ]; then
echo ""
echo "🚀 Jetson Xavier 최적화:"
echo " - 전력 모드: MAXN"
echo " - GPU 클럭: 1200MHz"
echo " - 메모리 클럭: 1600MHz"
echo " - 팬 제어: 활성화"
fi
echo ""
echo "설치된 주요 패키지:"
pip list | grep -E "(torch|fastapi|uvicorn|rembg|pillow|opencv)" | head -10
echo ""
echo "다음 단계:"
echo " 1. 서버 시작: ./scripts/start_server.sh"
echo " 2. 상태 확인: ./scripts/status.sh"
echo " 3. API 문서: http://localhost:8008/docs"
if [ "$SYSTEM_TYPE" = "jetson" ]; then
echo " 4. Jetson 모니터링: jtop"
echo " 5. 전력 모드 확인: nvpmodel -q"
fi
echo "=========================================="
}
# 메인 실행
main() {
log_info "인페인팅 서버 의존성 설치 시작"
detect_system
detect_venv_path
check_system_requirements
check_cuda_installation
activate_venv
install_pytorch
install_tensorrt
install_main_packages
install_model_dependencies
install_gpu_libraries
setup_jetson_optimization
install_dev_tools
verify_installation
post_install_cleanup
print_installation_summary
log_success "의존성 설치가 완료되었습니다!"
}
# 스크립트 실행
main "$@"