SupportMind / src /export_onnx.py
Asmitha-28's picture
Upload src/export_onnx.py with huggingface_hub
dd41192 verified
import os
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def export_to_onnx():
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
model_dir = os.path.join(base_dir, 'models', 'deberta_ultimate')
onnx_path = os.path.join(model_dir, 'model.onnx')
logger.info(f"Loading PyTorch model from {model_dir}")
model = AutoModelForSequenceClassification.from_pretrained(model_dir)
tokenizer = AutoTokenizer.from_pretrained(model_dir)
# Put model in eval mode generally, but we will force dropout to remain via export params
model.eval()
# Dummy input
text = "This is a test ticket for ONNX export."
inputs = tokenizer(text, return_tensors="pt", max_length=128, padding="max_length", truncation=True)
input_ids = inputs["input_ids"]
attention_mask = inputs["attention_mask"]
logger.info("Exporting to ONNX with TrainingMode.TRAINING to preserve MC Dropout...")
# We must use TrainingMode.TRAINING to keep the Dropout layers active for Monte Carlo sampling
torch.onnx.export(
model,
(input_ids, attention_mask),
onnx_path,
export_params=True,
opset_version=14,
training=torch.onnx.TrainingMode.TRAINING,
do_constant_folding=False,
input_names=['input_ids', 'attention_mask'],
output_names=['logits'],
dynamic_axes={
'input_ids': {0: 'batch_size', 1: 'sequence_length'},
'attention_mask': {0: 'batch_size', 1: 'sequence_length'},
'logits': {0: 'batch_size'}
}
)
logger.info(f"Successfully exported ONNX model to {onnx_path}")
if __name__ == "__main__":
export_to_onnx()