distilbert-base-uncased.py (51 lines of code) (raw):

import torch from transformers import AutoModelForSequenceClassification, AutoTokenizer from datasets import load_dataset import time import argparse def benchmark(model_name, dataset_name, batch_size=8): # Load model and tokenizer tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name) model.to('cuda') # Load dataset dataset = load_dataset(dataset_name, split='test[:10%]') # Tokenize the dataset def preprocess_function(examples): return tokenizer(examples['text'], truncation=True, padding='max_length', max_length=128) tokenized_dataset = dataset.map(preprocess_function, batched=True) tokenized_dataset.set_format(type='torch', columns=['input_ids', 'attention_mask', 'label']) # Prepare dataloader dataloader = torch.utils.data.DataLoader(tokenized_dataset, batch_size=batch_size) # Benchmarking model.eval() start_time = time.time() with torch.no_grad(): for batch in dataloader: input_ids = batch['input_ids'].to('cuda') attention_mask = batch['attention_mask'].to('cuda') outputs = model(input_ids, attention_mask=attention_mask) end_time = time.time() total_time = end_time - start_time print(f'Total time for processing the dataset: {total_time:.2f} seconds') print(f'Average time per batch: {total_time / len(dataloader):.2f} seconds') def interpret_prediction(prediction): sentiment=["Negative Sentiment", "Positive Sentiment"] return sentiment[prediction[0]] def run_inference(model_name, sample_text): # Load model and tokenizer tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name) model.to('cuda') # Tokenize the sample text inputs = tokenizer(sample_text, return_tensors='pt', truncation=True, padding='max_length', max_length=128) inputs = {key: value.to('cuda') for key, value in inputs.items()} # Run inference model.eval() with torch.no_grad(): outputs = model(**inputs) logits = outputs.logits predictions = torch.argmax(logits, dim=-1) return predictions.cpu().numpy() if __name__ == "__main__": parser = argparse.ArgumentParser(description="Benchmark and run inference using a pretrained model") parser.add_argument("--sample_text", type=str, required=True, help="Sample text for inference") args = parser.parse_args() model_name = 'distilbert-base-uncased' dataset_name = 'imdb' # Run benchmark benchmark(model_name, dataset_name) # Run sample inference prediction = run_inference(model_name, args.sample_text) sentiment = interpret_prediction(prediction) print(f'Prediction for sample text: {prediction} ({sentiment})')