# πŸ–ΌοΈ κ³ μ„±λŠ₯ μΈνŽ˜μΈνŒ… μ„œλ²„ FastAPI와 λ”₯λŸ¬λ‹μ„ ν™œμš©ν•œ 병렬 처리 μΈνŽ˜μΈνŒ… μ„œλ²„μž…λ‹ˆλ‹€. Simple LAMA, MIGAN, REMBG λͺ¨λΈμ„ TensorRT와 CUDAλ₯Ό ν™œμš©ν•˜μ—¬ FP16 λ°©μ‹μœΌλ‘œ μ΅œμ ν™”λœ μ„œλ²„λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. **πŸš€ Jetson Xavier (ARM64) 및 x86_64 μ‹œμŠ€ν…œμ„ λͺ¨λ‘ μ§€μ›ν•©λ‹ˆλ‹€!** ## ✨ μ£Όμš” κΈ°λŠ₯ - **πŸš€ κ³ μ„±λŠ₯ 병렬 처리**: 동적 μ›Œμ»€ κ΄€λ¦¬λ‘œ 졜적의 μ„±λŠ₯ 제곡 - **🎯 닀쀑 λͺ¨λΈ 지원**: Simple LAMA, MIGAN, REMBG μΈνŽ˜μΈνŒ… λͺ¨λΈ - **⚑ GPU μ΅œμ ν™”**: TensorRT와 CUDA FP16을 ν™œμš©ν•œ λΉ λ₯Έ μΆ”λ‘  - **πŸ“Š μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§**: μ›Ή 기반 λŒ€μ‹œλ³΄λ“œλ‘œ μ„œλ²„ μƒνƒœ μ‹€μ‹œκ°„ 확인 - **πŸ”§ 동적 μŠ€μΌ€μΌλ§**: VRAM μ‚¬μš©λŸ‰μ— λ”°λ₯Έ μžλ™ μ›Œμ»€ μ‘°μ • - **πŸ›‘οΈ μ•ˆμ •μ„±**: μ„Έμ…˜ ν’€κ³Ό μ—λŸ¬ 볡ꡬ λ©”μ»€λ‹ˆμ¦˜ - **🚁 Jetson μ΅œμ ν™”**: ARM64 μ•„ν‚€ν…μ²˜ μ „μš© μ„±λŠ₯ νŠœλ‹ ## πŸ—οΈ μ•„ν‚€ν…μ²˜ ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ FastAPI β”‚ β”‚ μ›Œμ»€ λ§€λ‹ˆμ € β”‚ β”‚ μ„Έμ…˜ ν’€ β”‚ β”‚ μ—”λ“œν¬μΈνŠΈ │◄──►│ (동적 μŠ€μΌ€μΌλ§) │◄──►│ (λͺ¨λΈ 관리) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ λͺ¨λ‹ˆν„°λ§ β”‚ β”‚ GPU λͺ¨λ‹ˆν„° β”‚ β”‚ λͺ¨λΈ μΈμŠ€ν„΄μŠ€ β”‚ β”‚ λŒ€μ‹œλ³΄λ“œ β”‚ β”‚ (VRAM 좔적) β”‚ β”‚ (Simple LAMA, β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ MIGAN, REMBG) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## πŸ“‹ μš”κ΅¬μ‚¬ν•­ ### μ‹œμŠ€ν…œ μš”κ΅¬μ‚¬ν•­ #### Jetson Xavier (ARM64) - Ubuntu 18.04 이상 - Python 3.8 이상 - CUDA 11.8 - cuDNN 8 - TensorRT 8.6 - 4GB 이상 RAM ꢌμž₯ - 10GB 이상 μ €μž₯곡간 #### x86_64 μ‹œμŠ€ν…œ - Ubuntu 18.04 이상 - Python 3.8 이상 - NVIDIA GPU (GTX 1060 이상 ꢌμž₯) - CUDA 11.8 이상 - 8GB 이상 RAM ꢌμž₯ - 10GB 이상 μ €μž₯곡간 ### GPU μš”κ΅¬μ‚¬ν•­ - **Jetson Xavier**: λ‚΄μž₯ Volta GPU (8GB VRAM) - **x86**: NVIDIA GPU (4GB 이상 VRAM) ## πŸš€ μ„€μΉ˜ 및 μ‹€ν–‰ ### 1. ν”„λ‘œμ νŠΈ 클둠 및 κ°€μƒν™˜κ²½ μ„€μ • ν”„λ‘œμ νŠΈκ°€ 이미 `/home/ckh08045/work/inpaintServer`에 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. ### 2. μ˜μ‘΄μ„± μ„€μΉ˜ #### Jetson Xavier μ „μš© μ„€μΉ˜ ```bash # Jetson μ΅œμ ν™”μ™€ ν•¨κ»˜ μ„€μΉ˜ ./scripts/install_deps.sh --jetson-optimize # λ˜λŠ” κΈ°λ³Έ μ„€μΉ˜ ./scripts/install_deps.sh ``` #### x86 μ‹œμŠ€ν…œ μ„€μΉ˜ ```bash # κΈ°λ³Έ μ„€μΉ˜ ./scripts/install_deps.sh # 개발 도ꡬ 포함 ./scripts/install_deps.sh --extras ``` #### μˆ˜λ™ μ„€μΉ˜ ```bash source bin/activate pip install -r requirements.txt ``` ### 3. ν™˜κ²½ μ„€μ • ```bash # ν™˜κ²½ μ„€μ • 파일 볡사 및 μˆ˜μ • cp .env.example .env # Jetson Xavier의 경우 μžλ™μœΌλ‘œ μ΅œμ ν™”λœ 섀정이 μ μš©λ©λ‹ˆλ‹€ # ν•„μš”ν•œ 경우 .env νŒŒμΌμ—μ„œ μ„ΈλΆ€ μ„€μ • μ‘°μ • ``` ### 4. μ„œλ²„ μ‹œμž‘ #### Jetson Xavier μ΅œμ ν™” λͺ¨λ“œ ```bash # Jetson μ΅œμ ν™”μ™€ ν•¨κ»˜ μ‹œμž‘ ./scripts/start_server.sh --jetson-optimize # λ˜λŠ” κΈ°λ³Έ μ‹œμž‘ ./scripts/start_server.sh ``` #### x86 μ‹œμŠ€ν…œ ```bash # κΈ°λ³Έ λͺ¨λ“œλ‘œ μ‹œμž‘ ./scripts/start_server.sh # ν”„λ‘œλ•μ…˜ λͺ¨λ“œλ‘œ μ‹œμž‘ ./scripts/start_server.sh --production # μ›Œμ»€ 수 μ§€μ • ./scripts/start_server.sh --workers 4 # GPU λ””λ°”μ΄μŠ€ μ§€μ • ./scripts/start_server.sh --gpu 0 ``` ### 5. μ„œλ²„ μƒνƒœ 확인 ```bash # μƒνƒœ 확인 ./scripts/status.sh # 상세 정보 ./scripts/status.sh --detailed # μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ ./scripts/status.sh --watch ``` ### 6. μ„œλ²„ 쀑지 ```bash # 정상 μ’…λ£Œ ./scripts/stop_server.sh # κ°•μ œ μ’…λ£Œ ./scripts/stop_server.sh --force ``` ## 🚁 Jetson Xavier μ „μš© κΈ°λŠ₯ ### μžλ™ μ‹œμŠ€ν…œ 감지 - ARM64 μ•„ν‚€ν…μ²˜ μžλ™ 감지 - Tegra 컀널 μžλ™ 인식 - Jetson μ „μš© μ„€μ • μžλ™ 적용 ### μ„±λŠ₯ μ΅œμ ν™” - **μ „λ ₯ λͺ¨λ“œ**: MAXN λͺ¨λ“œλ‘œ 졜고 μ„±λŠ₯ - **GPU 클럭**: 1200MHz둜 μ΅œμ ν™” - **λ©”λͺ¨λ¦¬ 클럭**: 1600MHz둜 μ΅œμ ν™” - **팬 μ œμ–΄**: μ˜¨λ„ 기반 μžλ™ μ‘°μ • ### λ©”λͺ¨λ¦¬ 관리 - **VRAM μž„κ³„κ°’**: 70%/30% (x86 λŒ€λΉ„ 보수적) - **파일 크기 μ œν•œ**: 25MB (x86: 50MB) - **μ›Œμ»€ 수**: μ΅œλŒ€ 4개 (x86: μ΅œλŒ€ 8개) ### λͺ¨λ‹ˆν„°λ§ 도ꡬ - **jtop**: Jetson μ „μš© μ‹œμŠ€ν…œ λͺ¨λ‹ˆν„°λ§ - **nvpmodel**: μ „λ ₯ λͺ¨λ“œ 관리 - **μ˜¨λ„ μ„Όμ„œ**: μ‹€μ‹œκ°„ μ˜¨λ„ λͺ¨λ‹ˆν„°λ§ ## πŸ“‘ API μ—”λ“œν¬μΈνŠΈ ### μΈνŽ˜μΈνŒ… API #### Simple LAMA μΈνŽ˜μΈνŒ… ```http POST /inpaint/simple-lama Content-Type: multipart/form-data - image: 원본 이미지 파일 - mask: 마슀크 이미지 파일 (흰색 μ˜μ—­μ΄ 제거될 λΆ€λΆ„) - format: 좜λ ₯ ν˜•μ‹ (PNG/JPEG, κΈ°λ³Έκ°’: PNG) ``` #### MIGAN μΈνŽ˜μΈνŒ… ```http POST /inpaint/migan Content-Type: multipart/form-data - image: 원본 이미지 파일 - mask: 마슀크 이미지 파일 - format: 좜λ ₯ ν˜•μ‹ (PNG/JPEG, κΈ°λ³Έκ°’: PNG) ``` ### λ°°κ²½ 제거 API ```http POST /remove-background Content-Type: multipart/form-data - image: 원본 이미지 파일 - model_name: REMBG λͺ¨λΈλͺ… (u2net/u2netp/silueta, κΈ°λ³Έκ°’: u2net) - return_mask: 마슀크 λ°˜ν™˜ μ—¬λΆ€ (κΈ°λ³Έκ°’: false) - background_color: μƒˆ 배경색 (hex ν˜•μ‹, 예: #ffffff) - format: 좜λ ₯ ν˜•μ‹ (PNG/JPEG, κΈ°λ³Έκ°’: PNG) ``` ### 관리 API ```http GET /health # ν—¬μŠ€ 체크 GET /status # μ„œλ²„ μƒνƒœ GET / # API 정보 GET /docs # Swagger UI POST /scale-sessions # μ„Έμ…˜ ν’€ 크기 μ‘°μ • ``` ## πŸ“Š λͺ¨λ‹ˆν„°λ§ ### μ›Ή λŒ€μ‹œλ³΄λ“œ μ„œλ²„ μ‹œμž‘ ν›„ `http://localhost:8001`μ—μ„œ μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ λŒ€μ‹œλ³΄λ“œμ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. ### λͺ¨λ‹ˆν„°λ§ ν•­λͺ© - **μ„œλ²„ μƒνƒœ**: 메인 μ„œλ²„, λͺ¨λ‹ˆν„°λ§ μ„œλ²„ μƒνƒœ - **GPU 정보**: VRAM μ‚¬μš©λŸ‰, GPU μ‚¬μš©λ₯  - **μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€**: CPU, λ©”λͺ¨λ¦¬, λ””μŠ€ν¬ μ‚¬μš©λŸ‰ - **μ›Œμ»€ μƒνƒœ**: ν™œμ„± μ›Œμ»€ 수, μž‘μ—… 큐 μƒνƒœ - **μ„Έμ…˜ ν’€**: 각 λͺ¨λΈλ³„ μ„Έμ…˜ μ‚¬μš© ν˜„ν™© ### Jetson μ „μš© λͺ¨λ‹ˆν„°λ§ - **μ˜¨λ„ 정보**: 각 thermal zone별 μ˜¨λ„ - **클럭 주파수**: GPU, CPU, λ©”λͺ¨λ¦¬ 클럭 - **μ „λ ₯ μ†ŒλΉ„**: μ‹€μ‹œκ°„ μ „λ ₯ μ‚¬μš©λŸ‰ - **팬 속도**: PWM 팬 μ œμ–΄ μƒνƒœ ## βš™οΈ μ„€μ • ### μ„Έμ…˜ ν’€ λΉ„μœ¨ κΈ°λ³Έ μ„€μ •: Simple LAMA:MIGAN:REMBG = 2:2:1 ```python # .env νŒŒμΌμ—μ„œ μ‘°μ • κ°€λŠ₯ SIMPLE_LAMA_SESSIONS=2 MIGAN_SESSIONS=2 REMBG_SESSIONS=1 ``` ### 동적 μŠ€μΌ€μΌλ§ VRAM μ‚¬μš©λŸ‰μ— λ”°λ₯Έ μžλ™ μ›Œμ»€ μ‘°μ •: #### Jetson Xavier ```python VRAM_THRESHOLD_HIGH=0.7 # 70% μ΄μƒμ‹œ μŠ€μΌ€μΌ λ‹€μš΄ VRAM_THRESHOLD_LOW=0.3 # 30% μ΄ν•˜μ‹œ μŠ€μΌ€μΌ μ—… VRAM_CHECK_INTERVAL=20 # 20μ΄ˆλ§ˆλ‹€ 체크 ``` #### x86 μ‹œμŠ€ν…œ ```python VRAM_THRESHOLD_HIGH=0.8 # 80% μ΄μƒμ‹œ μŠ€μΌ€μΌ λ‹€μš΄ VRAM_THRESHOLD_LOW=0.4 # 40% μ΄ν•˜μ‹œ μŠ€μΌ€μΌ μ—… VRAM_CHECK_INTERVAL=30 # 30μ΄ˆλ§ˆλ‹€ 체크 ``` ## πŸ”§ 개발 λͺ¨λ“œ ```bash # 개발 λͺ¨λ“œλ‘œ μ‹€ν–‰ (μžλ™ λ¦¬λ‘œλ“œ) python main.py --dev # λ˜λŠ” uvicorn app.api.endpoints:app --reload ``` ## πŸ“ 둜그 둜그 νŒŒμΌλ“€μ€ `logs/` 디렉토리에 μ €μž₯λ©λ‹ˆλ‹€: - `main_server.log`: 메인 μ„œλ²„ 둜그 - `monitoring.log`: λͺ¨λ‹ˆν„°λ§ μ„œλ²„ 둜그 - `error.log`: μ—λŸ¬ 둜그 - `access.log`: μ•‘μ„ΈμŠ€ 둜그 ## πŸ› οΈ λ¬Έμ œν•΄κ²° ### 일반적인 문제 1. **CUDA κ΄€λ ¨ 였λ₯˜** ```bash # CUDA μ„€μΉ˜ 확인 nvidia-smi nvcc --version # PyTorch CUDA ν˜Έν™˜μ„± 확인 python -c "import torch; print(torch.cuda.is_available())" ``` 2. **λ©”λͺ¨λ¦¬ λΆ€μ‘±** ```bash # VRAM μ‚¬μš©λŸ‰ 확인 nvidia-smi # μ„Έμ…˜ 수 쀄이기 ./scripts/start_server.sh --workers 1 ``` 3. **포트 좩돌** ```bash # 포트 μ‚¬μš© 확인 lsof -i :8000 lsof -i :8001 # λ‹€λ₯Έ 포트 μ‚¬μš© python main.py --port 8080 ``` ### Jetson μ „μš© 문제 1. **μ „λ ₯ λͺ¨λ“œ 문제** ```bash # μ „λ ₯ λͺ¨λ“œ 확인 nvpmodel -q # MAXN λͺ¨λ“œλ‘œ μ„€μ • sudo nvpmodel -m 0 ``` 2. **μ˜¨λ„ 문제** ```bash # μ˜¨λ„ 확인 cat /sys/devices/virtual/thermal/thermal_zone*/temp # 팬 속도 μ‘°μ • echo 255 | sudo tee /sys/devices/pwm-fan/target_pwm ``` 3. **λ©”λͺ¨λ¦¬ 클럭 문제** ```bash # λ©”λͺ¨λ¦¬ 클럭 확인 cat /sys/kernel/debug/clk/emc/clk_rate # 클럭 μž¬μ„€μ • echo 1600000000 | sudo tee /sys/kernel/debug/clk/emc/clk_rate ``` ### 둜그 확인 ```bash # μ‹€μ‹œκ°„ 둜그 확인 tail -f logs/main_server.log # μ—λŸ¬ 둜그 확인 tail -f logs/error.log ``` ## 🀝 κΈ°μ—¬ 1. Fork the Project 2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) 3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) 4. Push to the Branch (`git push origin feature/AmazingFeature`) 5. Open a Pull Request ## πŸ“„ λΌμ΄μ„ μŠ€ 이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€ ν•˜μ— λ°°ν¬λ©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ `LICENSE` νŒŒμΌμ„ μ°Έμ‘°ν•˜μ„Έμš”. ## πŸ™ κ°μ‚¬μ˜ 말 - [FastAPI](https://fastapi.tiangolo.com/) - ν˜„λŒ€μ μΈ μ›Ή ν”„λ ˆμž„μ›Œν¬ - [PyTorch](https://pytorch.org/) - λ”₯λŸ¬λ‹ ν”„λ ˆμž„μ›Œν¬ - [Simple LAMA](https://github.com/advimman/lama) - μΈνŽ˜μΈνŒ… λͺ¨λΈ - [REMBG](https://github.com/danielgatis/rembg) - λ°°κ²½ 제거 도ꡬ - [TensorRT](https://developer.nvidia.com/tensorrt) - GPU μΆ”λ‘  μ΅œμ ν™” - [NVIDIA Jetson](https://developer.nvidia.com/embedded-computing) - μ—£μ§€ AI ν”Œλž«νΌ --- **πŸ’‘ 팁**: - **Jetson Xavier**: `--jetson-optimize` μ˜΅μ…˜μœΌλ‘œ 졜고 μ„±λŠ₯을 μ–»μœΌμ„Έμš”! - **x86 μ‹œμŠ€ν…œ**: GPU λ©”λͺ¨λ¦¬μ™€ μ›Œμ»€ 수λ₯Ό 적절히 μ‘°μ •ν•˜μ„Έμš” - λͺ¨λ‹ˆν„°λ§ λŒ€μ‹œλ³΄λ“œλ₯Ό 톡해 μ‹€μ‹œκ°„μœΌλ‘œ μ„±λŠ₯을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€! - Jetson μ‚¬μš©μžλŠ” `jtop` λͺ…λ Ήμ–΄λ‘œ μ‹œμŠ€ν…œ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”!