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