Unified Model Export Specification (ONNX / ORT / OpenVINO)
ONNX/ONNX Runtime(ORT) 최적화본, OpenVINO 캐시를 “무엇을, 언제, 어떻게” 내보낼지 정리
모델 배포 아티팩트 전략을 한눈에 잡아주는 요약이다. ONNX/ONNX Runtime(ORT) 최적화본, OpenVINO 캐시를 “무엇을, 언제, 어떻게” 내보낼지 정리했다.
왜 이렇게 나누나?
- ONNX: 표준·휴대용 “소스 진실” (canonical)
- ORT
.ort: 특정 ORT 버전/옵티마이저/플래그에 “묶인” 성능 최적화 산출물
- OpenVINO 캐시: 특정 Intel CPU 마이크로아키텍처 + OpenVINO 버전 조합에 “묶인” 디바이스/런타임 캐시
배포 원칙 (CI에서 자동 생성·출판)
- 항상 두 개 이상을 함께 배포
model.onnx(canonical)
model.opt.ort(ORT optimizer 산출물)
(필요 시) model.openvino_cache/ (사전 빌드된 캐시 블롭)
- 머신이 읽을 수 있는 메타데이터 + 체크섬 동봉
artifacts.json(버전·플래그·타깃 등)
SHA256SUMS.txt(모든 파일의 SHA256)
- 보수적 무효화(Invalidation) 규칙
- ORT: ORT runtime/optimizer의 major/minor 변하거나, EP/옵티마이저 플래그/opt level 바뀌면 무효화
- OpenVINO: OpenVINO(또는 Model Server) 버전, 타깃 디바이스 패밀리, CPU 마이크로아키텍처, 모델 shape/파라미터 바뀌면 무효화
메타데이터 스키마 예시 (권장)
CI 파이프라인 체크리스트
ONNX 내보내기: opset 고정, dynamic axes 명시
정적 검증: onnx.checker, shape infer, 모델 사이즈/노드 수 로그
ORT 최적화: optimizer/EP/opt-level/플래그를 명시적으로 핀(pin) 하고 .ort 생성
OpenVINO 캐시(선택): 대상 Intel x86 uarch(예: skylake, icelake, sapphirerapids) 별로 따로 빌드
메타데이터/체크섬 생성: artifacts.json, SHA256SUMS.txt
재현 로그: 변환 스크립트 커맨드라인, 라이브러리 버전, 환경 해시 기록
아티팩트 서명/업로드: 레지스트리 또는 릴리스 페이지에 업로드, CDN 캐시 헤더 설정
호환성 스모크 테스트: 각 아티팩트로 샘플 입력 → 동일 wave형태/latency 기준 통과
배포 폴더 구조(예시)
현업 팁
.ort는 “영원히 휴대용”이 아니다: ORT 버전·옵션에 강하게 종속 → 항상 원본model.onnx를 함께 배포
- OpenVINO 캐시는 제한적으로만: 내부 인프라의 마이크로아키텍처가 통제될 때만 제공. 다수 환경이면 캐시 미배포 + 최초 요청 시 생성도 선택지
- 강제 무효화 키:
invalidate_reason필드를 artifacts.json에 남겨서 다운스트림이 자동 폐기·재다운로드 가능하게