Project ES/: : Project : : i.MX8M & ADI

ONNX Runtime, TFLite를 활용한 모델 최적화와 임베디드 포팅

Jay.P Morgan 2026. 4. 17. 11:03

 

 

  1. ONNX Runtime, TFLite를 활용한 모델 최적화와 8MP 포팅

 

i.MX8M Plus(8MP)는 Vivante VIP8000 NPU를 탑재하고 있어, 이를 제대로 활용하기 위한 모델 최적화와 포팅 과정은 일반적인 PC 환경과는 완전히 다릅니다. 각 프레임워크별 역할과 8MP로 가는 최적의 경로를 정리해 드립니다.

 

 

  1.  프레임워크별 역할 및 8MP 적합성

 

프레임워크 특징 및 역할 i.MX8MP에서의 위상
ONNX Runtime 모델 교환의 표준(Pytorch → ONNX).
다양한 하드웨어 백엔드 지원.
중간 단계. 주로 NPU용 전용 포맷으로 가기 전 거쳐가는 정거장입니다.
TensorRT NVIDIA GPU 전용 가속 엔진. 비대상. 8MP는 NVIDIA GPU가 아니므로 사용 불가합니다.
            (서버급 학습/검증용)
TFLite 모바일/임베디드 표준.
NNAPI를 통해 NPU 가속 지원.
핵심. 8MP에서 NPU 가속을 위해 가장 널리 쓰이는 최종 포맷입니다.

 

 

  2.  i.MX8MP 포팅을 위한 3단계 워크플로우

 

  Step 1: 모델 변환 및 양자화 (Quantization)

    8MP의 NPU는 INT8(정수형) 연산에 최적화되어 있습니다. FP32(부동소수점) 모델을 그대로 올리면 CPU에서만 돌아가 성능이 매우 처참해집니다.

       PTQ (Post-Training Quantization): 학습 완료 후 대표 데이터를 입력해 가중치를 8비트로 압축합니다.

       QAT (Quantization-Aware Training): 학습 단계에서 양자화 오차를 보정합니다. Conformer 같은 복잡한 모델은 QAT를 써야 정확도 손실이 적습니다.

 

  Step 2: NXP eIQ Toolkit 활용

    NXP에서 제공하는 eIQ는 8MP 포팅의 핵심 도구입니다.

       역할: TFLite 모델이 NPU에서 100% 가속될 수 있는지 분석(Profiling)합니다.

       지원: 특정 연산자(Operator)가 NPU에서 지원되지 않으면 CPU로 넘어가게 되는데, eIQ는 이를 미리 확인해 모델 구조를 수정할 수 있게 돕습니다.

 

  Step 3: AAOS 위에서의 가속 (Inference)

    AAOS 환경에서는 모델을 실행할 때 다음 두 가지 경로 중 하나를 선택합니다.

       NNAPI (Android Neural Networks API): 구글 표준 방식입니다. TFLite NNAPI Delegate를 사용하여 가속합니다.

       VX Delegate: NXP가 제공하는 Vivante 전용 가속기입니다. 드라이버 최적화가 더 잘 되어 있어 성능이 가장 좋습니다.

 

 

 

  3.  핵심 튜닝 및 최적화 팁

 

  ① Operator Fusion (연산자 병합)

    ONNX나 TFLite 변환 과정에서 Convolution + BatchNorm + ReLU를 하나의 연산으로 합치면 메모리 접근 횟수가 줄어들어 속도가 비약적으로 향상됩니다.

 

  ② Memory Layout 최적화

8MP NPU는 데이터가 메모리에 배치된 형태(NHWC vs NCHW)에 따라 성능 차이가 큽니다. TFLite는 기본적으로 NHWC를 선호하므로, 모델 설계 시 이를 고려해야 불필요한 레이아웃 변환 오버헤드를 줄일 수 있습니다.

 

  ③ Multi-core 활용 전략

8MP는 4개의 Cortex-A53 CPU와 1개의 NPU를 가지고 있습니다.

       Audio 전처리: Cortex-A53 또는 DSP에서 수행.

       Feature Extraction (Mel-Spec): DSP 또는 NPU 커스텀 연산.

       Main Inference (Conformer/Whisper): NPU 전담.

 

 

  4.  실무자용 체크리스트

 

  (1) 모델 크기: 8MP NPU 메모리 대역폭은 제한적이므로, Whisper보다는 Conformer Small/Tiny 모델을 우선 검토하세요.

  (2) Toolchain: NXP 전용 Yocto 레이어나 AAOS BSP에 OpenVX/VSI-NPU 드라이버가 제대로 포함되어 있는지 확인하세요. (지금 구축 중이신 AAOS 16 버전에서 이 드라이버 정합성이 가장 중요합니다.)

  (3) Profiling: tflite_benchmark 도구를 8MP 보드에서 실행하여 각 레이어별 실행 시간을 측정하고, 병목이 생기는 레이어를 찾아내야 합니다.

 

Tip: Whisper의 경우 Transformer Decoder 구조 때문에 NPU 가속이 까다로울 수 있습니다. 이 경우 Decoder 부분만 CPU에서 돌리거나, 아예 CTC 기반의 Conformer로 선회하는 것이 8MP 환경에서는 더 전략적인 선택일 수 있습니다.

 

 

 

 

혹시 특정 모델(예: Conformer)을 TFLite로 변환하는 과정에서 Unsupported Operator 에러가 발생했나요? 그렇다면 구체적인 에러 내용을 알려주시면 대응 방안을 찾아드릴 수 있습니다.