콘텐츠로 이동

gRPC 추론 API

백엔드와 Python 추론 런타임은 50051 포트의 gRPC(protos/inference.proto, 서비스 InferenceService)를 통해 통신합니다. 운영자가 이 API를 직접 호출하는 경우는 드뭅니다 — 백엔드가 클라이언트입니다 — 하지만 파이프라인을 디버깅하거나, 박스에서 커스텀 클라이언트를 통합하거나, 추론 로그를 읽을 때는 이 계약이 중요합니다.

RPC유형목적
StreamInference양방향 스트림센서 윈도우 입력, 예측 출력 — 실시간 핫 패스
LoadModel단항(unary)ONNX 모델 검증 + 등록 + 핫스왑(무중단)
ValidateModel단항(unary)비변경 검사: 형상 + SHA-256, 아무것도 로드하지 않음
HealthCheck단항(unary)서비스 상태 + CPU/GPU/메모리 메트릭
StreamLogs서버 스트림최소 레벨로 필터링한 추론 로그 테일링

InferenceRequestrequest_id, timestamp(Unix epoch ms, 센서 샘플링 시점에 백엔드가 한 번만 찍고 변경 없이 그대로 반환됨 — 따라서 시계 동기화 문제가 없습니다), 평탄한 features 배열, 그리고 메타데이터 맵을 전달합니다.

InferenceResponsepredictionsconfidence_scores, 서빙 중인 model_id/model_version, inference_time_ms, 그리고 세 개의 타임스탬프를 반환합니다:

필드의미
window_start_timestamp예측 윈도우에서 가장 오래된 입력 샘플
window_end_timestamp가장 최신 입력 샘플 — 예측의 “기준 시점”
emitted_at방출 시점의 벽시계 시간. emitted_at − window_end_timestamp는 엔드투엔드 지연 시간의 근사값

모델 워밍업 중(슬라이딩 윈도우가 아직 가득 차지 않음)에는 응답이 metadata["warming_up"] = "true"를 전달하며, 백엔드는 이를 대시보드에서 숨깁니다.

모델 버전을 등록하고 이중 버퍼링으로 실행 중인 세션에 핫스왑합니다 — 새 세션은 락 바깥에서 로드 및 워밍업된 뒤, 참조가 원자적으로 교체되므로 스트리밍이 결코 멈추지 않습니다.

  • 콘텐츠 해시 기준 멱등성: 동일한 SHA-256으로 같은 (model_id, version)을 다시 보내면 성공 no-op입니다. 다른 SHA-256으로 같은 버전을 보내면 version_conflict로 거부됩니다 — 버전은 불변입니다.
  • 응답은 input_shape, output_shape, registered_path, 그리고 계산된 sha256을 반환합니다.
  • 새 모델의 (window_size, n_features)가 이전 것과 다르면, 윈도잉 파이프라인이 재구성되고 워밍업이 다시 시작됩니다.

모델 업로드 중 백엔드가 사용하는 순수 검사입니다. 일회용 런타임 세션을 열어 입력/출력 형상과 SHA-256을 추출하고, 아무것도 등록하지 않은 채 {valid, message, input_shape, output_shape, sha256}을 반환합니다.

검증은 모델 계약을 강제합니다:

  • ONNX 파일 ≤ 500 MB, 로드 가능, ONNX 체커 통과
  • Opset 13–18
  • 입력 텐서 input의 형상 (batch, window_size, n_features) — 3차원 필수. 배치 차원은 동적일 수 있음
  • 출력 텐서 output의 형상 (batch, 3) = [health_score, failure_probability, rul_normalized]

HealthCheck는 대시보드 헬스 패널(GPU 부하, 메모리, 가동 시간)을 구동합니다. StreamLogs는 Python 서비스의 로그 스트림을 백엔드로 전달하고, 백엔드는 이를 LogViewer용으로 영속화합니다 — min_level로 필터링하세요.

추론 컨테이너가 인식하는 환경 변수(compose 파일에서 설정):

변수기본값효과
EXECUTION_MODEauto실행 공급자: auto(TensorRT → CUDA → CPU), tensorrt, cuda, cpu
STRICT_EPoff1 = 핀 고정된 GPU 모드를 조용히 CPU로 저하시키는 대신 시작을 거부
MODEL_PATH/app/models/predictive_maintenance.onnx시작 시 로드되는 시드 모델
MODEL_STORAGE_PATH/data/models등록된 모델 버전이 저장되는 위치
LOG_DIR미설정회전형 온디스크 로그 파일(inference.log) 활성화. 미설정 = 콘솔 전용
FORCE_CPUoffEXECUTION_MODE=cpu의 레거시 별칭