파라미터 수와 한 성분의 저장 크기를 곱한다
모델의 파라미터는 학습된 가중치/편향 같은 수치 성분이다. 파라미터 수 N과 성분당 bit 수 b가 주어지면 메타데이터/압축을 제외한 단순 저장량은 N×b/8 byte다. bit는 이진 자리 하나이고 8 bit가 1 byte다. 여기의 MB는 100만 byte이며 MiB와 구분한다. N=천만이면 float32는 40 MB, float16은 20 MB, int8은 10 MB다. 이는 같은 성분 수의 원시 배열 비교이며 실제 파일 크기/실행 RAM과 다를 수 있다.
모델 크기를 줄이는 방법도 구분한다. 작은 구조로 N을 줄이면 모델 자체가 바뀌고, 정밀도를 바꾸면 같은 성분을 표현하는 자료형/범위가 바뀐다. float16과 int8은 단지 bit 수 차이만 있는 것이 아니라 수의 표현 방식도 다르다. 가중치만 저정밀도이고 활성값은 다른 형식일 수 있으며, 일부 연산을 고정밀도로 유지하는 혼합 구성도 있다. 모든 텐서가 같은 bit라고 가정하지 않는다.
실행에는 활성값/임시 작업 공간·입력/출력 복사와 런타임이 추가된다. int8 배열이 4분의 1 크기라고 전체 메모리나 지연이 정확히 4분의 1이 되는 것은 아니다. 연산 커널은 특정 자료형/shape에 맞춘 실제 실행 코드다. 장치/런타임이 필요한 커널을 지원하지 않으면 변환/다른 장치 실행 비용이 늘거나 실행이 실패할 수 있다. 저장 가능, 실행 가능, 목표 성능 달성을 다른 판정으로 둔다.
양자화는 연속 값을 유한한 격자로 옮기는 근사다
교육용 affine 양자화에서 실수 x를 정수 q로 옮기고 복원값 x_hat을 다음처럼 정의한다. scale s는 양의 실수이고 한 정수 간격에 해당하는 크기, zero point z는 실수 0을 나타내는 정수다. round는 가까운 정수로 반올림하며 이번 예는 정확히 중간인 입력을 사용하지 않는다. clip은 최솟값/최댓값 밖의 정수를 경계에 고정하는 연산이다.
int8 범위를 −128~127, s=0.02, z=0으로 정한 무차원 예에서 x=0.734이면 x/s=36.7→q=37→복원 0.74다. 부호 있는 오차를 복원−원본으로 정하면 +0.006이다. 정수 37 자체를 물리 행동 37 rad로 쓰는 것이 아니다. 원래 성분의 단위/정규화와 양자화 복원을 연결해야 한다.
범위 안에서 포화가 없으면 최근접 반올림의 절대 오차는 간격의 절반인 0.01 이하이다. 그러나 x=3이면 q 후보 150을 127로 clip하고 복원값은 2.54, 오차는 −0.46이다. 범위 밖에서는 0.01 상한을 적용할 수 없다. 포화로 서로 다른 큰 값이 같은 경계에 모일 수 있다는 것이 실패의 핵심이다. 이 단순 오차 상한이 여러 층을 지난 모델 출력/작업 성공 오차 상한을 보장하지도 않는다.
보정 자료로 정한 범위와 시험 자료를 분리한다
ONNX Runtime 공식 설명은 정적 양자화의 활성값 범위를 보정 자료로 미리 정하는 방법과 동적으로 범위를 계산하는 방법을 구분한다. 보정(calibration)은 이 문맥에서 양자화 범위/scale 등을 정하는 과정이며 카메라 기하 보정과 목적이 다르다. 양자화 인식 학습은 학습 중 근사 영향을 고려하는 별도 접근이다. 이 단위는 실제 변환 API를 실행하지 않는다.
보정 입력이 밝은 장면뿐이면 어두운 장면의 활성값/오류가 달라질 수 있다. 입력 전처리·관측 범위가 실제 운용과 관련 있는지 확인하고, 최종 시험을 보고 반복해서 범위를 골랐다면 그 시험은 독립 평가가 아니다. 설정 선택용 자료와 잠근 시험을 나누고 원 모델/변환 모델을 같은 입력·지표로 비교한다. 원래 모델의 오차도 있으므로 두 출력의 차이만 작다고 과업을 잘 수행한다고 결론내리지 않는다.
연산자/하드웨어 지원과 변환 오버헤드 때문에 양자화가 느려질 수도 있다는 것이 공식 문서의 중요한 경계다. 따라서 비트 수만으로 가속 배수를 쓰지 않고, 모델/런타임·장치와 실제 실행 경로를 함께 기록한다. 특정 변환 파일 하나의 결과를 모든 CPU/GPU나 다른 해상도에 전이하지 않는다.
batch 처리량의 향상은 각 관측의 지연과 다르다
batch B는 한 번의 모델 실행에 함께 넣는 입력 수다. 독립 카메라 여러 대의 입력을 묶는 것과 같은 로봇의 과거 프레임을 묶는 것은 입력 의미가 다르다. batch 축과 정책의 시간창 축을 혼동하지 않는다. 관측을 모으는 대기 시간도 실행 시간과 별개다.
합성 표에서 B=1의 실행 시간이 12 ms이면 실행 구간 처리량은 1/0.012≈83.3개/s다. B=4의 실행 시간이 28 ms이면 4/0.028≈142.9개/s다. 그러나 10 ms 간격으로 0/10/20/30 ms에 도착한 네 입력을 모두 기다렸다가 30 ms에 실행을 시작하고 58 ms에 끝내면 개별 지연은 58/48/38/28 ms다. 28/4=7 ms는 입력당 평균 계산 비용에 가까운 비율이며 각 관측의 응답 지연이 아니다.
기한 40 ms라면 첫 두 입력은 기한을 놓친다. 이 한 묶음의 계산은 정상상태 큐의 안정성을 입증하지 않는다. 도착률/처리율과 연속 batch의 서비스·대기 정책을 별도로 검토해야 한다. 제어에서 오래된 관측이 생기면 처리량 향상이 과업 성공에 도움이 되지 않을 수 있다. 적은 batch가 무조건 최선이라는 뜻도 아니며 요청/기한과 자원에 맞춰 판정한다.
가상 비교에서 변환 전후 같은 독립 시험 100건의 분류 정답이 94/92건, 별도 작업 시험 20건의 성공이 16/14건이었다고 주면 정확도는 94/92%, 작업 성공률은 80/70%다. 시간과 메모리가 좋아도 어떤 손실을 허용할지 사전 기준이 필요하다. 이 작은 표로 통계적 우열이나 실제 로봇 성과를 주장하지 않는다. 기존 5.10 평가와 6.2 정량 진단을 함께 사용하자.