85 lines
3.5 KiB
Python
85 lines
3.5 KiB
Python
"""
|
|
Configuration settings for the inpainting server
|
|
"""
|
|
import os
|
|
import platform
|
|
from typing import Dict, Any, Optional
|
|
from pydantic_settings import BaseSettings
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
# System detection
|
|
IS_JETSON: bool = platform.machine() == "aarch64" and "tegra" in platform.uname().release.lower()
|
|
IS_X86: bool = platform.machine() in ["x86_64", "amd64"]
|
|
|
|
# Server settings
|
|
HOST: str = "0.0.0.0"
|
|
PORT: int = 8008
|
|
WORKERS: int = 1
|
|
|
|
# GPU settings (Jetson Xavier 최적화)
|
|
CUDA_DEVICE: int = 0
|
|
USE_CUDA: bool = True # CUDA 사용 여부 (Jetson에서 항상 True)
|
|
USE_FP16: bool = True # FP16 사용 여부 (Jetson 최적화)
|
|
FP16_ENABLED: bool = True # 기존 호환성
|
|
|
|
# ONNX Runtime 최적화 설정
|
|
USE_TENSORRT: bool = True # TensorRT 사용 여부 (최고 성능)
|
|
TENSORRT_FP16: bool = True # TensorRT FP16 사용
|
|
TENSORRT_WORKSPACE_SIZE: int = 2 * 1024 * 1024 * 1024 # 2GB
|
|
|
|
# Jetson specific settings
|
|
JETSON_MODE: bool = IS_JETSON
|
|
JETSON_POWER_MODE: str = "MAXN" # MAXN, 5W, 10W, 15W
|
|
JETSON_FAN_CONTROL: bool = True
|
|
JETSON_TEMP_THRESHOLD: int = 75 # Celsius
|
|
|
|
# Session pool settings (Jetson Xavier는 32GB 통합 메모리로 더 많은 세션 가능)
|
|
SIMPLE_LAMA_SESSIONS: int = 4 if IS_JETSON else 2 # Jetson: 통합 32GB vs 데스크톱: VRAM 제한
|
|
MIGAN_SESSIONS: int = 4 if IS_JETSON else 2 # Jetson이 더 많은 세션 운영 가능
|
|
REMBG_SESSIONS: int = 3 if IS_JETSON else 1 # 메모리 공유 방식의 이점 활용
|
|
|
|
# Worker settings (Jetson은 통합 메모리로 더 효율적)
|
|
MAX_WORKERS: int = 8 if IS_JETSON else 6 # Jetson: 메모리 오버헤드 적음
|
|
MIN_WORKERS: int = 4 if IS_JETSON else 2 # 통합 메모리 활용
|
|
WORKER_TIMEOUT: int = 120 # 2 minutes
|
|
|
|
# 메모리 관리 (Jetson은 32GB 통합 메모리로 여유로움)
|
|
VRAM_THRESHOLD_HIGH: float = 0.85 if IS_JETSON else 0.75 # Jetson: 32GB 통합 메모리
|
|
VRAM_THRESHOLD_LOW: float = 0.4 if IS_JETSON else 0.3 # 데스크톱: VRAM 제한
|
|
VRAM_CHECK_INTERVAL: int = 30 if IS_JETSON else 15 # Jetson은 덜 자주 체크
|
|
|
|
# Model paths
|
|
SIMPLE_LAMA_MODEL_PATH: str = "app/models/pt/big-lama.pt"
|
|
MIGAN_MODEL_PATH: str = "app/models/onnx/migan_pipeline_v2.onnx"
|
|
REMBG_MODEL_PATH: str = "app/models/onnx/birefnet-general-lite.onnx"
|
|
|
|
# MIGAN ONNX settings
|
|
MIGAN_ONNX_PATH: Optional[str] = "app/models/onnx/migan_pipeline_v2.onnx" # 커스텀 ONNX 파일 경로
|
|
MIGAN_INTRA_THREADS: int = 0
|
|
MIGAN_INTER_THREADS: int = 0
|
|
|
|
# REMBG settings (자동 다운로드 방식)
|
|
REMBG_MODEL_NAME: str = "birefnet-general-lite" # 고품질 경량 모델
|
|
LOCAL_REMBG_MODEL_PATH: Optional[str] = None # 로컬 파일 사용 안함
|
|
|
|
# Upload settings (Jetson Xavier는 32GB 메모리로 대용량 처리 가능)
|
|
MAX_FILE_SIZE: int = 100 * 1024 * 1024 if IS_JETSON else 50 * 1024 * 1024 # Jetson: 100MB, 데스크톱: 50MB
|
|
MAX_IMAGE_SIZE: int = 4096 if IS_JETSON else 3072 # Jetson: 4K, 데스크톱: 3K (VRAM 고려)
|
|
ALLOWED_EXTENSIONS: set = {".jpg", ".jpeg", ".png", ".bmp", ".tiff"}
|
|
|
|
# Monitoring
|
|
ENABLE_MONITORING: bool = True
|
|
MONITORING_PORT: int = 8888
|
|
|
|
# Jetson performance settings
|
|
JETSON_GPU_FREQ: int = 1200 # MHz
|
|
JETSON_CPU_FREQ: int = 1900 # MHz
|
|
JETSON_MEMORY_FREQ: int = 1600 # MHz
|
|
|
|
class Config:
|
|
env_file = ".env"
|
|
|
|
|
|
settings = Settings()
|