프로파일링·양자화·배포
관련 기초 개념
개요
C++ 추론의 품질·지연·메모리와 배포 호환을 검증한다.
먼저 비동기 추론·취소·동시성의 핵심 개념을 확인하세요.
핵심 개요
프로파일링은 적재·전처리·추론·후처리·복사·UI 반영을 나눠 시간을 측정하는 작업입니다. 연산만 빨라져도 자료 복사가 지배적이면 전체 체감은 달라지지 않을 수 있습니다.
양자화·스레드·실행 공급자·그래프 최적화는 품질·자원·지원 연산에 영향을 줍니다. 개발 PC의 성공과 사용자 장치의 라이브러리·드라이버·명령어 지원을 구분해 검증합니다.
필요한 용어
- 프로파일링: 단계별 시간·메모리·자원을 측정하는 작업
- 배포 행렬: OS·CPU·GPU·드라이버·런타임 조합의 검증 목록
작동 과정
- 동일 입력의 초기·준비 후 단계별 시간을 잽니다.
- 최적화 조건을 하나씩 바꿉니다.
- 품질·메모리·지연·배포 호환과 복구를 확인합니다.
풀이 예제
아래 입력과 기록은 직접 만든 교육용 가상 자료입니다.
입력·조건
추론은 20ms에서 10ms로 줄었지만 전처리·복사 90ms는 그대로입니다.
판단·결과
전체 시간은 110ms에서 100ms로 줄어 약 9.1% 개선입니다.
이렇게 판단한 이유
부분 시간의 50% 개선을 전체 성능 두 배로 보고하면 잘못된 결론입니다.
로컬 실행 예제
Python 3.12, numpy와 onnxruntime==1.31.0. linear.onnx를 같은 폴더에 받아 python benchmark_onnx.py로 실행합니다.
python -m pip install onnxruntime==1.31.0 numpy
python benchmark_onnx.py"""CPU toy-model timing only: not GPU, quantization or production capacity evidence."""
from pathlib import Path
from statistics import median
from time import perf_counter
import numpy as np
import onnxruntime as ort
options = ort.SessionOptions()
options.intra_op_num_threads = 1
start = perf_counter()
session = ort.InferenceSession(str(Path(__file__).with_name('linear.onnx')), sess_options=options, providers=['CPUExecutionProvider'])
load_ms = (perf_counter()-start)*1000
inputs = {'x':np.array([[1,2,3]],np.float32)}
for _ in range(10):
session.run(['y'], inputs)
times = []
for _ in range(100):
start = perf_counter()
output = session.run(['y'], inputs)[0]
times.append((perf_counter()-start)*1000)
np.testing.assert_allclose(output, [[3,5,7]])
p95 = sorted(times)[94] # nearest-rank 95th percentile of n=100.
assert len(times)==100 and all(t>=0 for t in times)
print(f'PASS: CPU, ORT {ort.__version__}, shape [1,3], intra_op=1, warmup=10, n=100')
print(f'load_ms={load_ms:.3f}, median_ms={median(times):.4f}, p95_ms={p95:.4f}; timings vary by machine')기대 결과: CPU warmup 10회·측정 100회와 load/median/p95 출력. 시간 값은 환경마다 다릅니다.
2026-10-21 소형 CPU 모델에서 실행했습니다. 실제 모델·GPU·양자화 효과·운영 처리 용량은 측정하지 않았습니다.
실습 자료
흔한 실패와 복구
빠른 일부 모델 호출을 모든 문서의 체감 성능으로 일반화하지 않습니다. 입력 크기·장치·작업 전체 시간을 함께 보고합니다.
확인 문제
전체 성능 개선을 판단할 값은?
- 가장 빨라진 연산 한 개만
- 모델 파일 크기 감소율만
- 전체 경로의 품질·지연·자원과 목표 충족
풀이 기록 기능을 불러오는 중…
해설 보기
정답: C. 전체 경로의 품질·지연·자원과 목표 충족
전체 경로의 품질·지연·자원과 목표 충족 빠른 일부 모델 호출을 모든 문서의 체감 성능으로 일반화하지 않습니다. 입력 크기·장치·작업 전체 시간을 함께 보고합니다.
참고 자료
- ONNX Runtime: Performance tuning — 스레드·메모리·실행 공급자 성능 검토.
- ONNX Runtime: C++ — C++ API와 모델 추론 진입점.
자료 확인: 2026-10-21. 사례·문항·실습은 자체 제작했습니다. 외부 서비스 호출과 실제 모델 품질 측정은 학습자가 별도 환경에서 수행합니다.
직접 적용하기
교육용 가상 상황
양자화 모델을 Office 앱에 배포합니다. 품질·스레드·메모리·환경·업데이트 검사를 정하세요.
C++ 추론의 품질·지연·메모리와 배포 호환을 검증한다. 판단 근거와 검증할 결과를 적으세요.
답안 저장 기능을 불러오는 중…
검증 기준과 해설 보기
- 같은 실제 입력으로 품질과 지연을 비교한다
- 대상 장치의 공급자·연산 지원을 확인한다
- 버전 묶음·라이선스·롤백을 준비한다
기준 모델과 양자화 모델을 같은 문서·경계 자료에서 비교합니다. 스레드 수와 동시 작업을 바꾸며 UI 반응·p95·메모리를 측정합니다. 모델·전처리·런타임·드라이버·라이선스 조건을 배포 행렬에 기록하고 실패 시 이전 묶음 복구를 검사합니다.
복습하기
- 부분 최적화가 전체 두 배 개선인가요?
- 양자화 뒤 품질도 재평가하나요?
- 배포 행렬에는 무엇을 적나요?
답변 확인 기준
- 부분 최적화가 전체 두 배 개선인가요?
전체 시간에서 그 단계가 차지한 비중에 따라 다릅니다.
- 양자화 뒤 품질도 재평가하나요?
정밀도 변화가 결과에 영향을 줄 수 있어 필요합니다.
- 배포 행렬에는 무엇을 적나요?
OS·하드웨어·공급자·드라이버·런타임·모델 조합입니다.