From fd0992af3d1a2d2d098b1fab24f67f8c4cece39d Mon Sep 17 00:00:00 2001
From: 维石 <shixian.shi@alibaba-inc.com>
Date: 星期一, 03 六月 2024 15:32:34 +0800
Subject: [PATCH] update libtorch inference
---
funasr/utils/export_utils.py | 42 ++++++++++++++++++++++++++++++++----------
1 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/funasr/utils/export_utils.py b/funasr/utils/export_utils.py
index bc79539..8f1aa53 100644
--- a/funasr/utils/export_utils.py
+++ b/funasr/utils/export_utils.py
@@ -2,7 +2,7 @@
import torch
-def export_onnx(model, data_in=None, quantize: bool = False, opset_version: int = 14, **kwargs):
+def export(model, data_in=None, quantize: bool = False, opset_version: int = 14, type='onnx', **kwargs):
model_scripts = model.export(**kwargs)
export_dir = kwargs.get("output_dir", os.path.dirname(kwargs.get("init_param")))
os.makedirs(export_dir, exist_ok=True)
@@ -11,14 +11,22 @@
model_scripts = (model_scripts,)
for m in model_scripts:
m.eval()
- _onnx(
- m,
- data_in=data_in,
- quantize=quantize,
- opset_version=opset_version,
- export_dir=export_dir,
- **kwargs
- )
+ if type == 'onnx':
+ _onnx(
+ m,
+ data_in=data_in,
+ quantize=quantize,
+ opset_version=opset_version,
+ export_dir=export_dir,
+ **kwargs
+ )
+ elif type == 'torchscripts':
+ device = 'cuda' if torch.cuda.is_available() else 'cpu'
+ _torchscripts(
+ m,
+ path=export_dir,
+ device=device
+ )
print("output dir: {}".format(export_dir))
return export_dir
@@ -37,7 +45,7 @@
verbose = kwargs.get("verbose", False)
- export_name = model.export_name() if hasattr(model, "export_name") else "model.onnx"
+ export_name = model.export_name + '.onnx'
model_path = os.path.join(export_dir, export_name)
torch.onnx.export(
model,
@@ -70,3 +78,17 @@
weight_type=QuantType.QUInt8,
nodes_to_exclude=nodes_to_exclude,
)
+
+
+def _torchscripts(model, path, device='cuda'):
+ dummy_input = model.export_dummy_inputs()
+
+ if device == 'cuda':
+ model = model.cuda()
+ if isinstance(dummy_input, torch.Tensor):
+ dummy_input = dummy_input.cuda()
+ else:
+ dummy_input = tuple([i.cuda() for i in dummy_input])
+
+ model_script = torch.jit.trace(model, dummy_input)
+ model_script.save(os.path.join(path, f'{model.export_name}.torchscripts'))
--
Gitblit v1.9.1