227 lines
6.2 KiB
Bash
Executable File
227 lines
6.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Jetson Xavier 전용 인페인팅 서버 설치 스크립트
|
|
# ARM64 아키텍처 + NVIDIA Jetson Xavier + 32GB 통합 메모리 최적화
|
|
# Usage: ./setup_jetson.sh
|
|
|
|
set -e
|
|
|
|
# 색상 코드
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 로그 함수들
|
|
log_info() {
|
|
echo -e "${BLUE}[JETSON]${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"
|
|
}
|
|
|
|
# 스크립트 시작
|
|
clear
|
|
echo "======================================"
|
|
echo "🚀 Jetson Xavier 인페인팅 서버 설치"
|
|
echo "======================================"
|
|
echo ""
|
|
|
|
# 1단계: 시스템 확인
|
|
log_step "1단계: Jetson Xavier 시스템 확인"
|
|
|
|
# ARM64 아키텍처 확인
|
|
if [ "$(uname -m)" != "aarch64" ]; then
|
|
log_error "이 스크립트는 Jetson Xavier (ARM64)용입니다. x86 시스템은 setup_x86.sh를 사용하세요."
|
|
exit 1
|
|
fi
|
|
|
|
# Jetson 확인
|
|
if [ ! -f "/etc/nv_tegra_release" ]; then
|
|
log_warning "Jetson 시스템이 아닌 것 같습니다. 계속 진행하시겠습니까? (y/N)"
|
|
read -r response
|
|
if [[ ! "$response" =~ ^[Yy]$ ]]; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
log_success "Jetson Xavier ARM64 시스템 확인됨"
|
|
|
|
# 2단계: 가상환경 설정
|
|
log_step "2단계: Python 가상환경 설정"
|
|
|
|
# 프로젝트 루트로 이동
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# 가상환경 생성 함수
|
|
create_venv() {
|
|
local venv_path="$1"
|
|
if [ ! -d "$venv_path" ]; then
|
|
log_info "가상환경 생성 중: $venv_path"
|
|
python3 -m venv "$venv_path"
|
|
log_success "가상환경 생성 완료: $venv_path"
|
|
else
|
|
log_info "기존 가상환경 발견: $venv_path"
|
|
fi
|
|
}
|
|
|
|
# venv 또는 현재 디렉토리에 가상환경 확인/생성
|
|
if [ -d "venv" ]; then
|
|
VENV_PATH="venv"
|
|
log_info "기존 venv 가상환경 사용"
|
|
elif [ -f "pyvenv.cfg" ]; then
|
|
VENV_PATH="."
|
|
log_info "프로젝트 자체가 가상환경으로 설정됨"
|
|
else
|
|
VENV_PATH="venv"
|
|
log_info "새로운 venv 가상환경 생성"
|
|
create_venv "$VENV_PATH"
|
|
fi
|
|
|
|
# 가상환경 활성화
|
|
if [ "$VENV_PATH" = "." ]; then
|
|
# 현재 디렉토리가 가상환경인 경우
|
|
if [ -z "$VIRTUAL_ENV" ]; then
|
|
log_info "프로젝트 디렉토리 가상환경 활성화"
|
|
source bin/activate 2>/dev/null || {
|
|
log_error "가상환경 활성화 실패. venv를 새로 생성합니다."
|
|
VENV_PATH="venv"
|
|
create_venv "$VENV_PATH"
|
|
source "$VENV_PATH/bin/activate"
|
|
}
|
|
fi
|
|
else
|
|
source "$VENV_PATH/bin/activate"
|
|
fi
|
|
|
|
log_success "가상환경 활성화: $VIRTUAL_ENV"
|
|
|
|
# 3단계: 시스템 패키지 업데이트
|
|
log_step "3단계: 시스템 패키지 업데이트"
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# 4단계: 필수 도구 설치
|
|
log_step "4단계: Jetson 개발 도구 설치"
|
|
sudo apt install -y \
|
|
python3-dev \
|
|
python3-pip \
|
|
python3-venv \
|
|
build-essential \
|
|
cmake \
|
|
git \
|
|
curl \
|
|
wget \
|
|
unzip \
|
|
pkg-config \
|
|
libssl-dev \
|
|
libffi-dev \
|
|
libjpeg-dev \
|
|
libpng-dev \
|
|
libtiff-dev \
|
|
libopencv-dev \
|
|
nvidia-jetpack
|
|
|
|
# 5단계: GCC 11 설치 (ONNX Runtime GPU 호환성)
|
|
log_step "5단계: GCC 11 설치 (ONNX Runtime GPU 필수)"
|
|
sudo apt install -y gcc-11 g++-11
|
|
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
|
|
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100
|
|
|
|
# 6단계: Python 패키지 업그레이드
|
|
log_step "6단계: Python 패키지 매니저 업그레이드"
|
|
pip install --upgrade pip setuptools wheel
|
|
|
|
# 7단계: Jetson 특화 ONNX Runtime GPU 설치
|
|
log_step "7단계: Jetson ONNX Runtime GPU 설치"
|
|
log_info "Jetson Xavier용 ONNX Runtime GPU 다운로드 중..."
|
|
|
|
# 기존 onnxruntime 제거
|
|
pip uninstall -y onnxruntime onnxruntime-gpu 2>/dev/null || true
|
|
|
|
# Jetson Xavier 전용 ONNX Runtime GPU 설치
|
|
ONNX_WHEEL_URL="https://nvidia.box.com/shared/static/zostg6agm00fb6t5uisw51qi6kpcuwzd.whl"
|
|
ONNX_WHEEL_FILE="onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl"
|
|
|
|
wget -O "$ONNX_WHEEL_FILE" "$ONNX_WHEEL_URL"
|
|
pip install --force-reinstall "$ONNX_WHEEL_FILE"
|
|
rm -f "$ONNX_WHEEL_FILE"
|
|
|
|
log_success "Jetson ONNX Runtime GPU 설치 완료"
|
|
|
|
# 8단계: PyTorch 설치 (Jetson 최적화)
|
|
log_step "8단계: Jetson 최적화 PyTorch 설치"
|
|
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
|
|
|
|
# 9단계: 프로젝트 의존성 설치
|
|
log_step "9단계: 프로젝트 의존성 설치"
|
|
pip install -r requirements.txt
|
|
|
|
# 10단계: numpy 버전 조정 (호환성)
|
|
log_step "10단계: 호환성 패키지 조정"
|
|
pip install numpy==1.23.5
|
|
|
|
# 11단계: 설치 검증
|
|
log_step "11단계: 설치 검증"
|
|
|
|
echo "=== Python 환경 ==="
|
|
python --version
|
|
echo "가상환경: $VIRTUAL_ENV"
|
|
|
|
echo -e "\n=== ONNX Runtime 확인 ==="
|
|
python -c "
|
|
import onnxruntime as ort
|
|
print(f'ONNX Runtime 버전: {ort.__version__}')
|
|
providers = ort.get_available_providers()
|
|
print(f'사용 가능한 providers: {providers}')
|
|
if 'CUDAExecutionProvider' in providers:
|
|
print('✅ CUDA 지원 확인됨')
|
|
if 'TensorrtExecutionProvider' in providers:
|
|
print('✅ TensorRT 지원 확인됨')
|
|
" || log_warning "ONNX Runtime 확인 실패"
|
|
|
|
echo -e "\n=== PyTorch CUDA 확인 ==="
|
|
python -c "
|
|
import torch
|
|
print(f'PyTorch 버전: {torch.__version__}')
|
|
print(f'CUDA 사용 가능: {torch.cuda.is_available()}')
|
|
if torch.cuda.is_available():
|
|
print(f'CUDA 버전: {torch.version.cuda}')
|
|
print(f'GPU 개수: {torch.cuda.device_count()}')
|
|
" || log_warning "PyTorch 확인 실패"
|
|
|
|
echo -e "\n=== Jetson 시스템 정보 ==="
|
|
tegrastats --verbose 2>/dev/null | head -1 || echo "tegrastats 정보 없음"
|
|
|
|
# 완료
|
|
echo ""
|
|
echo "======================================"
|
|
log_success "🎉 Jetson Xavier 설치 완료!"
|
|
echo "======================================"
|
|
echo ""
|
|
echo "다음 명령으로 서버를 시작하세요:"
|
|
echo " bash scripts/start_server.sh"
|
|
echo ""
|
|
echo "모니터링 대시보드:"
|
|
echo " http://localhost:8009"
|
|
echo ""
|
|
echo "API 테스트:"
|
|
echo " curl http://localhost:8008/api/v1/health"
|
|
echo ""
|