pulse.huny.dev

HunyDev
Preventing x86-Only NCHWc Operators from Leaking into ONNX Runtime Mobile Builds

Preventing x86-Only NCHWc Operators from Leaking into ONNX Runtime Mobile Builds

NCHWc 포함된 ORT 모델 자동 차단법

Hun Jang
Hun Jang Dec 10, 2025

ONNX Runtime(ORT)로 “모바일/미니멀 빌드” 할 때, 변환 산출물의 required_operators.config에 x86 전용 최적화(NCHWc)가 끼어들면 ARM 배포에서 크래시·성능저하가 난다. 그래서 변환 직후 한 줄 검증 훅으로 즉시 차단하는 걸 추천한다.

왜 필요한가

  • 데이터 레이아웃:
    • NCHWc: x86/amd64에서 AVX/AVX2/AVX‑512 벡터화에 맞춘 패킹(채널 블록) 포맷.
    • NHWC: 모바일(ARM 포함)에서 일반적으로 더 유리한 메모리 접근 패턴.
  • ORT 변환기는 타깃 플랫폼별 최적화를 자동 적용한다. 하지만 파이프라인/캐시 재사용, 그래프 합성 과정에서 x86 산물이 섞이면 ARM 런타임에서 불필요한 커널 의존 또는 변환 실패가 발생한다.
  • 미니멀/모바일 빌드required_operators.config를 기준으로 커널을 슬림하게 컴파일하므로, 여기 끼는 하나의 오입력이 곧 빌드/런타임 문제로 직결된다.

실전 체크리스트

  • ORT 변환 시: -target_platform arm(+ 필요 시 -optimization_style Runtime)을 명시하고, 변환 산출물마다 위 grep 가드를 돌린다.
  • CI에 넣기: “변환 → grep 가드 → 미니멀 커널 빌드” 순서로 스테이지를 분리한다.
  • 다중 아키텍처를 한 산출물로 쓰지 말 것: x86/arm을 별도 변환·별도 산출물로 관리.
  • 이미 만든 모델 점검: 산출물 루트에서 grep -R "NCHWc\|NchwcConv" .로 전수 검사.

덤: 흔한 증상 힌트

  • ARM 디바이스에서 특정 Conv 노드만 느려짐(폴백)
  • 미니멀 빌드가 불필요하게 커짐(끌려들어간 커널 때문에)
  • 런타임 초기화 시 “kernel not found for op …”류 에러
 

You might also like

BlogPro logo
Made with BlogPro