소스 검색

[Quantization] onnx quantization

wanchen.swc 3 년 전
부모
커밋
525f5d7756
2개의 변경된 파일18개의 추가작업 그리고 6개의 파일을 삭제
  1. 10 6
      funasr/export/README.md
  2. 8 0
      funasr/export/export_model.py

+ 10 - 6
funasr/export/README.md

@@ -11,31 +11,35 @@ The installation is the same as [funasr](../../README.md)
    `Tips`: torch>=1.11.0
 
    ```shell
-   python -m funasr.export.export_model [model_name] [export_dir] [onnx]
+   python -m funasr.export.export_model [model_name] [export_dir] [onnx] [quant]
    ```
    `model_name`: the model is to export. It could be the models from modelscope, or local finetuned model(named: model.pb). 
+
    `export_dir`: the dir where the onnx is export.
-    `onnx`: `true`, export onnx format model; `false`, export torchscripts format model.
+
+   `onnx`: `true`, export onnx format model; `false`, export torchscripts format model.
+
+   `quant`: `true`, export quantized model at the same time; `false`, export fp32 model only.
 
 ## For example
 ### Export onnx format model
 Export model from modelscope
 ```shell
-python -m funasr.export.export_model 'damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch' "./export" true
+python -m funasr.export.export_model 'damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch' "./export" true false
 ```
 Export model from local path, the model'name must be `model.pb`.
 ```shell
-python -m funasr.export.export_model '/mnt/workspace/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch' "./export" true
+python -m funasr.export.export_model '/mnt/workspace/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch' "./export" true false
 ```
 
 ### Export torchscripts format model
 Export model from modelscope
 ```shell
-python -m funasr.export.export_model 'damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch' "./export" false
+python -m funasr.export.export_model 'damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch' "./export" false false
 ```
 
 Export model from local path, the model'name must be `model.pb`.
 ```shell
-python -m funasr.export.export_model '/mnt/workspace/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch' "./export" false
+python -m funasr.export.export_model '/mnt/workspace/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch' "./export" false false
 ```
 

+ 8 - 0
funasr/export/export_model.py

@@ -153,11 +153,19 @@ class ASRModelExportParaformer:
 
         if self.quant:
             from onnxruntime.quantization import QuantType, quantize_dynamic
+            import onnx
             quant_model_path = os.path.join(path, f'{model.model_name}_quant.onnx')
+            onnx_model = onnx.load(model_path)
+            nodes = [n.name for n in onnx_model.graph.node]
+            nodes_to_exclude = [m for m in nodes if 'output' in m]
             quantize_dynamic(
                 model_input=model_path,
                 model_output=quant_model_path,
+                op_types_to_quantize=['MatMul'],
+                per_channel=True,
+                reduce_range=False,
                 weight_type=QuantType.QUInt8,
+                nodes_to_exclude=nodes_to_exclude,
             )