Spaces:
Paused
Paused
| import os | |
| import openvino.runtime as ov | |
| from setfit import SetFitModel | |
| from setfit.exporters.onnx import export_onnx | |
| def export_to_openvino( | |
| model: SetFitModel, | |
| output_path: str = "model.xml", | |
| ) -> None: | |
| """Export a PyTorch backed SetFit model to OpenVINO Intermediate Representation. | |
| Args: | |
| model_body (`SentenceTransformer`): The model_body from a SetFit model body. This should be a | |
| SentenceTransformer. | |
| model_head (`torch.nn.Module` or `LogisticRegression`): The SetFit model head. This can be either a | |
| dense layer SetFitHead or a Sklearn estimator. | |
| output_path (`str`): The path where will be stored the generated OpenVINO model. At a minimum it needs to contain | |
| the name of the final file. | |
| ignore_ir_version (`bool`): Whether to ignore the IR version used in sklearn. The version is often missmatched | |
| with the transformer models. Setting this to true coerces the versions to be the same. This might | |
| cause errors but in practice works. If this is set to False you need to ensure that the IR versions | |
| align between the transformer and the sklearn onnx representation. | |
| """ | |
| # Load the model and get all of the parts. | |
| OPENVINO_SUPPORTED_OPSET = 13 | |
| model.model_body.cpu() | |
| onnx_path = output_path.replace(".xml", ".onnx") | |
| export_onnx( | |
| model.model_body, | |
| model.model_head, | |
| opset=OPENVINO_SUPPORTED_OPSET, | |
| output_path=onnx_path, | |
| ignore_ir_version=True, | |
| use_hummingbird=True, | |
| ) | |
| # Save the final model. | |
| ov_model = ov.Core().read_model(onnx_path) | |
| ov.serialize(ov_model, output_path) | |
| os.remove(onnx_path) | |