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) | |