709 lines
22 KiB
Bash
Executable File
709 lines
22 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"
|
|
}
|
|
|
|
# 기본 설정
|
|
PROJECT_ROOT="/home/ckh08045/work/inpaintServer"
|
|
VENV_PATH="$PROJECT_ROOT"
|
|
|
|
# 시스템 감지
|
|
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 라이브러리 설치 중..."
|
|
|
|
# Jetson 최적화 라이브러리들
|
|
pip install onnxruntime-gpu || pip install onnxruntime
|
|
|
|
# Jetson 전용 패키지들
|
|
pip install jetson-stats || log_warning "jetson-stats 설치 실패"
|
|
|
|
else
|
|
log_info "x86용 GPU 라이브러리 설치 중..."
|
|
|
|
# 추가 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:8000/docs"
|
|
|
|
if [ "$SYSTEM_TYPE" = "jetson" ]; then
|
|
echo " 4. Jetson 모니터링: jtop"
|
|
echo " 5. 전력 모드 확인: nvpmodel -q"
|
|
fi
|
|
|
|
echo "=========================================="
|
|
}
|
|
|
|
# 메인 실행
|
|
main() {
|
|
log_info "인페인팅 서버 의존성 설치 시작"
|
|
|
|
detect_system
|
|
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 "$@"
|