blob: e3c037a75d7ef1e34a4529a09f7a35e15125adf1 [file]
"""
prepare.py
This script downloads models from Hugging Face and exports them to ONNX format.
In our example, we use three DistilBERT models:
1. google-bert/bert-base-uncased
2. lorenzozan/ME2-BERT
3. prithivMLmods/Spam-Bert-Uncased
To download and export other models, modify: 1). the `models` list in the main function. 2). the
dummy_inputs and torch.onnx.export function parameters.
"""
import os
import torch
from transformers import AutoModel
DUMMY_SEQ_LENGTH = 32
def export_model_to_onnx(model_name: str, save_dir: str):
"""
Downloads and exports a Hugging Face model to ONNX format.
"""
print(f"Processing {model_name}...")
try:
model = AutoModel.from_pretrained(model_name)
model.eval()
dummy_inputs = {
"input_ids": torch.randint(0, 30522, (1, DUMMY_SEQ_LENGTH)),
"attention_mask": torch.ones((1, DUMMY_SEQ_LENGTH), dtype=torch.long)
}
safe_model_name = model_name.replace("/", "_")
export_path = os.path.join(save_dir, f"{safe_model_name}.onnx")
torch.onnx.export(
model,
(dummy_inputs["input_ids"], dummy_inputs["attention_mask"]),
export_path,
input_names=["input_ids", "attention_mask"],
output_names=["last_hidden_state"],
dynamic_axes={
"input_ids": {0: "batch_size", 1: "sequence_length"},
"attention_mask": {0: "batch_size", 1: "sequence_length"},
"last_hidden_state": {0: "batch_size", 1: "sequence_length"}
},
opset_version=14,
)
print(f"Exported ONNX to {export_path}")
except Exception as e:
print(f"Failed to export {model_name}: {e}")
if __name__ == "__main__":
model_dir = "./models"
os.makedirs(model_dir, exist_ok=True)
models = [
"distilbert/distilbert-base-uncased",
"winegarj/distilbert-base-uncased-finetuned-sst2",
"eliasalbouzidi/distilbert-nsfw-text-classifier"
]
for model_name in models:
export_model_to_onnx(model_name, model_dir)