| 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}λ°°") | |