pulse.huny.dev

HunyDev
ONNX Runtime에서 I/O Binding

ONNX Runtime에서 I/O Binding

I/O 바인딩으로 메모리 복사 줄이기 ONNX Runtime에서 I/O Binding은 입력·출력 텐서를 실행 전에 원하는 메모리(예: GPU 버퍼)에 “바인딩”해 런타임의 불필요한 복사와 동기화를 줄여 지연시간을 낮추는 기법소개

Hun Jang
Hun Jang Nov 23, 2025

왜 쓰나

  • 복사 최소화/제거: 입력이 CPU에 있으면 Run() 중에 GPU로 복사된다. I/O Binding으로 미리 GPU에 올리고 출력 버퍼도 GPU에 선할당하면 런타임 복사가 줄거나 없어짐. (ONNX Runtime)
  • GPU 파이프라인 연계 최적: 모델 A의 출력 버퍼를 그대로 모델 B의 입력으로 연결하는 식의 제로‑카피 체인을 만들기 쉬움. CUDA 스트림·CUDA Graph 같은 최적화와도 궁합이 좋다. (ONNX Runtime)
  • 실전 효과: CUDA EP에서 I/O Binding은 작업에 따라 추론을 눈에 띄게 가속할 수 있다고 문서/사례가 정리되어 있다. (ONNX Runtime)

어떻게 쓰나 (개념)

  • 세션에서 IoBinding 객체를 만들고, 입력/출력 이름별로 디바이스 텐서를 바인딩한 다음 Run(binding)을 호출한다. 언어별로 C/C++/C#/Python/Go API가 제공된다. (ONNX Runtime)

언제 특히 유용하나

  • 전처리/후처리가 GPU 상주일 때(예: WebGPU/DirectML/CUDA 파이프라인). (fs-eire.github.io)
  • 배치 반복 추론에서 같은 버퍼를 재사용할 때(고정 주소 → CUDA Graph 캡처 유리). (ONNX Runtime)

주의 포인트

  • 바인딩하는 메모리의 디바이스/shape/dtype이 모델 기대와 정확히 맞아야 한다. 안 맞으면 결국 복사가 발생한다. (ONNX Runtime)
  • EP별 지원/사용법(예: DirectML, CUDA) 차이가 있어 샘플과 이슈 노트를 참고하자. (GitHub)

원문 가이드와 API 레퍼런스는 여기서 확인하면 된다: I/O Binding 개요, CUDA EP 권장사항, C++/C#/Go/Python API 요약. (ONNX Runtime)

 

You might also like

BlogPro logo
Made with BlogPro