-
모델을 INT8로 줄였는데 결과가 달라진 이유AI Agent 2026. 9. 28. 21:25728x90반응형

간격 0.1에 맞춘 설명용 계산입니다. 실제 모델 오차를 나타내지 않습니다. 동적·정적 양자화의 보정 방식과 평가 입력을 확인한 뒤 파일 크기뿐 아니라 결과 오차와 실제 실행 비용을 비교하세요.
INT8로 바꾼 모델의 예측이 원본과 다르다고 해서 변환이 곧바로 실패한 것은 아닙니다. 양자화는 값을 더 적은 단계로 표현합니다. 그 과정에서 생긴 작은 차이가 분류 경계를 넘으면 최종 답도 달라집니다. 먼저 같은 입력을 두 모델에 넣었는지 확인하고, 어느 조건에서 차이가 커지는지 좁혀야 합니다.
이 글은 2026년 9월 28일 확인한 ONNX 공식 문서를 바탕으로 한 설명입니다. 아래 숫자는 산술 예시이고, 모델의 정확도나 속도를 측정한 결과는 아닙니다.
0.14와 0.16을 담을 칸이 충분하지 않다면
선형 양자화는
scale로 값의 간격을 정하고zero point로 0의 위치를 맞춥니다. 부동소수점 값을 이 간격에 맞는 정수로 반올림한 뒤 표현 범위를 벗어나면 경계값으로 제한합니다. ONNX의 QuantizeLinear 정의는 반올림과 포화 규칙을 함께 설명합니다.간격을 0.1, zero point를 0으로 놓으면 계산은 다음과 같습니다.
- 0.14를 0.1로 나누면 1.4입니다. 정수 1에 맞췄다가 되돌리면 0.1입니다.
- 0.16은 1.6에서 정수 2로 바뀌므로 되돌린 값은 0.2입니다.
두 값 모두 원래 값에서 0.04만큼 달라졌습니다. 만약 0.18 이상일 때 통과시키는 판정이라면 원래 값 0.16은 미달이지만, 되돌린 0.2는 통과합니다. 이 임계값은 원리를 보여 주기 위한 가정입니다. 실제 분류 모델의 마지막 점수가 이 계산 하나로 결정되는 것은 아닙니다.
반올림과 클리핑도 나눠 봐야 합니다. 칸 사이의 값을 가까운 칸에 놓는 것이 반올림입니다. 범위 밖의 값을 마지막 칸으로 모으는 것이 클리핑입니다. 예를 들어 작은 범위에 맞춘 표현으로 아주 큰 값을 받아야 한다면, 간격 오차만 계산해서는 설명이 끝나지 않습니다.
표현할 칸 수가 정해져 있을 때 범위를 넓히면 칸 사이도 넓어집니다. 극단적인 값을 담는 데 유리해져도 자주 나오는 작은 값들을 세밀하게 구분하기 어려울 수 있습니다. 이 때문에 단순히 최대·최소값을 담았다는 사실만으로 좋은 양자화라고 판단할 수 없습니다.
보정 자료는 모델이 쓸 눈금을 정합니다
ONNX Runtime의 정적 양자화는 보정 자료를 모델에 통과시켜 activation의 양자화 파라미터를 구합니다. activation은 입력을 처리하며 생기는 중간 값입니다. 구한 파라미터는 모델에 상수로 기록됩니다. 동적 양자화는 이 파라미터를 추론 중에 구하므로 입력에 따라 대응할 수 있지만 계산 비용이 추가됩니다. ONNX Runtime의 두 방식
정적 방식에서 보정용 사진이 밝은 실내 장면에 치우쳤다고 해보겠습니다. 실제 서비스에는 어두운 복도와 저대비 사진도 들어옵니다. 이때 필요한 비교는 밝은 사진과 어두운 사진의 개수가 아니라, 각 조건에서 원본과 양자화 모델의 결과가 얼마나 달라졌는지입니다. 밝기가 내부 값에 미치는 영향은 모델마다 다르므로 보정 자료 부족을 원인으로 확정하기 전에 실제 차이를 확인합니다.
평가 입력에는 일상적인 사례와 중요한 예외를 함께 넣습니다. 가령 흐릿한 사진의 오분류가 더 큰 문제라면 전체 정답률과 별도로 그 묶음을 봅니다. 정상 사진이 많으면 전체 평균에서 가려질 수 있기 때문입니다. 보정 자료를 고치는 데 반복해서 사용한 자료는 검증용으로 두고, 마지막 확인에 쓸 입력은 따로 남깁니다.
예측이 바뀐 입력 하나부터 따라갑니다
차이가 난 사진 하나를 골랐다면 먼저 전처리 결과를 맞춥니다. 같은 파일이라도 크롭, 채널 순서, 정규화가 다르면 모델에 들어가는 숫자는 달라집니다. 원본은 중앙 크롭, INT8은 단순 크기 조절을 썼다면 양자화 효과와 전처리 효과가 섞입니다.
그다음 최종 라벨뿐 아니라 점수를 함께 봅니다. 가상의 두 클래스 점수가 원본에서 0.51과 0.49였다면 작은 변동으로 순서가 바뀔 여지가 있습니다. 원본에서 크게 앞섰던 클래스가 뒤집힌 사례라면 다른 확인이 필요합니다. 이 숫자는 설명용이며 두 상황의 위험도를 자동으로 판정하는 기준은 아닙니다.
어느 연산부터 차이가 커졌는지 조사할 때 ONNX Runtime은 원본과 양자화 모델의 가중치·activation을 대응시키는 디버깅 도구를 제공합니다. 문서는 양자화 중 그래프 최적화를 함께 수행하면 텐서 대응이 어려워질 수 있어, 최적화를 전처리 단계에서 분리하도록 권합니다. 양자화 디버깅
이 단계에서 찾는 것은 “INT8은 정확하지 않다”는 결론이 아니라, 어느 입력의 어느 부분이 허용 범위를 넘었는지입니다. 민감한 일부 연산의 정밀도를 유지하거나 보정 방법을 바꾼다면, 변경한 모델로 처음의 평가 자료를 다시 확인합니다.
작은 파일과 빠른 실행은 따로 기록합니다
파일 크기는 내려받고 저장할 때의 부담을 보여 줍니다. 실행 메모리에는 중간 텐서 등이 더해지고, 지연 시간에는 양자화·역양자화 비용과 장치의 연산 지원이 영향을 줍니다. ONNX Runtime도 하드웨어와 모델에 따라 성능 이득이 없거나 느려질 수 있다고 설명합니다. 성능 향상이 없는 경우
비교표를 만든다면 같은 행에 원본 파일과 변환 설정을 연결해 두고, 결과는 다음처럼 서로 다른 칸에 적습니다.
개발용 CPU에서 얻은 수치는 배포 GPU의 비용을 대신하지 않습니다. ONNX Runtime 버전과 Execution Provider, 하드웨어, 입력 크기·배치를 함께 기록해야 같은 조건으로 다시 비교할 수 있습니다. 처음 로딩하는 시간과 이미 준비된 모델의 반복 추론도 구분합니다.
배포 기준에 먼저 통과시킵니다
배포 전에는 허용할 품질 저하와 목표 비용을 정합니다. 가령 드물지만 중요한 입력 묶음에서 오차를 허용할 수 없다면, 전체 평균이 비슷해도 그 모델은 요구를 충족하지 못합니다. 반대로 품질이 충분해도 실제 장치에서 더 느리다면 다른 방식이나 원본 유지가 후보입니다.
우선 예측이 달라진 입력을 원본과 동일한 전처리로 재비교하세요. 입력 문제가 없으면 보정 자료와 중간 텐서 차이를 살펴보고, 수정한 모델을 품질과 실행 비용 양쪽에서 다시 평가합니다. 최종 선택에 필요한 것은 파일이 작아졌다는 사실과 함께, 그 파일을 실제로 쓸 조건에서 얻은 비교 결과입니다.
728x90반응형'AI Agent' 카테고리의 다른 글
모델을 받았는데 오프라인에서는 왜 실행이 안 될까 (0) 2026.09.28 ONNX 변환은 성공했는데 입력 크기를 바꾸면 실패하는 이유 (0) 2026.09.28 model.eval()과 inference_mode()는 왜 둘 다 필요할까 (0) 2026.09.28 AI 캐시 토큰 비용을 일반 입력 토큰과 따로 계산해야 할 때 (0) 2026.09.25 확장자 없는 R2 파일을 AI Search가 읽게 하려면 (0) 2026.09.23