Views
No views yet
Mean: 0.00075560
Std Dev: 0.00073272
Min: 0.00000095
Max: 0.01000583
Median: 0.00054353
Quantiles:
25th percentile: 0.00024071
50th percentile: 0.00054353
75th percentile: 0.00103680
90th percentile: 0.00168392
95th percentile: 0.00217985
99th percentile: 0.003339041from optimum.onnxruntime import ORTOptimizer, ORTModelForSequenceClassification, AutoOptimizationConfig
2from transformers import AutoTokenizer
3
4model_id = "cardiffnlp/twitter-xlm-roberta-base-sentiment"
5save_dir = "./model-onnx-fp16"
6
7# 1. Export the base model to ONNX
8model = ORTModelForSequenceClassification.from_pretrained(model_id, export=True)
9tokenizer = AutoTokenizer.from_pretrained(model_id)
10
11# 2. Setup the Optimizer
12optimizer = ORTOptimizer.from_pretrained(model)
13
14# 3. Apply O4 Optimization (GPU-only FP16)
15optimization_config = AutoOptimizationConfig.O4()
16
17optimizer.optimize(
18 save_dir=save_dir,
19 optimization_config=optimization_config
20)
21
22# 4. Save tokenizer for a complete package
23tokenizer.save_pretrained(save_dir)pip install optimum[onnxruntime-gpu] --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/1import pandas as pd
2import torch
3from tqdm import tqdm
4from transformers import AutoTokenizer
5from optimum.onnxruntime import ORTModelForSequenceClassification
6
7def sentiment_analysis_batched(df, batch_size, field_name):
8 # Replace with your HuggingFace username/model_id after uploading
9 model_id = 'YOUR_USERNAME/YOUR_MODEL_ID'
10 file_name = 'model.onnx'
11 gpu_id = 0
12
13 model = ORTModelForSequenceClassification.from_pretrained(model_id, file_name=file_name, provider="CUDAExecutionProvider", provider_options={'device_id': gpu_id})
14 device = torch.device(f"cuda:{gpu_id}")
15
16 tokenizer = AutoTokenizer.from_pretrained(model_id)
17
18 results = []
19
20 # Precompute id2label mapping
21 id2label = model.config.id2label
22
23 total_samples = len(df)
24 with tqdm(total=total_samples, desc="Processing samples") as pbar:
25 for start_idx in range(0, total_samples, batch_size):
26 end_idx = start_idx + batch_size
27 texts = df[field_name].iloc[start_idx:end_idx].tolist()
28
29 inputs = tokenizer(texts, padding=True, truncation=True, return_tensors="pt", max_length=512)
30 input_ids = inputs['input_ids'].to(device)
31 attention_mask = inputs['attention_mask'].to(device)
32
33 with torch.no_grad():
34 outputs = model(input_ids, attention_mask=attention_mask)
35 predictions = torch.sigmoid(outputs.logits) # Use sigmoid for multi-label classification
36
37 # Collect predictions on GPU
38 results.append(predictions)
39
40 pbar.update(end_idx - start_idx)
41
42 # Concatenate all results on GPU
43 all_predictions = torch.cat(results, dim=0).cpu().numpy()
44
45 # Convert to DataFrame
46 predictions_df = pd.DataFrame(all_predictions, columns=[id2label[i] for i in range(all_predictions.shape[1])])
47
48 # Add prediction columns to the original DataFrame
49 combined_df = pd.concat([df.reset_index(drop=True), predictions_df], axis=1)
50
51 return combined_df
52
53df = pd.read_csv('https://github.com/joaopn/gpu_benchmark_goemotions/raw/main/data/random_sample_10k.csv.gz')
54df = sentiment_analysis_batched(df, batch_size=8, field_name='body')