Spaces:
Running
Running
File size: 2,815 Bytes
168ae1c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | 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) |