import os os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "max_split_size_mb:128" from transformers import ( AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments ) from datasets import load_from_disk import torch import numpy as np from sklearn.metrics import accuracy_score print("="*60) print("QUICK TRAINING IN VIRTUAL ENVIRONMENT") print("="*60) # Load dataset print("šŸ“‚ Loading dataset...") dataset = load_from_disk("data/hf_dataset") # Split dataset dataset = dataset.train_test_split(test_size=0.2, seed=42) print(f"Train size: {len(dataset['train'])}") print(f"Test size: {len(dataset['test'])}") # Load tokenizer and model print("šŸ¤– Loading CodeBERT from Hugging Face...") model_name = "microsoft/codebert-base" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained( model_name, num_labels=2 ) # Tokenization function def tokenize_function(examples): return tokenizer( examples["code"], padding="max_length", truncation=True, max_length=128 ) # Tokenize dataset print("šŸ”¢ Tokenizing dataset...") tokenized_datasets = dataset.map(tokenize_function, batched=True) # Remove text columns (keep only tokens) tokenized_datasets = tokenized_datasets.remove_columns(["code", "type", "explanation"]) tokenized_datasets.set_format("torch") # Training arguments (QUICK - for testing) training_args = TrainingArguments( output_dir="./model_checkpoints", num_train_epochs=3, # Small for quick training per_device_train_batch_size=8, per_device_eval_batch_size=8, warmup_steps=100, weight_decay=0.01, logging_dir="./logs", logging_steps=10, eval_strategy="steps", eval_steps=50, save_strategy="steps", save_steps=100, load_best_model_at_end=True, metric_for_best_model="accuracy", greater_is_better=True, ) # Compute metrics def compute_metrics(p): predictions, labels = p predictions = np.argmax(predictions, axis=1) accuracy = accuracy_score(labels, predictions) return {"accuracy": accuracy} # Create trainer trainer = Trainer( model=model, args=training_args, train_dataset=tokenized_datasets["train"], eval_dataset=tokenized_datasets["test"], compute_metrics=compute_metrics, ) # Train! print("šŸš€ Starting training...") print("This will take 2-5 minutes depending on your system") trainer.train() # Evaluate print("\nšŸ“Š Evaluating model...") metrics = trainer.evaluate() print(f"Test Accuracy: {metrics['eval_accuracy']:.2%}") # Save model print("šŸ’¾ Saving model...") trainer.save_model("saved_model") tokenizer.save_pretrained("saved_model") print("\n" + "="*60) print("šŸŽ‰ TRAINING COMPLETE!") print("Model saved to: saved_model/") print("="*60)