환경 설정 파일(.env.example)에서 하드웨어 자동 감지 및 프레임워크 정책 관련 설정을 추가하고, 모델 경로를 업데이트하였습니다. 요구 사항 파일에 새로운 패키지를 추가하고, 상태 JSON 파일의 워커 수 및 요청 통계를 수정하였습니다. 서버 로그에서 프로세스 ID 변경 사항을 반영하였습니다.
This commit is contained in:
parent
dc137030b4
commit
7ea0e44086
|
|
@ -0,0 +1,80 @@
|
||||||
|
# 인페인팅 서버 환경 설정 예시
|
||||||
|
# 실제 사용 시 .env 파일로 복사하여 사용하세요
|
||||||
|
|
||||||
|
# ===== 하드웨어/플랫폼 자동 감지 =====
|
||||||
|
# 아래 값은 자동 감지로 채워지며, 수동 강제하려면 true/false 지정
|
||||||
|
IS_JETSON=auto # auto | true | false
|
||||||
|
IS_X86=auto # auto | true | false
|
||||||
|
GPU_DEVICE=0 # 사용할 GPU 인덱스
|
||||||
|
|
||||||
|
# ===== 프레임워크 정책 (충돌 방지 핵심) =====
|
||||||
|
# TORCH_GPU_ONLY: Torch만 GPU 사용, TF/ONNX는 CPU
|
||||||
|
# ORT_GPU: ONNXRuntime GPU 사용(필요 시, TF는 CPU)
|
||||||
|
# TF_GPU_ONLY: TensorFlow만 GPU (권장하지 않음: 토치와 섞이면 충돌↑)
|
||||||
|
FRAMEWORK_POLICY=TORCH_GPU_ONLY # TORCH_GPU_ONLY | ORT_GPU | TF_GPU_ONLY
|
||||||
|
|
||||||
|
# 개별 토글(정책과 충돌 나면 부트에서 자동 보정)
|
||||||
|
TF_ENABLED=false
|
||||||
|
ORT_ENABLED=true
|
||||||
|
FP16_ENABLED=true
|
||||||
|
|
||||||
|
# 서버 설정
|
||||||
|
HOST=0.0.0.0
|
||||||
|
PORT=8008
|
||||||
|
WORKERS=1 # GPU 서버는 프로세스 1개 권장, 내부 비동기로 동시처리
|
||||||
|
|
||||||
|
# GPU 설정
|
||||||
|
CUDA_DEVICE=0
|
||||||
|
FP16_ENABLED=true
|
||||||
|
|
||||||
|
# Jetson 전용 설정
|
||||||
|
JETSON_MODE=false # 자동 감지됨
|
||||||
|
JETSON_POWER_MODE=MAXN # MAXN, 5W, 10W, 15W
|
||||||
|
JETSON_FAN_CONTROL=true
|
||||||
|
JETSON_TEMP_THRESHOLD=75 # Celsius
|
||||||
|
JETSON_GPU_FREQ=1200 # MHz
|
||||||
|
JETSON_CPU_FREQ=1900 # MHz
|
||||||
|
JETSON_MEMORY_FREQ=1600 # MHz
|
||||||
|
|
||||||
|
# 세션 풀 설정 (시스템별 자동 조정)
|
||||||
|
SIMPLE_LAMA_SESSIONS=4
|
||||||
|
MIGAN_SESSIONS=4
|
||||||
|
REMBG_SESSIONS=1
|
||||||
|
|
||||||
|
# 워커 설정 (Jetson은 더 적은 워커 사용)
|
||||||
|
MAX_WORKERS=8 # Jetson: 4, x86: 8
|
||||||
|
MIN_WORKERS=2 # Jetson: 1, x86: 2
|
||||||
|
WORKER_TIMEOUT=300
|
||||||
|
|
||||||
|
# VRAM 관리 (Jetson은 더 보수적인 설정)
|
||||||
|
VRAM_THRESHOLD_HIGH=0.8 # Jetson: 70%, x86: 80%
|
||||||
|
VRAM_THRESHOLD_LOW=0.3 # Jetson: 30%, x86: 40%
|
||||||
|
VRAM_CHECK_INTERVAL=30 # Jetson: 20초, x86: 30초
|
||||||
|
|
||||||
|
# 모델 경로
|
||||||
|
SIMPLE_LAMA_MODEL_PATH=app/models/onnx/lama_fp32.onnx
|
||||||
|
MIGAN_MODEL_PATH=app/models/onnx/migan_pipeline_v2.onnx
|
||||||
|
REMBG_MODEL_PATH=app/models/onnx/BriaRMBG1.4_model_fp16.onnx
|
||||||
|
|
||||||
|
# 업로드 설정 (Jetson은 더 작은 파일 크기)
|
||||||
|
MAX_FILE_SIZE=26214400 # Jetson: 25MB, x86: 50MB
|
||||||
|
ALLOWED_EXTENSIONS=.jpg,.jpeg,.png,.bmp,.tiff,.webp
|
||||||
|
# ALLOWED_EXTENSIONS=[".jpg",".jpeg",".png",".bmp",".tiff",".webp"]
|
||||||
|
|
||||||
|
# 모니터링
|
||||||
|
ENABLE_MONITORING=true
|
||||||
|
MONITORING_PORT=8080
|
||||||
|
|
||||||
|
# Jetson 최적화 설정
|
||||||
|
JETSON_OPTIMIZE_ON_STARTUP=true
|
||||||
|
JETSON_AUTO_FAN_CONTROL=true
|
||||||
|
JETSON_POWER_SAVING=false
|
||||||
|
|
||||||
|
# ===== TensorRT/ONNX EP =====
|
||||||
|
TENSORRT_ENABLED=false # 실제 TensorRT 엔진/EP를 쓸 때만 true
|
||||||
|
ORT_PROVIDERS=CUDAExecutionProvider,CPUExecutionProvider
|
||||||
|
# Jetson에서 onnxruntime-gpu 특수 빌드 사용 시: TensorrtExecutionProvider,CUDAExecutionProvider,CPUExecutionProvider
|
||||||
|
|
||||||
|
# ===== 로깅 =====
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
LOG_DIR=logs
|
||||||
42
.env.example
42
.env.example
|
|
@ -1,13 +1,27 @@
|
||||||
# 인페인팅 서버 환경 설정 예시
|
# 인페인팅 서버 환경 설정 예시
|
||||||
# 실제 사용 시 .env 파일로 복사하여 사용하세요
|
# 실제 사용 시 .env 파일로 복사하여 사용하세요
|
||||||
|
|
||||||
# 시스템 감지 (자동 설정)
|
# ===== 하드웨어/플랫폼 자동 감지 =====
|
||||||
# IS_JETSON=true # Jetson Xavier 감지 시 자동 설정
|
# 아래 값은 자동 감지로 채워지며, 수동 강제하려면 true/false 지정
|
||||||
# IS_X86=true # x86 시스템 감지 시 자동 설정
|
IS_JETSON=auto # auto | true | false
|
||||||
|
IS_X86=auto # auto | true | false
|
||||||
|
GPU_DEVICE=0 # 사용할 GPU 인덱스
|
||||||
|
|
||||||
|
# ===== 프레임워크 정책 (충돌 방지 핵심) =====
|
||||||
|
# TORCH_GPU_ONLY: Torch만 GPU 사용, TF/ONNX는 CPU
|
||||||
|
# ORT_GPU: ONNXRuntime GPU 사용(필요 시, TF는 CPU)
|
||||||
|
# TF_GPU_ONLY: TensorFlow만 GPU (권장하지 않음: 토치와 섞이면 충돌↑)
|
||||||
|
FRAMEWORK_POLICY=TORCH_GPU_ONLY # TORCH_GPU_ONLY | ORT_GPU | TF_GPU_ONLY
|
||||||
|
|
||||||
|
# 개별 토글(정책과 충돌 나면 부트에서 자동 보정)
|
||||||
|
TF_ENABLED=false
|
||||||
|
ORT_ENABLED=true
|
||||||
|
FP16_ENABLED=true
|
||||||
|
|
||||||
|
|
||||||
# 서버 설정
|
# 서버 설정
|
||||||
HOST=0.0.0.0
|
HOST=0.0.0.0
|
||||||
PORT=8000
|
PORT=8008
|
||||||
WORKERS=1
|
WORKERS=1
|
||||||
|
|
||||||
# GPU 설정
|
# GPU 설정
|
||||||
|
|
@ -39,19 +53,29 @@ VRAM_THRESHOLD_LOW=0.3 # Jetson: 30%, x86: 40%
|
||||||
VRAM_CHECK_INTERVAL=20 # Jetson: 20초, x86: 30초
|
VRAM_CHECK_INTERVAL=20 # Jetson: 20초, x86: 30초
|
||||||
|
|
||||||
# 모델 경로
|
# 모델 경로
|
||||||
SIMPLE_LAMA_MODEL_PATH=models/simple-lama
|
SIMPLE_LAMA_MODEL_PATH=app/models/onnx/lama_fp32.onnx
|
||||||
MIGAN_MODEL_PATH=models/migan
|
MIGAN_MODEL_PATH=app/models/onnx/migan_pipeline_v2.onnx
|
||||||
REMBG_MODEL_PATH=models/rembg
|
REMBG_MODEL_PATH=app/models/onnx/BriaRMBG1.4_model_fp16.onnx
|
||||||
|
|
||||||
# 업로드 설정 (Jetson은 더 작은 파일 크기)
|
# 업로드 설정 (Jetson은 더 작은 파일 크기)
|
||||||
MAX_FILE_SIZE=26214400 # Jetson: 25MB, x86: 50MB
|
MAX_FILE_SIZE=26214400 # Jetson: 25MB, x86: 50MB
|
||||||
ALLOWED_EXTENSIONS=.jpg,.jpeg,.png,.bmp,.tiff
|
# ALLOWED_EXTENSIONS=.jpg,.jpeg,.png,.bmp,.tiff,.webp
|
||||||
|
ALLOWED_EXTENSIONS=[".jpg",".jpeg",".png",".bmp",".tiff",".webp"]
|
||||||
|
|
||||||
# 모니터링
|
# 모니터링
|
||||||
ENABLE_MONITORING=true
|
ENABLE_MONITORING=true
|
||||||
MONITORING_PORT=8001
|
MONITORING_PORT=8080
|
||||||
|
|
||||||
# Jetson 최적화 설정
|
# Jetson 최적화 설정
|
||||||
JETSON_OPTIMIZE_ON_STARTUP=true
|
JETSON_OPTIMIZE_ON_STARTUP=true
|
||||||
JETSON_AUTO_FAN_CONTROL=true
|
JETSON_AUTO_FAN_CONTROL=true
|
||||||
JETSON_POWER_SAVING=false
|
JETSON_POWER_SAVING=false
|
||||||
|
|
||||||
|
# ===== TensorRT/ONNX EP =====
|
||||||
|
TENSORRT_ENABLED=false # 실제 TensorRT 엔진/EP를 쓸 때만 true
|
||||||
|
ORT_PROVIDERS=CUDAExecutionProvider,CPUExecutionProvider
|
||||||
|
# Jetson에서 onnxruntime-gpu 특수 빌드 사용 시: TensorrtExecutionProvider,CUDAExecutionProvider,CPUExecutionProvider
|
||||||
|
|
||||||
|
# ===== 로깅 =====
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
LOG_DIR=logs
|
||||||
|
|
|
||||||
2
=0.0.9
2
=0.0.9
|
|
@ -1,2 +0,0 @@
|
||||||
Defaulting to user installation because normal site-packages is not writeable
|
|
||||||
Requirement already satisfied: python-multipart in /home/ckh08045/.local/lib/python3.8/site-packages (0.0.6)
|
|
||||||
|
|
@ -1,131 +1,302 @@
|
||||||
|
# app/core/config.py
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
"""
|
"""
|
||||||
Configuration settings for the inpainting server
|
Configuration settings for the inpainting server
|
||||||
|
- Jetson/x86 자동 감지
|
||||||
|
- 프레임워크 충돌 방지 정책 (기본: TORCH_GPU_ONLY)
|
||||||
|
- VRAM/플랫폼 기반 자동 튜닝 및 유효성 검사
|
||||||
|
- 환경변수 가드/스모크 테스트 훅 제공
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
import json
|
||||||
import platform
|
import platform
|
||||||
from typing import Dict, Any, Optional, ClassVar
|
|
||||||
from pydantic_settings import BaseSettings
|
|
||||||
from pathlib import Path
|
|
||||||
import logging
|
import logging
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Optional, ClassVar
|
||||||
|
|
||||||
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||||
|
from pydantic import Field, AliasChoices
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Settings(BaseSettings):
|
class Settings(BaseSettings):
|
||||||
# System detection
|
# pydantic v2 설정: .env 읽기 + 여분 키 무시
|
||||||
IS_JETSON: ClassVar[bool] = "aarch64" in platform.machine().lower() and "tegra" in platform.release().lower()
|
model_config = SettingsConfigDict(
|
||||||
PROJECT_ROOT: ClassVar[str] = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
env_file=".env",
|
||||||
|
env_file_encoding="utf-8",
|
||||||
|
extra="ignore", # .env에 있는 미정의 키는 무시
|
||||||
|
case_sensitive=True,
|
||||||
|
)
|
||||||
|
|
||||||
# --- 동적 세션 풀 및 메모리 관리 설정 ---
|
# =========================
|
||||||
# 각 모델별 최소/최대 세션 수. 서버 시작 시 min 만큼 생성되고, VRAM 여유 시 max까지 확장됨.
|
# 플랫폼/프로젝트 경로
|
||||||
SIMPLE_LAMA_MIN_SESSIONS: int = 2 if IS_JETSON else 2
|
# =========================
|
||||||
SIMPLE_LAMA_MAX_SESSIONS: int = 4 if IS_JETSON else 4
|
IS_JETSON: ClassVar[bool] = (
|
||||||
|
"aarch64" in platform.machine().lower()
|
||||||
|
and "tegra" in platform.release().lower()
|
||||||
|
)
|
||||||
|
PROJECT_ROOT: ClassVar[str] = os.path.dirname(
|
||||||
|
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
)
|
||||||
|
|
||||||
MIGAN_MIN_SESSIONS: int = 2 if IS_JETSON else 1 # x86에서는 Migan을 기본으로 로드하지 않음
|
# =========================
|
||||||
MIGAN_MAX_SESSIONS: int = 4 if IS_JETSON else 4
|
# 앱 기본
|
||||||
|
# =========================
|
||||||
REMBG_MIN_SESSIONS: int = 2 if IS_JETSON else 1
|
|
||||||
REMBG_MAX_SESSIONS: int = 4 if IS_JETSON else 3
|
|
||||||
|
|
||||||
# 세션 추가 생성 VRAM 임계값 (%). 남은 VRAM이 이 값보다 커야 새 세션 생성.
|
|
||||||
# 예: 12GB VRAM에 0.3이면, 3.6GB 이상 여유가 있어야 함.
|
|
||||||
SESSION_VRAM_THRESHOLD: float = 0.3 if IS_JETSON else 0.3 # Jetson에서는 통합 메모리이므로 좀 더 여유롭게 설정
|
|
||||||
|
|
||||||
# 유휴 세션 자동 제거 시간 (초). 0이면 비활성화.
|
|
||||||
SESSION_IDLE_TIMEOUT: int = 1800 # 30분
|
|
||||||
|
|
||||||
# --- 마이크로 배치 설정 ---
|
|
||||||
USE_MICRO_BATCHING: bool = True # SimpleLama에 대한 배치 처리 활성화
|
|
||||||
MICRO_BATCH_SIZE: int = 4 # 최대 배치 크기
|
|
||||||
MICRO_BATCH_TIMEOUT_MS: int = 100 # 배치 생성을 위한 최대 대기 시간 (밀리초)
|
|
||||||
|
|
||||||
# --- 서버 환경 설정 (클래스 내부로 이동) ---
|
|
||||||
APP_VERSION: str = "3.0.0-dynamic-pool"
|
APP_VERSION: str = "3.0.0-dynamic-pool"
|
||||||
APP_NAME: str = "Inpaint & RemoveBG Server"
|
APP_NAME: str = "Inpaint & RemoveBG Server"
|
||||||
API_PREFIX: str = "/api/v1"
|
API_PREFIX: str = "/api/v1"
|
||||||
|
|
||||||
HOST: str = "0.0.0.0"
|
HOST: str = "0.0.0.0"
|
||||||
PORT: int = 8008
|
PORT: int = 8008
|
||||||
WORKERS: int = 1 # 개발 모드에서는 1로 고정, 프로덕션에서는 gunicorn으로 관리
|
WORKERS: int = 1 # GPU 서버는 프로세스 1 권장(내부 동시성/세션풀 활용)
|
||||||
|
|
||||||
# GPU settings (Jetson Xavier 최적화)
|
# =========================
|
||||||
CUDA_DEVICE: int = 0
|
# GPU/프레임워크 정책
|
||||||
USE_CUDA: bool = True # CUDA 사용 여부 (Jetson에서 항상 True)
|
# =========================
|
||||||
USE_FP16: bool = True # FP16 사용 여부 (Jetson 최적화)
|
# NOTE: .env의 GPU_DEVICE도 받아들이도록 별칭 설정
|
||||||
FP16_ENABLED: bool = True # 기존 호환성
|
CUDA_DEVICE: int = Field(0, validation_alias=AliasChoices("CUDA_DEVICE", "GPU_DEVICE"))
|
||||||
|
USE_CUDA: bool = True
|
||||||
|
USE_FP16: bool = True
|
||||||
|
FP16_ENABLED: bool = True # 이전 호환
|
||||||
|
|
||||||
# ONNX Runtime 최적화 설정
|
# 프레임워크 사용 정책:
|
||||||
USE_TENSORRT: bool = True # TensorRT 사용 여부 (최고 성능)
|
# - TORCH_GPU_ONLY: Torch만 GPU, TF/ONNX는 CPU
|
||||||
TENSORRT_FP16: bool = True # TensorRT FP16 사용
|
# - ORT_GPU: ONNXRuntime GPU, TF는 CPU
|
||||||
|
# - TF_GPU_ONLY: TF만 GPU(권장 X; Torch와 혼용 시 충돌↑)
|
||||||
|
FRAMEWORK_POLICY: str = "TORCH_GPU_ONLY"
|
||||||
|
|
||||||
|
# ONNX Runtime / TensorRT / TensorFlow
|
||||||
|
ORT_ENABLED: bool = True
|
||||||
|
ORT_PROVIDERS: str = "CPUExecutionProvider" # 기본은 CPU EP (정책에 따라 변경)
|
||||||
|
USE_TENSORRT: bool = False # 내부 사용 플래그
|
||||||
|
TENSORRT_FP16: bool = True
|
||||||
TENSORRT_WORKSPACE_SIZE: int = 2 * 1024 * 1024 * 1024 # 2GB
|
TENSORRT_WORKSPACE_SIZE: int = 2 * 1024 * 1024 * 1024 # 2GB
|
||||||
|
TENSORRT_ENABLED: Optional[bool] = None # .env 호환용 (명시되면 USE_TENSORRT와 동기화)
|
||||||
|
TF_ENABLED: bool = False # 정책에서 최종 보정
|
||||||
|
|
||||||
# Jetson specific settings
|
# =========================
|
||||||
|
# Jetson 설정
|
||||||
|
# =========================
|
||||||
JETSON_MODE: bool = IS_JETSON
|
JETSON_MODE: bool = IS_JETSON
|
||||||
JETSON_POWER_MODE: str = "MAXN" # MAXN, 5W, 10W, 15W
|
JETSON_POWER_MODE: str = "MAXN" # MAXN, 5W, 10W, 15W
|
||||||
JETSON_FAN_CONTROL: bool = True
|
JETSON_FAN_CONTROL: bool = True
|
||||||
JETSON_TEMP_THRESHOLD: int = 75 # Celsius
|
JETSON_TEMP_THRESHOLD: int = 75 # Celsius
|
||||||
|
JETSON_GPU_FREQ: int = 1200 # MHz
|
||||||
|
JETSON_CPU_FREQ: int = 1900 # MHz
|
||||||
|
JETSON_MEMORY_FREQ: int = 1600 # MHz
|
||||||
|
|
||||||
# Session pool settings (Jetson Xavier는 32GB 통합 메모리로 더 많은 세션 가능)
|
# =========================
|
||||||
SIMPLE_LAMA_SESSIONS: int = 4 if IS_JETSON else 4 # Jetson: 통합 32GB vs 데스크톱: VRAM 제한
|
# 동적 세션 풀/메모리
|
||||||
MIGAN_SESSIONS: int = 4 if IS_JETSON else 4 # Jetson이 더 많은 세션 운영 가능
|
# =========================
|
||||||
REMBG_SESSIONS: int = 3 if IS_JETSON else 2 # 메모리 공유 방식의 이점 활용
|
SIMPLE_LAMA_MIN_SESSIONS: int = 2
|
||||||
|
SIMPLE_LAMA_MAX_SESSIONS: int = 4
|
||||||
|
|
||||||
# Worker settings (Jetson은 통합 메모리로 더 효율적)
|
# x86에서는 MIGAN 미로딩(지연 로딩) 기본 → MIN=0
|
||||||
MAX_WORKERS: int = 10 if IS_JETSON else 8
|
MIGAN_MIN_SESSIONS: int = 2 if IS_JETSON else 1
|
||||||
MIN_WORKERS: int = 10 if IS_JETSON else 4
|
MIGAN_MAX_SESSIONS: int = 4
|
||||||
WORKER_TIMEOUT: int = 120 # 2 minutes
|
|
||||||
|
|
||||||
# 사용할 REMBG 모델 설정: "briaai/RMBG-1.4" 또는 onnx 파일 경로
|
REMBG_MIN_SESSIONS: int = 2 if IS_JETSON else 1
|
||||||
REMBG_MODEL: str = "briaaiRMBG-1.4"
|
REMBG_MAX_SESSIONS: int = 4 if IS_JETSON else 3
|
||||||
|
|
||||||
# 메모리 관리 (Jetson은 32GB 통합 메모리로 여유로움)
|
# 여유 VRAM 비율(남은 VRAM이 이 값보다 커야 세션 추가)
|
||||||
VRAM_THRESHOLD_HIGH: float = 0.85 if IS_JETSON else 0.80 # 워커 추가 생성 중단
|
SESSION_VRAM_THRESHOLD: float = 0.30
|
||||||
VRAM_THRESHOLD_LOW: float = 0.4 if IS_JETSON else 0.40 # 워커 제거 시작
|
SESSION_IDLE_TIMEOUT: int = 1800 # 초 (0이면 비활성)
|
||||||
VRAM_CHECK_INTERVAL: int = 30 if IS_JETSON else 15 # Jetson은 덜 자주 체크
|
|
||||||
|
|
||||||
# Model paths
|
# 마이크로 배치(SimpleLAMA)
|
||||||
|
USE_MICRO_BATCHING: bool = True
|
||||||
|
MICRO_BATCH_SIZE: int = 4
|
||||||
|
MICRO_BATCH_TIMEOUT_MS: int = 100
|
||||||
|
|
||||||
|
# 사전 확정 세션(플랫폼 감안 기본치)
|
||||||
|
SIMPLE_LAMA_SESSIONS: int = 4
|
||||||
|
MIGAN_SESSIONS: int = 4
|
||||||
|
REMBG_SESSIONS: int = 3 if IS_JETSON else 2
|
||||||
|
|
||||||
|
# 워커(내부 큐/스레드 워커, 프로세스는 WORKERS)
|
||||||
|
MAX_WORKERS: int = 4 if IS_JETSON else 8
|
||||||
|
MIN_WORKERS: int = 1 if IS_JETSON else 4
|
||||||
|
WORKER_TIMEOUT: int = 120
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# 메모리/VRAM 관리
|
||||||
|
# =========================
|
||||||
|
VRAM_THRESHOLD_HIGH: float = 0.70 if IS_JETSON else 0.80
|
||||||
|
VRAM_THRESHOLD_LOW: float = 0.30 if IS_JETSON else 0.40
|
||||||
|
VRAM_CHECK_INTERVAL: int = 20 if IS_JETSON else 15 # 초
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# 모델/경로
|
||||||
|
# =========================
|
||||||
SIMPLE_LAMA_MODEL_PATH: str = "app/models/pt/big-lama.pt"
|
SIMPLE_LAMA_MODEL_PATH: str = "app/models/pt/big-lama.pt"
|
||||||
MIGAN_MODEL_PATH: str = "app/models/onnx/migan_pipeline_v2.onnx"
|
MIGAN_MODEL_PATH: str = "app/models/onnx/migan_pipeline_v2.onnx"
|
||||||
REMBG_MODEL_PATH: str = "app/models/onnx/BriaRMBG1.4_model_fp16.onnx"
|
REMBG_MODEL_PATH: str = "app/models/onnx/BriaRMBG1.4_model_fp16.onnx"
|
||||||
|
|
||||||
|
# MIGAN ONNX
|
||||||
# MIGAN ONNX settings
|
MIGAN_ONNX_PATH: Optional[str] = "app/models/onnx/migan_pipeline_v2.onnx"
|
||||||
MIGAN_ONNX_PATH: Optional[str] = "app/models/onnx/migan_pipeline_v2.onnx" # 커스텀 ONNX 파일 경로
|
|
||||||
MIGAN_INTRA_THREADS: int = 0
|
MIGAN_INTRA_THREADS: int = 0
|
||||||
MIGAN_INTER_THREADS: int = 0
|
MIGAN_INTER_THREADS: int = 0
|
||||||
|
|
||||||
# REMBG settings (자동 다운로드 방식)
|
# REMBG (자동 다운로드)
|
||||||
REMBG_MODEL_NAME: str = "briaai/RMBG-1.4" # BriaAI RMBG 1.4 모델
|
REMBG_MODEL_NAME: str = "briaai/RMBG-1.4"
|
||||||
LOCAL_REMBG_MODEL_PATH: Optional[str] = None # 로컬 파일 사용 안함
|
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"}
|
MAX_FILE_SIZE: int = (100 * 1024 * 1024) if IS_JETSON else (50 * 1024 * 1024)
|
||||||
|
MAX_IMAGE_SIZE: int = 4096 if IS_JETSON else 3072
|
||||||
|
# ALLOWED_EXTENSIONS는 env에서 문자열로 받고 내부 파싱
|
||||||
|
ALLOWED_EXTENSIONS_RAW: str = Field(
|
||||||
|
".jpg,.jpeg,.png,.bmp,.tiff,.webp",
|
||||||
|
validation_alias=AliasChoices("ALLOWED_EXTENSIONS", "ALLOWED_EXTENSIONS_RAW"),
|
||||||
|
)
|
||||||
|
|
||||||
# Monitoring
|
@property
|
||||||
|
def ALLOWED_EXTENSIONS(self) -> set[str]:
|
||||||
|
"""
|
||||||
|
.env에서 다음 형식을 모두 허용:
|
||||||
|
1) JSON 리스트: [".png",".jpg"]
|
||||||
|
2) 콤마 문자열: .png,.jpg,.webp
|
||||||
|
공백/중복은 자동 정리
|
||||||
|
"""
|
||||||
|
s = (self.ALLOWED_EXTENSIONS_RAW or "").strip()
|
||||||
|
if not s:
|
||||||
|
return {".jpg", ".jpeg", ".png", ".bmp", ".tiff"}
|
||||||
|
# JSON 리스트 우선
|
||||||
|
try:
|
||||||
|
data = json.loads(s)
|
||||||
|
if isinstance(data, (list, tuple, set)):
|
||||||
|
return {str(x).strip() for x in data if str(x).strip()}
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
# 콤마 문자열
|
||||||
|
return {p.strip() for p in s.split(",") if p.strip()}
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# Jetson 부가 토글 (.env 호환)
|
||||||
|
# =========================
|
||||||
|
JETSON_OPTIMIZE_ON_STARTUP: bool = False
|
||||||
|
JETSON_AUTO_FAN_CONTROL: bool = False
|
||||||
|
JETSON_POWER_SAVING: bool = False
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# 모니터링/알림/로깅
|
||||||
|
# =========================
|
||||||
ENABLE_MONITORING: bool = True
|
ENABLE_MONITORING: bool = True
|
||||||
MONITORING_PORT: int = 8888
|
MONITORING_PORT: int = 8888
|
||||||
|
|
||||||
# Discord 웹훅 알림 설정
|
|
||||||
DISCORD_WEBHOOK_URL: Optional[str] = None
|
DISCORD_WEBHOOK_URL: Optional[str] = None
|
||||||
|
LOG_LEVEL: str = "INFO"
|
||||||
|
LOG_DIR: str = "logs"
|
||||||
|
|
||||||
# Jetson performance settings
|
# -------------------------
|
||||||
JETSON_GPU_FREQ: int = 1200 # MHz
|
# 런타임 보정/검증
|
||||||
JETSON_CPU_FREQ: int = 1900 # MHz
|
# -------------------------
|
||||||
JETSON_MEMORY_FREQ: int = 1600 # MHz
|
def finalize(self) -> "Settings":
|
||||||
|
"""
|
||||||
|
- 정책 기반 프레임워크 토글/EP 보정
|
||||||
|
- 세션 min/max/고정값 일관성 보정
|
||||||
|
- x86/Jetson별 기본값 자동 조정
|
||||||
|
- 경계/오타/모순값 사전 차단
|
||||||
|
"""
|
||||||
|
# 0) policy 정상화 + TF 기본값
|
||||||
|
policy = (self.FRAMEWORK_POLICY or "TORCH_GPU_ONLY").upper()
|
||||||
|
if policy not in {"TORCH_GPU_ONLY", "ORT_GPU", "TF_GPU_ONLY"}:
|
||||||
|
logger.warning(f"알 수 없는 FRAMEWORK_POLICY='{self.FRAMEWORK_POLICY}', TORCH_GPU_ONLY로 강제")
|
||||||
|
policy = "TORCH_GPU_ONLY"
|
||||||
|
self.FRAMEWORK_POLICY = policy
|
||||||
|
self.TF_ENABLED = (policy == "TF_GPU_ONLY")
|
||||||
|
|
||||||
class Config:
|
# 1) .env의 TENSORRT_ENABLED가 명시되면 내부 USE_TENSORRT와 동기화
|
||||||
env_file = ".env"
|
if self.TENSORRT_ENABLED is not None:
|
||||||
env_file_encoding = 'utf-8'
|
self.USE_TENSORRT = bool(self.TENSORRT_ENABLED)
|
||||||
protected_namespaces = ()
|
|
||||||
|
|
||||||
settings = Settings()
|
# 2) 정책별 기본 EP/TF/ORT/TPU 정리
|
||||||
|
if policy == "TORCH_GPU_ONLY":
|
||||||
|
self.ORT_ENABLED = True
|
||||||
|
self.ORT_PROVIDERS = "CPUExecutionProvider"
|
||||||
|
self.USE_TENSORRT = False
|
||||||
|
elif policy == "ORT_GPU":
|
||||||
|
self.ORT_ENABLED = True
|
||||||
|
if self.ORT_PROVIDERS.strip() in {"", "CPUExecutionProvider"}:
|
||||||
|
# x86 기본 CUDA EP, Jetson 특수 빌드면 TensorrtExecutionProvider를 직접 넣어도 됨
|
||||||
|
self.ORT_PROVIDERS = "CUDAExecutionProvider,CPUExecutionProvider"
|
||||||
|
elif policy == "TF_GPU_ONLY":
|
||||||
|
self.ORT_ENABLED = False
|
||||||
|
# TF-TRT 경로를 따로 준비하지 않았다면 False 유지
|
||||||
|
self.USE_TENSORRT = False
|
||||||
|
|
||||||
# 파일에서 웹훅 URL 로드 (환경 변수보다 우선순위 낮음)
|
# 3) 세션 min/max 일관성 보정
|
||||||
|
def fix_min_max(name_min, name_max):
|
||||||
|
mn = getattr(self, name_min)
|
||||||
|
mx = getattr(self, name_max)
|
||||||
|
if mn < 0:
|
||||||
|
logger.warning(f"{name_min} < 0 → 0으로 보정")
|
||||||
|
mn = 0
|
||||||
|
if mx < mn:
|
||||||
|
logger.warning(f"{name_max} < {name_min} → {name_min}로 보정")
|
||||||
|
mx = mn
|
||||||
|
setattr(self, name_min, mn)
|
||||||
|
setattr(self, name_max, mx)
|
||||||
|
|
||||||
|
fix_min_max("SIMPLE_LAMA_MIN_SESSIONS", "SIMPLE_LAMA_MAX_SESSIONS")
|
||||||
|
fix_min_max("MIGAN_MIN_SESSIONS", "MIGAN_MAX_SESSIONS")
|
||||||
|
fix_min_max("REMBG_MIN_SESSIONS", "REMBG_MAX_SESSIONS")
|
||||||
|
|
||||||
|
# x86에서 MIGAN 지연 로딩 기본화
|
||||||
|
if not self.IS_JETSON and self.MIGAN_MIN_SESSIONS == 0 and self.MIGAN_SESSIONS > 0:
|
||||||
|
logger.info("x86에서 MIGAN_MIN_SESSIONS=0 → MIGAN_SESSIONS=0(지연 로딩)")
|
||||||
|
self.MIGAN_SESSIONS = 0
|
||||||
|
|
||||||
|
# 4) VRAM 임계/체크 주기 보정
|
||||||
|
if not (0.0 < self.VRAM_THRESHOLD_LOW < self.VRAM_THRESHOLD_HIGH < 0.99):
|
||||||
|
logger.warning(
|
||||||
|
f"VRAM 임계값 비정상(HIGH={self.VRAM_THRESHOLD_HIGH}, LOW={self.VRAM_THRESHOLD_LOW}) → 플랫폼 기본으로 보정"
|
||||||
|
)
|
||||||
|
if self.IS_JETSON:
|
||||||
|
self.VRAM_THRESHOLD_HIGH, self.VRAM_THRESHOLD_LOW = 0.70, 0.30
|
||||||
|
self.VRAM_CHECK_INTERVAL = 20
|
||||||
|
else:
|
||||||
|
self.VRAM_THRESHOLD_HIGH, self.VRAM_THRESHOLD_LOW = 0.80, 0.40
|
||||||
|
self.VRAM_CHECK_INTERVAL = 15
|
||||||
|
|
||||||
|
# 5) 파일/이미지 제한 sanity check
|
||||||
|
if self.MAX_FILE_SIZE <= 0:
|
||||||
|
self.MAX_FILE_SIZE = (100 * 1024 * 1024) if self.IS_JETSON else (50 * 1024 * 1024)
|
||||||
|
if self.MAX_IMAGE_SIZE <= 0:
|
||||||
|
self.MAX_IMAGE_SIZE = 4096 if self.IS_JETSON else 3072
|
||||||
|
|
||||||
|
# 6) REMBG 모델 문자열 교정
|
||||||
|
if self.REMBG_MODEL_NAME.replace(" ", "") in {"briaaiRMBG-1.4", "briaai\\RMBG-1.4"}:
|
||||||
|
self.REMBG_MODEL_NAME = "briaai/RMBG-1.4"
|
||||||
|
|
||||||
|
# 7) 로그 안내
|
||||||
|
logger.info(
|
||||||
|
f"플랫폼: {'Jetson' if self.IS_JETSON else 'x86_64'}, 정책: {self.FRAMEWORK_POLICY}, "
|
||||||
|
f"ORT_PROVIDERS: {self.ORT_PROVIDERS}, TF_ENABLED: {self.TF_ENABLED}"
|
||||||
|
)
|
||||||
|
logger.info(
|
||||||
|
f"세션(MIN~MAX/boot): "
|
||||||
|
f"LAMA {self.SIMPLE_LAMA_MIN_SESSIONS}~{self.SIMPLE_LAMA_MAX_SESSIONS}/{self.SIMPLE_LAMA_SESSIONS}, "
|
||||||
|
f"MIGAN {self.MIGAN_MIN_SESSIONS}~{self.MIGAN_MAX_SESSIONS}/{self.MIGAN_SESSIONS}, "
|
||||||
|
f"REMBG {self.REMBG_MIN_SESSIONS}~{self.REMBG_MAX_SESSIONS}/{self.REMBG_SESSIONS}"
|
||||||
|
)
|
||||||
|
logger.info(
|
||||||
|
f"VRAM 임계: HIGH={self.VRAM_THRESHOLD_HIGH:.2f}, LOW={self.VRAM_THRESHOLD_LOW:.2f}, "
|
||||||
|
f"CHECK_INTERVAL={self.VRAM_CHECK_INTERVAL}s"
|
||||||
|
)
|
||||||
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
# -------------------------
|
||||||
|
# 전역 설정 인스턴스
|
||||||
|
# -------------------------
|
||||||
|
settings = Settings().finalize()
|
||||||
|
|
||||||
|
# 파일에서 웹훅 URL 로드(환경 변수보다 우선순위 낮음)
|
||||||
if not settings.DISCORD_WEBHOOK_URL:
|
if not settings.DISCORD_WEBHOOK_URL:
|
||||||
try:
|
try:
|
||||||
webhook_file = Path(settings.PROJECT_ROOT) / "webhook_url.txt"
|
webhook_file = Path(Settings.PROJECT_ROOT) / "webhook_url.txt"
|
||||||
if webhook_file.exists():
|
if webhook_file.exists():
|
||||||
url = webhook_file.read_text().strip()
|
url = webhook_file.read_text().strip()
|
||||||
if url:
|
if url:
|
||||||
|
|
@ -133,3 +304,65 @@ if not settings.DISCORD_WEBHOOK_URL:
|
||||||
logger.info(f"파일에서 Discord 웹훅 URL을 로드했습니다: {url[:30]}...")
|
logger.info(f"파일에서 Discord 웹훅 URL을 로드했습니다: {url[:30]}...")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"webhook_url.txt 파일 로드 실패: {e}")
|
logger.warning(f"webhook_url.txt 파일 로드 실패: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
# -------------------------
|
||||||
|
# 런타임 가드/스모크 테스트 헬퍼
|
||||||
|
# -------------------------
|
||||||
|
def apply_env_guards() -> None:
|
||||||
|
"""
|
||||||
|
프레임워크 충돌을 줄이기 위한 환경변수 가드.
|
||||||
|
- TORCH_GPU_ONLY: Torch만 GPU, TF/ORT는 CPU
|
||||||
|
- ORT_GPU: ORT GPU, TF는 CPU
|
||||||
|
- TF_GPU_ONLY: TF만 GPU
|
||||||
|
"""
|
||||||
|
os.environ.setdefault("CUDA_VISIBLE_DEVICES", str(settings.CUDA_DEVICE))
|
||||||
|
os.environ.setdefault("TF_CPP_MIN_LOG_LEVEL", "2")
|
||||||
|
os.environ.setdefault("TF_FORCE_GPU_ALLOW_GROWTH", "true")
|
||||||
|
|
||||||
|
if settings.FRAMEWORK_POLICY == "TORCH_GPU_ONLY":
|
||||||
|
os.environ["TF_VISIBLE_DEVICES"] = "" # TF는 GPU 비노출
|
||||||
|
elif settings.FRAMEWORK_POLICY == "ORT_GPU":
|
||||||
|
os.environ["TF_VISIBLE_DEVICES"] = "" # TF는 CPU 고정
|
||||||
|
elif settings.FRAMEWORK_POLICY == "TF_GPU_ONLY":
|
||||||
|
# Torch 비활성은 코드단에서 선택적으로 처리
|
||||||
|
pass
|
||||||
|
|
||||||
|
logger.info(
|
||||||
|
f"[ENV GUARD] policy={settings.FRAMEWORK_POLICY}, "
|
||||||
|
f"TF_ENABLED={settings.TF_ENABLED}, ORT_ENABLED={settings.ORT_ENABLED}, "
|
||||||
|
f"ORT_PROVIDERS={settings.ORT_PROVIDERS}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def framework_smoketest() -> None:
|
||||||
|
"""
|
||||||
|
선택적 스모크 테스트: 배포 환경 검증용
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
import torch # noqa
|
||||||
|
import torch.cuda # noqa
|
||||||
|
logger.info(f"Torch CUDA 사용 가능: {torch.cuda.is_available()}")
|
||||||
|
if torch.cuda.is_available():
|
||||||
|
logger.info(f"GPU[{settings.CUDA_DEVICE}]: {torch.cuda.get_device_name(settings.CUDA_DEVICE)}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Torch 점검 실패: {e}")
|
||||||
|
|
||||||
|
if settings.TF_ENABLED:
|
||||||
|
try:
|
||||||
|
import tensorflow as tf # noqa
|
||||||
|
try:
|
||||||
|
if settings.FRAMEWORK_POLICY != "TF_GPU_ONLY":
|
||||||
|
tf.config.set_visible_devices([], "GPU")
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
logger.info(f"TF {tf.__version__}, GPUs: {tf.config.list_physical_devices('GPU')}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"TF 점검 실패: {e}")
|
||||||
|
|
||||||
|
if settings.ORT_ENABLED:
|
||||||
|
try:
|
||||||
|
import onnxruntime as ort # noqa
|
||||||
|
logger.info(f"ONNXRuntime {ort.__version__}, Providers: {ort.get_available_providers()}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"ONNXRuntime 점검 실패: {e}")
|
||||||
|
|
|
||||||
11429
logs/main.log
11429
logs/main.log
File diff suppressed because it is too large
Load Diff
|
|
@ -1,48 +1,499 @@
|
||||||
Failed to initialize jtop: The jtop.service is not active. Please run:
|
WARNING:root:jtop library not found. Jetson monitoring will be limited. Please run 'sudo pip install jetson-stats'
|
||||||
sudo systemctl restart jtop.service
|
INFO: Started server process [8030]
|
||||||
Traceback (most recent call last):
|
INFO: Waiting for application startup.
|
||||||
File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
|
INFO:main:🚀 인페인팅 서버 시작 중...
|
||||||
return _run_code(code, main_globals, None,
|
2025-09-30 13:41:49,438 - main - INFO - 🚀 인페인팅 서버 시작 중...
|
||||||
File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
|
INFO:main:✅ 공유 객체를 app.state에 저장 완료
|
||||||
exec(code, run_globals)
|
2025-09-30 13:41:49,438 - main - INFO - ✅ 공유 객체를 app.state에 저장 완료
|
||||||
File "/home/ckh08045/.local/lib/python3.8/site-packages/uvicorn/__main__.py", line 4, in <module>
|
INFO:main:🔄 상태 저장 백그라운드 작업 생성 중...
|
||||||
uvicorn.main()
|
2025-09-30 13:41:49,438 - main - INFO - 🔄 상태 저장 백그라운드 작업 생성 중...
|
||||||
File "/home/ckh08045/.local/lib/python3.8/site-packages/click/core.py", line 1161, in __call__
|
INFO:main:✅ 상태 저장 백그라운드 작업 생성 완료
|
||||||
return self.main(*args, **kwargs)
|
2025-09-30 13:41:49,438 - main - INFO - ✅ 상태 저장 백그라운드 작업 생성 완료
|
||||||
File "/home/ckh08045/.local/lib/python3.8/site-packages/click/core.py", line 1082, in main
|
INFO:main:🚀 세션 풀 초기화 (CUDA 자동 감지)
|
||||||
rv = self.invoke(ctx)
|
2025-09-30 13:41:49,438 - main - INFO - 🚀 세션 풀 초기화 (CUDA 자동 감지)
|
||||||
File "/home/ckh08045/.local/lib/python3.8/site-packages/click/core.py", line 1443, in invoke
|
INFO:app.core.session_pool:Initializing dynamic session pools...
|
||||||
return ctx.invoke(self.callback, **ctx.params)
|
2025-09-30 13:41:49,438 - app.core.session_pool - INFO - Initializing dynamic session pools...
|
||||||
File "/home/ckh08045/.local/lib/python3.8/site-packages/click/core.py", line 788, in invoke
|
INFO:app.core.session_pool:Pre-loading 2 sessions for simple_lama
|
||||||
return __callback(*args, **kwargs)
|
2025-09-30 13:41:49,439 - app.core.session_pool - INFO - Pre-loading 2 sessions for simple_lama
|
||||||
File "/home/ckh08045/.local/lib/python3.8/site-packages/uvicorn/main.py", line 416, in main
|
INFO:main:🔄 상태 저장 백그라운드 작업 시작됨
|
||||||
run(
|
2025-09-30 13:41:49,439 - main - INFO - 🔄 상태 저장 백그라운드 작업 시작됨
|
||||||
File "/home/ckh08045/.local/lib/python3.8/site-packages/uvicorn/main.py", line 587, in run
|
INFO:app.core.session_pool:Creating new session simple_lama_0 for simple_lama...
|
||||||
server.run()
|
2025-09-30 13:41:49,439 - app.core.session_pool - INFO - Creating new session simple_lama_0 for simple_lama...
|
||||||
File "/home/ckh08045/.local/lib/python3.8/site-packages/uvicorn/server.py", line 61, in run
|
INFO:app.core.session_pool:Creating new session simple_lama_1 for simple_lama...
|
||||||
return asyncio.run(self.serve(sockets=sockets))
|
2025-09-30 13:41:51,057 - app.core.session_pool - INFO - Creating new session simple_lama_1 for simple_lama...
|
||||||
File "/usr/lib/python3.8/asyncio/runners.py", line 44, in run
|
INFO:app.models.simple_lama:Loading Simple LAMA model...
|
||||||
return loop.run_until_complete(main)
|
2025-09-30 13:41:51,058 - app.models.simple_lama - INFO - Loading Simple LAMA model...
|
||||||
File "uvloop/loop.pyx", line 1518, in uvloop.loop.Loop.run_until_complete
|
INFO:app.models.simple_lama:실제 SimpleLama 모델 로딩 완료
|
||||||
File "/home/ckh08045/.local/lib/python3.8/site-packages/uvicorn/server.py", line 68, in serve
|
2025-09-30 13:41:52,010 - app.models.simple_lama - INFO - 실제 SimpleLama 모델 로딩 완료
|
||||||
config.load()
|
INFO:app.models.simple_lama:Simple LAMA model loaded successfully
|
||||||
File "/home/ckh08045/.local/lib/python3.8/site-packages/uvicorn/config.py", line 467, in load
|
2025-09-30 13:41:52,010 - app.models.simple_lama - INFO - Simple LAMA model loaded successfully
|
||||||
self.loaded_app = import_from_string(self.app)
|
INFO:app.models.simple_lama:Loading Simple LAMA model...
|
||||||
File "/home/ckh08045/.local/lib/python3.8/site-packages/uvicorn/importer.py", line 21, in import_from_string
|
2025-09-30 13:41:52,010 - app.models.simple_lama - INFO - Loading Simple LAMA model...
|
||||||
module = importlib.import_module(module_str)
|
INFO:app.models.simple_lama:실제 SimpleLama 모델 로딩 완료
|
||||||
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
|
2025-09-30 13:41:52,738 - app.models.simple_lama - INFO - 실제 SimpleLama 모델 로딩 완료
|
||||||
return _bootstrap._gcd_import(name[level:], package, level)
|
INFO:app.models.simple_lama:Simple LAMA model loaded successfully
|
||||||
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
|
2025-09-30 13:41:52,739 - app.models.simple_lama - INFO - Simple LAMA model loaded successfully
|
||||||
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
|
INFO:app.core.session_pool:Successfully created session simple_lama_0
|
||||||
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
|
2025-09-30 13:41:52,739 - app.core.session_pool - INFO - Successfully created session simple_lama_0
|
||||||
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
|
INFO:app.core.session_pool:➕ Session Created (simple_lama). Status -> simple_lama: 0, migan: 0, rembg: 0 | VRAM: 0.0/0.0 GB (7.3%)
|
||||||
File "<frozen importlib._bootstrap_external>", line 848, in exec_module
|
2025-09-30 13:41:52,740 - app.core.session_pool - INFO - ➕ Session Created (simple_lama). Status -> simple_lama: 0, migan: 0, rembg: 0 | VRAM: 0.0/0.0 GB (7.3%)
|
||||||
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
|
INFO:app.core.session_pool:Successfully created session simple_lama_1
|
||||||
File "/home/ckh08045/work/inpaintServer/main.py", line 17, in <module>
|
2025-09-30 13:41:52,740 - app.core.session_pool - INFO - Successfully created session simple_lama_1
|
||||||
from app.core.worker_manager import worker_manager
|
INFO:app.core.session_pool:➕ Session Created (simple_lama). Status -> simple_lama: 0, migan: 0, rembg: 0 | VRAM: 0.0/0.0 GB (7.3%)
|
||||||
File "/home/ckh08045/work/inpaintServer/app/core/worker_manager.py", line 18, in <module>
|
2025-09-30 13:41:52,740 - app.core.session_pool - INFO - ➕ Session Created (simple_lama). Status -> simple_lama: 0, migan: 0, rembg: 0 | VRAM: 0.0/0.0 GB (7.3%)
|
||||||
from ..core.session_pool import ModelType
|
INFO:app.core.session_pool:Pre-loading 1 sessions for migan
|
||||||
File "/home/ckh08045/work/inpaintServer/app/core/session_pool.py", line 106
|
2025-09-30 13:41:52,740 - app.core.session_pool - INFO - Pre-loading 1 sessions for migan
|
||||||
else:
|
INFO:app.core.session_pool:Creating new session migan_0 for migan...
|
||||||
^
|
2025-09-30 13:41:52,741 - app.core.session_pool - INFO - Creating new session migan_0 for migan...
|
||||||
SyntaxError: invalid syntax
|
INFO:app.models.migan:Loading MIGAN ONNX model...
|
||||||
|
2025-09-30 13:41:52,761 - app.models.migan - INFO - Loading MIGAN ONNX model...
|
||||||
|
INFO:app.models.migan:MIGAN ONNX 런타임 세션 생성 시도...
|
||||||
|
2025-09-30 13:41:52,761 - app.models.migan - INFO - MIGAN ONNX 런타임 세션 생성 시도...
|
||||||
|
INFO:app.models.migan:MIGAN ONNX providers 설정: ['CUDAExecutionProvider', 'CPUExecutionProvider']
|
||||||
|
2025-09-30 13:41:52,761 - app.models.migan - INFO - MIGAN ONNX providers 설정: ['CUDAExecutionProvider', 'CPUExecutionProvider']
|
||||||
|
INFO:app.models.migan:MIGAN ONNX 세션 생성 완료. Providers: ['CUDAExecutionProvider', 'CPUExecutionProvider']
|
||||||
|
2025-09-30 13:41:53,076 - app.models.migan - INFO - MIGAN ONNX 세션 생성 완료. Providers: ['CUDAExecutionProvider', 'CPUExecutionProvider']
|
||||||
|
INFO:app.models.migan:MIGAN ONNX model loaded successfully
|
||||||
|
2025-09-30 13:41:53,076 - app.models.migan - INFO - MIGAN ONNX model loaded successfully
|
||||||
|
INFO:app.core.session_pool:Successfully created session migan_0
|
||||||
|
2025-09-30 13:41:53,077 - app.core.session_pool - INFO - Successfully created session migan_0
|
||||||
|
INFO:app.core.session_pool:➕ Session Created (migan). Status -> simple_lama: 2, migan: 0, rembg: 0 | VRAM: 0.0/0.0 GB (7.7%)
|
||||||
|
2025-09-30 13:41:53,077 - app.core.session_pool - INFO - ➕ Session Created (migan). Status -> simple_lama: 2, migan: 0, rembg: 0 | VRAM: 0.0/0.0 GB (7.7%)
|
||||||
|
INFO:app.core.session_pool:Pre-loading 1 sessions for rembg
|
||||||
|
2025-09-30 13:41:53,077 - app.core.session_pool - INFO - Pre-loading 1 sessions for rembg
|
||||||
|
INFO:app.core.session_pool:Creating new session rembg_0 for rembg...
|
||||||
|
2025-09-30 13:41:53,077 - app.core.session_pool - INFO - Creating new session rembg_0 for rembg...
|
||||||
|
INFO:app.models.bria_rmbg_onnx:BriaRMBGOnnxProcessor 초기화 완료
|
||||||
|
2025-09-30 13:41:53,078 - app.models.bria_rmbg_onnx - INFO - BriaRMBGOnnxProcessor 초기화 완료
|
||||||
|
INFO:app.models.bria_rmbg_onnx:Bria RMBG ONNX 세션 생성 중... path=app/models/onnx/BriaRMBG1.4_model_fp16.onnx
|
||||||
|
2025-09-30 13:41:53,078 - app.models.bria_rmbg_onnx - INFO - Bria RMBG ONNX 세션 생성 중... path=app/models/onnx/BriaRMBG1.4_model_fp16.onnx
|
||||||
|
INFO:app.models.bria_rmbg_onnx:Bria RMBG ONNX 세션 생성 완료, Providers: ['CUDAExecutionProvider', 'CPUExecutionProvider'] | Input: input, Output: output
|
||||||
|
2025-09-30 13:41:53,499 - app.models.bria_rmbg_onnx - INFO - Bria RMBG ONNX 세션 생성 완료, Providers: ['CUDAExecutionProvider', 'CPUExecutionProvider'] | Input: input, Output: output
|
||||||
|
INFO:app.core.session_pool:Successfully created session rembg_0
|
||||||
|
2025-09-30 13:41:53,501 - app.core.session_pool - INFO - Successfully created session rembg_0
|
||||||
|
INFO:app.core.session_pool:➕ Session Created (rembg). Status -> simple_lama: 2, migan: 1, rembg: 0 | VRAM: 0.0/0.0 GB (9.0%)
|
||||||
|
2025-09-30 13:41:53,501 - app.core.session_pool - INFO - ➕ Session Created (rembg). Status -> simple_lama: 2, migan: 1, rembg: 0 | VRAM: 0.0/0.0 GB (9.0%)
|
||||||
|
INFO:app.core.session_pool:Session pools initialized successfully
|
||||||
|
2025-09-30 13:41:53,502 - app.core.session_pool - INFO - Session pools initialized successfully
|
||||||
|
INFO:main:✅ 세션 풀 초기화 완료
|
||||||
|
2025-09-30 13:41:53,502 - main - INFO - ✅ 세션 풀 초기화 완료
|
||||||
|
INFO:app.core.worker_manager:Starting worker manager...
|
||||||
|
2025-09-30 13:41:53,502 - app.core.worker_manager - INFO - Starting worker manager...
|
||||||
|
INFO:app.core.worker_manager:Worker manager started with 2 workers
|
||||||
|
2025-09-30 13:41:53,503 - app.core.worker_manager - INFO - Worker manager started with 2 workers
|
||||||
|
INFO:main:✅ 워커 매니저 시작 완료
|
||||||
|
2025-09-30 13:41:53,503 - main - INFO - ✅ 워커 매니저 시작 완료
|
||||||
|
INFO:app.core.batch_manager:Starting BatchManager...
|
||||||
|
2025-09-30 13:41:53,503 - app.core.batch_manager - INFO - Starting BatchManager...
|
||||||
|
INFO:app.core.batch_manager:BatchManager started successfully.
|
||||||
|
2025-09-30 13:41:53,503 - app.core.batch_manager - INFO - BatchManager started successfully.
|
||||||
|
INFO:main:✅ 배치 관리자 시작 완료
|
||||||
|
2025-09-30 13:41:53,503 - main - INFO - ✅ 배치 관리자 시작 완료
|
||||||
|
INFO:main:🎉 인페인팅 서버 시작 완료!
|
||||||
|
2025-09-30 13:41:53,503 - main - INFO - 🎉 인페인팅 서버 시작 완료!
|
||||||
|
WARNING:app.utils.discord_notifier:Discord 웹훅 URL이 설정되지 않아 알림을 보낼 수 없습니다.
|
||||||
|
2025-09-30 13:41:53,504 - app.utils.discord_notifier - WARNING - Discord 웹훅 URL이 설정되지 않아 알림을 보낼 수 없습니다.
|
||||||
|
INFO:app.core.session_pool:Idle session reaper started. Timeout: 1800s, Check Interval: 60s
|
||||||
|
2025-09-30 13:41:53,505 - app.core.session_pool - INFO - Idle session reaper started. Timeout: 1800s, Check Interval: 60s
|
||||||
|
INFO: Application startup complete.
|
||||||
|
INFO: Uvicorn running on http://0.0.0.0:8008 (Press CTRL+C to quit)
|
||||||
|
INFO: 127.0.0.1:40950 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40966 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51827 - "GET /docs HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51827 - "GET /openapi.json HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51827 - "GET /docs HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51827 - "GET /openapi.json HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51770 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51772 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51786 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36330 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36338 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36340 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36344 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36348 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36352 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36368 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36372 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42270 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42272 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42274 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42276 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42288 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42292 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37120 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37128 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37142 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37154 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37164 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37180 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50422 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50426 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50428 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50440 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50446 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50452 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50460 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39780 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39788 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39804 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39812 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39820 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39824 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39828 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34278 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34280 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34282 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34292 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34298 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34308 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43312 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43322 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43324 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43328 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43332 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43342 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43356 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43368 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37340 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37354 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37356 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37366 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37370 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37380 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40926 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40936 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40938 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40944 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40948 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40952 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54950 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54958 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54966 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54972 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54976 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54988 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55002 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44864 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44868 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44874 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44888 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44902 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44910 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59202 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59214 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59224 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59238 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59240 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59250 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40680 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40688 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40700 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40706 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40710 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40714 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40718 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55740 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55756 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55770 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55782 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55790 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55804 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41190 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41196 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41198 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41200 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41212 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41220 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41236 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57758 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57772 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57778 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57794 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57800 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57806 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57816 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57826 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49716 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49718 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49726 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49742 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49754 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49764 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35094 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35098 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35108 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35124 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35140 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35150 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35162 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56620 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56630 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56646 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56658 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56674 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56682 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56698 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59358 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59360 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59368 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59384 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59386 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59396 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59886 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59892 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59902 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59918 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59930 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59936 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51650 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51666 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51676 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51690 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51698 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51706 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51716 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56056 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56070 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56076 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56092 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56106 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56116 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56492 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56498 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56508 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56522 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56532 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56548 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57686 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57690 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57704 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57710 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57720 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57736 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57738 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41450 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41452 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41468 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41474 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41476 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41480 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35860 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35868 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35878 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35884 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35900 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35908 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35916 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37996 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38004 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38008 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38016 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38030 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38036 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38052 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38056 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52420 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52426 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52438 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52450 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52464 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52474 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49978 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49984 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49992 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50002 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50012 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50018 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37348 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37356 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37368 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37380 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37388 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37398 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37406 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50410 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50420 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50424 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50436 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50446 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50456 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34512 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34520 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34530 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34540 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34542 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34546 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55372 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55382 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55394 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55398 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55410 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55422 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55424 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47164 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47178 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47180 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47188 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47198 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47202 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48968 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48980 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48992 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49000 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49012 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49028 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:49038 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41792 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41806 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41822 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41828 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41832 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41848 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41860 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41862 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37968 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37982 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37994 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38002 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38014 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56402 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56418 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56434 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56438 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56450 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56462 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56472 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36790 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36802 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36818 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36824 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36826 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36830 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36842 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36856 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38068 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38076 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38092 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38100 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38102 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38114 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43516 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43530 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43540 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43542 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43556 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43568 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:45942 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:45958 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:45972 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:45974 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:45986 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:45996 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:46000 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48010 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48026 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48032 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48038 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48048 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48054 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48064 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48066 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37730 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37744 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37754 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37766 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37768 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37778 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51766 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51780 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51782 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51784 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51786 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51788 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50002 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50016 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50020 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50022 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50036 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50044 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50054 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50070 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48460 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48462 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48472 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48480 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48496 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48512 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52154 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52164 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52178 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52184 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52186 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52200 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52630 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52634 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52638 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52640 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52648 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52660 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52674 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60092 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60102 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60106 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60114 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60124 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60126 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60136 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60790 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60800 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60806 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60820 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60836 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60848 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60160 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60162 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60178 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60182 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60196 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60208 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60218 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:37996 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38010 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38016 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38030 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38038 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38048 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:58906 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:58908 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:58910 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:58918 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:58932 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:58934 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39180 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39182 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39196 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39206 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39210 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39216 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39228 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48208 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48210 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48220 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48226 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48232 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48240 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48248 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34080 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34092 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34104 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34110 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34116 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34130 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38284 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38294 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38308 - "GET /api/v1/health HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38316 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38328 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38330 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38342 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38344 - "GET /api/v1/stats HTTP/1.1" 200 OK
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
841903
|
8030
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,141 @@
|
||||||
Failed to initialize jtop: The jtop.service is not active. Please run:
|
WARNING:root:jtop library not found. Jetson monitoring will be limited. Please run 'sudo pip install jetson-stats'
|
||||||
sudo systemctl restart jtop.service
|
INFO: Started server process [8148]
|
||||||
INFO: Started server process [840568]
|
|
||||||
INFO: Waiting for application startup.
|
INFO: Waiting for application startup.
|
||||||
Fan control not available
|
|
||||||
INFO: Application startup complete.
|
INFO: Application startup complete.
|
||||||
INFO: Uvicorn running on http://0.0.0.0:8888 (Press CTRL+C to quit)
|
INFO: Uvicorn running on http://0.0.0.0:8888 (Press CTRL+C to quit)
|
||||||
INFO: 127.0.0.1:57182 - "GET /api/simple HTTP/1.1" 200 OK
|
INFO: 127.0.0.1:33342 - "GET /api/simple HTTP/1.1" 200 OK
|
||||||
Task exception was never retrieved
|
INFO: 122.35.47.45:51860 - "GET / HTTP/1.1" 200 OK
|
||||||
future: <Task finished name='Task-4' coro=<health_check_and_restart() done, defined at /home/ckh08045/work/inpaintServer/app/monitoring/dashboard.py:2084> exception=AttributeError("module 'asyncio' has no attribute 'to_thread'")>
|
INFO: 122.35.47.45:51865 - "WebSocket /ws" [accepted]
|
||||||
Traceback (most recent call last):
|
INFO: connection open
|
||||||
File "/home/ckh08045/work/inpaintServer/app/monitoring/dashboard.py", line 2094, in health_check_and_restart
|
INFO: 122.35.47.45:51860 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
response = await asyncio.to_thread(requests.get, health_url, timeout=10)
|
INFO: 122.35.47.45:51861 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
AttributeError: module 'asyncio' has no attribute 'to_thread'
|
INFO: 122.35.47.45:51867 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
INFO: Shutting down
|
INFO: 122.35.47.45:51866 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
INFO: Waiting for application shutdown.
|
INFO: 122.35.47.45:51868 - "GET /favicon.ico HTTP/1.1" 404 Not Found
|
||||||
INFO: Application shutdown complete.
|
INFO: 122.35.47.45:51873 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
INFO: Finished server process [840568]
|
INFO: 122.35.47.45:51873 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51873 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51877 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51876 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51875 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51878 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51895 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51895 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51895 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51918 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51916 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51919 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51917 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51938 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51938 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51938 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51973 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51974 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51975 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51972 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51986 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51986 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:51986 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52008 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52005 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52007 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52006 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52025 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52025 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52025 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52046 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52047 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52049 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52048 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52054 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52054 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52054 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52061 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52060 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52058 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52059 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52069 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52069 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52069 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52082 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52084 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52081 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52083 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52087 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52087 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52087 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52112 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52114 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52115 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52113 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52113 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52113 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52113 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52131 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52130 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52129 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52132 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52144 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52144 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52144 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52154 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52151 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52153 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52152 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52164 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52164 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52164 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52170 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52169 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52171 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52172 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52177 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52183 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52182 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52184 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52185 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52195 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52194 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52194 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52214 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52213 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52216 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52215 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52225 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52225 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52234 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52235 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52236 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52237 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52238 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52245 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52245 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52245 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52257 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52259 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52256 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52258 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52261 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52261 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52261 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52268 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52265 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52266 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52267 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52272 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52272 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52272 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52276 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52278 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52275 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52277 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52290 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52290 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52290 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52307 - "GET /api/logs?lines=50 HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52309 - "GET /api/performance-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52308 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52306 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52316 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52316 - "GET /api/model-usage-stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 122.35.47.45:52316 - "GET /api/system-alerts HTTP/1.1" 200 OK
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
840568
|
8148
|
||||||
|
|
|
||||||
2
main.py
2
main.py
|
|
@ -201,7 +201,7 @@ async def save_status_periodically():
|
||||||
import traceback
|
import traceback
|
||||||
logger.error(f"상세 오류: {traceback.format_exc()}")
|
logger.error(f"상세 오류: {traceback.format_exc()}")
|
||||||
|
|
||||||
await asyncio.sleep(1)
|
await asyncio.sleep(5)
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def lifespan(app: FastAPI):
|
async def lifespan(app: FastAPI):
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,62 @@
|
||||||
|
# ============================
|
||||||
|
# requirements_x86.txt (Linux x86_64, CUDA 11.8)
|
||||||
|
# ============================
|
||||||
|
|
||||||
|
# PyTorch CUDA 11.8 휠 받기 (기본 PyPI + 추가 인덱스)
|
||||||
|
--extra-index-url https://download.pytorch.org/whl/cu118
|
||||||
|
|
||||||
|
########################
|
||||||
|
# 서버/웹 기본
|
||||||
|
########################
|
||||||
fastapi==0.104.1
|
fastapi==0.104.1
|
||||||
uvicorn[standard]==0.24.0
|
uvicorn[standard]==0.24.0
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.6
|
||||||
pillow==10.0.1
|
|
||||||
numpy==1.23.5
|
|
||||||
opencv-python==4.8.1.78
|
|
||||||
psutil==5.9.6
|
|
||||||
requests==2.31.0
|
|
||||||
|
|
||||||
# PyTorch - x86 시스템용 (CUDA 11.8 지원)
|
|
||||||
# Python 3.10 호환 버전
|
|
||||||
torch==2.0.1+cu118
|
|
||||||
torchvision==0.15.2+cu118
|
|
||||||
|
|
||||||
# CUDA 관련 (x86 전용)
|
|
||||||
pycuda==2022.2.2
|
|
||||||
|
|
||||||
# 인페인팅 모델들
|
|
||||||
rembg==2.0.50
|
|
||||||
simple-lama-inpainting==0.1.0
|
|
||||||
|
|
||||||
# 시스템 모니터링
|
|
||||||
asyncio-throttle==1.0.2
|
|
||||||
aiofiles==23.2.1
|
aiofiles==23.2.1
|
||||||
|
asyncio-throttle==1.0.2
|
||||||
|
requests==2.31.0
|
||||||
|
psutil==5.9.6
|
||||||
|
websockets
|
||||||
|
|
||||||
|
########################
|
||||||
|
# 이미지/수치
|
||||||
|
########################
|
||||||
|
pillow==10.0.1
|
||||||
|
# TensorFlow 2.12.0은 numpy<1.24 요구 → 충돌 방지 위해 범위 고정
|
||||||
|
numpy==1.26.4
|
||||||
|
opencv-python==4.8.1.78
|
||||||
|
|
||||||
|
########################
|
||||||
|
# 설정/검증
|
||||||
|
########################
|
||||||
pydantic==2.7.4
|
pydantic==2.7.4
|
||||||
pydantic-settings==2.8.1
|
pydantic-settings==2.8.1
|
||||||
|
|
||||||
# x86 GPU 모니터링
|
########################
|
||||||
pynvml==11.5.0
|
# DL 프레임워크
|
||||||
nvidia-ml-py3==7.352.0
|
########################
|
||||||
|
# TensorFlow (GPU 포함 단일 패키지)
|
||||||
|
# tensorflow==2.12.0
|
||||||
|
|
||||||
# 추가 최적화 패키지들 (Python 3.10 호환)
|
# PyTorch (CUDA 11.8 휠)
|
||||||
|
torch==2.2.2
|
||||||
|
torchvision==0.17.2
|
||||||
|
|
||||||
|
########################
|
||||||
|
# 인페인팅/배경제거
|
||||||
|
########################
|
||||||
|
rembg==2.0.50
|
||||||
|
simple-lama-inpainting
|
||||||
|
|
||||||
|
# rembg 가속용 (CUDA 11.8 빌드)
|
||||||
onnxruntime-gpu==1.16.3
|
onnxruntime-gpu==1.16.3
|
||||||
|
|
||||||
|
########################
|
||||||
|
# GPU 모니터링
|
||||||
|
########################
|
||||||
|
pynvml==11.5.0
|
||||||
|
# nvidia-ml-py3==7.352.0 # ← 기능 중복이라 제거 권장
|
||||||
|
|
||||||
|
########################
|
||||||
|
# (선택) CUDA 커널 직접 호출 시만
|
||||||
|
########################
|
||||||
|
#pycuda==2022.2.2
|
||||||
|
|
|
||||||
130
status.json
130
status.json
|
|
@ -1,75 +1,19 @@
|
||||||
{
|
{
|
||||||
"worker_status": {
|
"worker_status": {
|
||||||
"running": true,
|
"running": true,
|
||||||
"total_workers": 10,
|
"total_workers": 2,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
"workers_by_status": {
|
"workers_by_status": {
|
||||||
"idle": [
|
"idle": [
|
||||||
{
|
{
|
||||||
"id": "worker_f70b814c",
|
"id": "worker_67ac071e",
|
||||||
"status": "idle",
|
"status": "idle",
|
||||||
"task_count": 0,
|
"task_count": 0,
|
||||||
"error_count": 0,
|
"error_count": 0,
|
||||||
"last_task_at": null
|
"last_task_at": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "worker_7ef5e684",
|
"id": "worker_99f585de",
|
||||||
"status": "idle",
|
|
||||||
"task_count": 0,
|
|
||||||
"error_count": 0,
|
|
||||||
"last_task_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "worker_63d0f5bb",
|
|
||||||
"status": "idle",
|
|
||||||
"task_count": 0,
|
|
||||||
"error_count": 0,
|
|
||||||
"last_task_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "worker_9b7b1de3",
|
|
||||||
"status": "idle",
|
|
||||||
"task_count": 0,
|
|
||||||
"error_count": 0,
|
|
||||||
"last_task_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "worker_7952c8ab",
|
|
||||||
"status": "idle",
|
|
||||||
"task_count": 0,
|
|
||||||
"error_count": 0,
|
|
||||||
"last_task_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "worker_7af356b5",
|
|
||||||
"status": "idle",
|
|
||||||
"task_count": 0,
|
|
||||||
"error_count": 0,
|
|
||||||
"last_task_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "worker_156f8680",
|
|
||||||
"status": "idle",
|
|
||||||
"task_count": 0,
|
|
||||||
"error_count": 0,
|
|
||||||
"last_task_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "worker_e9ca4545",
|
|
||||||
"status": "idle",
|
|
||||||
"task_count": 0,
|
|
||||||
"error_count": 0,
|
|
||||||
"last_task_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "worker_ad1a8fc2",
|
|
||||||
"status": "idle",
|
|
||||||
"task_count": 0,
|
|
||||||
"error_count": 0,
|
|
||||||
"last_task_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "worker_3a52ecf2",
|
|
||||||
"status": "idle",
|
"status": "idle",
|
||||||
"task_count": 0,
|
"task_count": 0,
|
||||||
"error_count": 0,
|
"error_count": 0,
|
||||||
|
|
@ -91,53 +35,69 @@
|
||||||
"available": 2
|
"available": 2
|
||||||
},
|
},
|
||||||
"migan": {
|
"migan": {
|
||||||
"min": 2,
|
"min": 1,
|
||||||
"max": 4,
|
"max": 4,
|
||||||
"total": 2,
|
"total": 1,
|
||||||
"in_use": 0,
|
"in_use": 0,
|
||||||
"available": 2
|
"available": 1
|
||||||
},
|
},
|
||||||
"rembg": {
|
"rembg": {
|
||||||
"min": 2,
|
"min": 1,
|
||||||
"max": 4,
|
"max": 3,
|
||||||
"total": 2,
|
"total": 1,
|
||||||
"in_use": 0,
|
"in_use": 0,
|
||||||
"available": 2
|
"available": 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"api_stats": {
|
"api_stats": {
|
||||||
"total_requests": 7,
|
"total_requests": 400,
|
||||||
"successful_requests": 7,
|
"successful_requests": 400,
|
||||||
"failed_requests": 0,
|
"failed_requests": 0,
|
||||||
"success_rate": 100.0,
|
"success_rate": 100.0,
|
||||||
"endpoint_usage": {
|
"endpoint_usage": {
|
||||||
"GET /api/v1/health": 2,
|
"GET /api/v1/health": 22,
|
||||||
"POST /api/v1/remove_bg": 5
|
"GET /docs": 2,
|
||||||
|
"GET /openapi.json": 2,
|
||||||
|
"GET /api/v1/stats": 374
|
||||||
},
|
},
|
||||||
"endpoint_stats": {
|
"endpoint_stats": {
|
||||||
"GET /api/v1/health": {
|
"GET /api/v1/health": {
|
||||||
"count": 2,
|
"count": 22,
|
||||||
"avg_time": 0.0023573637008666992,
|
"avg_time": 0.0008184367960149592,
|
||||||
"min_time": 0.0011353492736816406,
|
"min_time": 0.0004703998565673828,
|
||||||
"max_time": 0.003579378128051758,
|
"max_time": 0.001514434814453125,
|
||||||
"current_concurrent": 0
|
"current_concurrent": 0
|
||||||
},
|
},
|
||||||
"POST /api/v1/remove_bg": {
|
"GET /docs": {
|
||||||
"count": 5,
|
"count": 2,
|
||||||
"avg_time": 15.194099569320679,
|
"avg_time": 0.0005669593811035156,
|
||||||
"min_time": 0.29595065116882324,
|
"min_time": 0.0005576610565185547,
|
||||||
"max_time": 74.70842432975769,
|
"max_time": 0.0005762577056884766,
|
||||||
|
"current_concurrent": 0
|
||||||
|
},
|
||||||
|
"GET /openapi.json": {
|
||||||
|
"count": 2,
|
||||||
|
"avg_time": 0.0098419189453125,
|
||||||
|
"min_time": 0.0009410381317138672,
|
||||||
|
"max_time": 0.018742799758911133,
|
||||||
|
"current_concurrent": 0
|
||||||
|
},
|
||||||
|
"GET /api/v1/stats": {
|
||||||
|
"count": 374,
|
||||||
|
"avg_time": 0.0007271456718444824,
|
||||||
|
"min_time": 0.0005671977996826172,
|
||||||
|
"max_time": 0.0024929046630859375,
|
||||||
"current_concurrent": 0
|
"current_concurrent": 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"average_response_time": 10.853601796286446,
|
"average_response_time": 0.0007895290851593018,
|
||||||
"min_response_time": 0.0011353492736816406,
|
"min_response_time": 0.00044035911560058594,
|
||||||
"max_response_time": 74.70842432975769,
|
"max_response_time": 0.018742799758911133,
|
||||||
"current_concurrent": 0,
|
"current_concurrent": 0,
|
||||||
"max_concurrent": 1,
|
"max_concurrent": 1,
|
||||||
"requests_per_second": 0.019528829012151992,
|
"requests_per_second": 0.6403491471578444,
|
||||||
"uptime": 358.4444308280945,
|
"uptime": 624.6592218875885,
|
||||||
"recent_errors": []
|
"recent_errors": []
|
||||||
},
|
},
|
||||||
"timestamp": 1756730843.4636421
|
"timestamp": 1759240334.0925634
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
# tf_check.py
|
||||||
|
import os
|
||||||
|
print("PYTHON:", os.sys.version)
|
||||||
|
|
||||||
|
try:
|
||||||
|
import tensorflow as tf
|
||||||
|
print("TF VERSION:", tf.__version__)
|
||||||
|
print("TF Built with CUDA:", tf.test.is_built_with_cuda())
|
||||||
|
print("TF GPUs:", tf.config.list_physical_devices('GPU'))
|
||||||
|
except Exception as e:
|
||||||
|
print("TF CHECK ERROR:", e)
|
||||||
|
|
||||||
|
try:
|
||||||
|
import torch
|
||||||
|
print("TORCH VERSION:", torch.__version__)
|
||||||
|
print("TORCH CUDA AVAILABLE:", torch.cuda.is_available())
|
||||||
|
if torch.cuda.is_available():
|
||||||
|
print("TORCH DEVICE:", torch.cuda.get_device_name(0))
|
||||||
|
except Exception as e:
|
||||||
|
print("TORCH CHECK ERROR:", e)
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
lib
|
||||||
Loading…
Reference in New Issue