NeuralAI / training /train_precision.py
Subject-Emu-5259's picture
Push NeuralAI project files - training data, scripts, services, knowledge base
38b4eff verified
Raw
History Blame Contribute Delete
1.88 kB
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import DPOTrainer, DPOConfig
from datasets import load_dataset
from peft import LoraConfig, get_peft_model, PeftModel
import os
def train_precision():
base_model_id = "HuggingFaceTB/SmolLM2-360M-Instruct"
# We start from the already aligned DPO model to further refine it
current_adapter_path = "/home/workspace/Projects/NeuralAI/training/checkpoints/dpo_tpu_model"
dataset_path = "/home/workspace/Projects/NeuralAI/data/dpo_cli_precision.jsonl"
output_dir = "/home/workspace/Projects/NeuralAI/training/checkpoints/precision_model"
print(f"Loading model and adapters from {current_adapter_path}...")
tokenizer = AutoTokenizer.from_pretrained(base_model_id)
tokenizer.pad_token = tokenizer.eos_token
# Load the DPO aligned model as the starting point
model = AutoModelForCausalLM.from_pretrained(base_model_id, torch_dtype=torch.float32, device_map="cpu")
model = PeftModel.from_pretrained(model, current_adapter_path, is_trainable=True)
# Load precision dataset
dataset = load_dataset("json", data_files=dataset_path, split="train")
# DPO Config
config = DPOConfig(
output_dir=output_dir,
beta=0.1,
max_prompt_length=128,
max_length=512,
per_device_train_batch_size=1,
learning_rate=5e-6,
num_train_epochs=3,
logging_steps=1,
save_strategy="no",
report_to="none"
)
trainer = DPOTrainer(
model=model,
args=config,
train_dataset=dataset,
tokenizer=tokenizer,
)
print("Starting precision refinement training...")
trainer.train()
# Save the refined model
trainer.save_model(output_dir)
print(f"Precision model saved to {output_dir}")
if __name__ == "__main__":
train_precision()