ai-code-scanner-ui / quick_train.py
mubi-613's picture
Initial clean commit: Fixed security issues and removed heavy checkpoints
168ae1c
Raw
History Blame Contribute Delete
2.82 kB
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)