한컴인스페이스
위성 데이터 수집·처리 인프라
2024.10 ~ 진행중
ML 추론 서비스 개발 · 수집 워크플로우 엔진 설계
FastAPIONNX RuntimeCUDAYOLOv26PythonSalt-StackGDALSFTPKubernetesAliyun GPUShare
위성 영상 분석 파이프라인의 양 끝을 담당했습니다. 수집 쪽에서는 소스별로 난립하던 수집 로직을 Salt-Stack 기반 워크플로우 엔진으로 표준화해 10개 이상의 위성 소스를 단일 파이프라인에 통합했고, 추론 쪽에서는 K8s GPU 카운트 단위 제약을 Aliyun GPUShare 메모리 분할로 우회해 물리 GPU 1장에서 70파드 병렬 추론 체계를 구축했습니다.
역할별 수행 내용
ML 추론 서비스 3종 개발
- object-detection: YOLOv26 OBB/HBB 듀얼모델 — 20클래스(선박·항공기·차량·교량 등), SMALL_CLASSES(4~7, 17)는 HBB, 나머지는 OBB로 객체 크기 기반 자동 라우팅, letterbox 1024px 전처리, mAP ~70%
- segmentation: UPerNet+ConvNeXt 백본 — 6클래스 토지피복(산림/수계/건물/도로/초지/나지), ONNX Runtime CUDAExecutionProvider 직접 세션 구성
- inferencer: Super-Resolution 모델 — rasterio로 GeoTIFF 직접 처리, 512×512 패딩, 픽셀값 [0,1] 정규화 후 (C,H,W) transpose
- FastAPI 엔드포인트 설계 — POST /inference(자동 라우팅), /inference/obb, /inference/hbb, /inference/path(K8s 공유볼륨 경로 기반), CLASS_ALIAS 매핑 응답 표준화
GPU 메모리 분할 운영
- Aliyun GPUShare 스케줄러 익스텐더 직접 구성 — `aliyun.com/gpu-mem` 리소스 단위로 파드별 GPU 메모리 할당
- gprocessor 30파드 × 1GiB + inferencer 40파드 × 1GiB 동시 운영 — 물리 GPU 1장에서 70파드 병렬 점유
- GPU 노드 node selector 분리로 추론 워크로드와 일반 워크로드 격리
janus 수집 워크플로우 엔진
- Salt-Stack 기반 분산 워크플로우 엔진(janus) 구축 — H_BASE(수확 기반)/S_BASE(소스 기반) 추상 클래스로 수집기 인터페이스 표준화
- 다누리(KPLO)·창천위성·Sentinel·Landsat·Planet·MODIS 등 10+ 소스를 동일 파이프라인 구조로 통합 — geocode(Nominatim 리버스 지오코딩), inharv(다중 소스 수확 스케줄러) 포함
- 신규 위성 소스 추가 시 H_BASE/S_BASE 상속 클래스 1개만 구현 — 기존 파이프라인 코드 수정 없이 자동 통합
망연계 relay 및 알림
- SFTP 기반 망연계 relay 직접 구현 — 외부망↔폐쇄망 간 파일 기반 데이터 중계, 네트워크 분리 환경에서 단방향 파일 전달
- 이메일 알림 5종 직접 구현(분석완료·시스템에러·보안다운로드 등) — 보안다운로드는 서약서 PDF + 이력 CSV ZIP 첨부, KARI 납품 환경 대응
주요 성과
- K8s GPU 카운트 단위 할당으로 1파드=1GPU가 강제되던 구조를 Aliyun GPUShare 메모리 단위 분할로 해결 — 물리 GPU 1장에서 70파드 병렬 추론 운영
- 단일 모델 고정으로 동시 추론이 불가하던 구조를 FastAPI + ONNX Runtime 추론 서비스 3종 독립 배포로 전환 — object-detection·segmentation·inferencer 각각 독립 스케일링
- 소스별 하드코딩으로 신규 위성 추가 시 파이프라인 전체 수정이 필요하던 구조를 H_BASE/S_BASE 추상 클래스 표준화로 해결 — 신규 소스 추가 시 클래스 1개만 구현, 기존 코드 수정 0건
- 외부망↔폐쇄망 단절 환경에서 SFTP 기반 relay 직접 구현 — 파일 기반 단방향 중계로 망간 데이터 동기화