File size: 1,326 Bytes
76ec265
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import os

from onnxruntime.quantization import QuantType, quantize_dynamic

# 경둜 μ„ΈνŒ… (export_onnx.py μ‹€ν–‰ ν›„ μƒμ„±λœ FP32 파일 κ²½λ‘œμ™€ λ§žμΆ°μ„œ μ‚¬μš©)
FP32_ONNX_PATH = "./model_space/convnextv2_fp32.onnx"
INT8_ONNX_PATH = "./model_space/convnextv2_int8.onnx"

if __name__ == "__main__":
    print("Real INT8 Quantization ν”„λ‘œμ„ΈμŠ€")

    if not os.path.exists(FP32_ONNX_PATH):
        raise FileNotFoundError("FP32 ONNX 파일이 μ—†μŠ΅λ‹ˆλ‹€. Step 1을 λ¨Όμ € μ‹€ν–‰ν•΄ μ£Όμ„Έμš”.")

    # 동적 μ–‘μžν™”(Dynamic Quantization) μˆ˜ν–‰
    # - κ°€μ€‘μΉ˜(Weight)λŠ” INT8둜 물리적 λ³€ν™˜λ˜μ–΄ μ €μž₯됨
    # - ν™œμ„±ν™” ν•¨μˆ˜(Activation)λŠ” μΆ”λ‘  μ‹œμ μ— λ™μ μœΌλ‘œ INT8 λ³€ν™˜λ˜μ–΄ μ—°μ‚° 가속
    quantize_dynamic(
        model_input=FP32_ONNX_PATH,
        model_output=INT8_ONNX_PATH,
        weight_type=QuantType.QUInt8,  # μ–‘μžν™” νƒ€μž… μ§€μ • (Unsigned / Signed INT8)
    )

    fp32_size = os.path.getsize(FP32_ONNX_PATH) / (1024 * 1024)
    int8_size = os.path.getsize(INT8_ONNX_PATH) / (1024 * 1024)

    print("\nμ–‘μžν™” μ••μΆ• κ²°κ³Ό 리포트")
    print(f"   - 원본 FP32 λͺ¨λΈ μš©λŸ‰: {fp32_size:.2f} MB")
    print(f"   - μ••μΆ• INT8 λͺ¨λΈ μš©λŸ‰: {int8_size:.2f} MB")
    print(f"   - μ••μΆ•λ₯ : μ•½ {fp32_size / int8_size:.1f}λ°°")