maeyen / train.py
itstalmeez's picture
Upload 12 files
e32469c verified
Raw
History Blame Contribute Delete
2.85 kB
import torch
from datasets import Dataset
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
TrainingArguments
)
from peft import LoraConfig
from trl import SFTTrainer
# --------------------------
# INTERNAL USE ONLY
# See PRIVATE_MODEL_TRAINING_NOTES.md for base model details
# --------------------------
# Configuration (internal use only)
OUTPUT_DIR = "./maeyen-ai-model"
# Use CPU (GPU incompatible)
device = "cpu"
print("Using CPU for training.")
# LoRA Configuration
lora_config = LoraConfig(
r=8,
lora_alpha=16,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
# Training Arguments
training_args = TrainingArguments(
output_dir=OUTPUT_DIR,
per_device_train_batch_size=1,
gradient_accumulation_steps=4,
learning_rate=2e-4,
num_train_epochs=3,
logging_steps=5,
save_strategy="epoch",
fp16=False,
bf16=False,
push_to_hub=False,
report_to="none",
use_cpu=True
)
# Load Model and Tokenizer
print("Loading model and tokenizer...")
# See PRIVATE_MODEL_TRAINING_NOTES.md for base model name
# Replace "BASE_MODEL_NAME_HERE" with actual base model from private notes
BASE_MODEL_NAME = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
model = AutoModelForCausalLM.from_pretrained(
BASE_MODEL_NAME,
device_map="cpu",
trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL_NAME)
tokenizer.pad_token = tokenizer.eos_token
# Synthetic Data
synthetic_data = [
{
"text": "<|im_start|>system\nYou are Maeyen AI Transaction Risk Agent. Assess risk and output valid JSON only with requires_human_review: true.<|im_end|>\n<|im_start|>user\nTransaction:\n- Seller verified: true\n- Buyer verified: false\n- Amount: 250000 NGN\n- Category: electronics\n- Seller transactions: 3\n- Seller dispute rate: 0.25\n- Evidence: product_photo, tracking_number\n- Missing: packing_video, serial_number<|im_end|>\n<|im_start|>assistant\n{\"risk_level\": \"high\", \"risk_score\": 82, \"reasons\": [\"High-value electronics transaction\", \"Seller has limited transaction history\", \"Seller dispute rate is high\", \"Serial number and packing video are missing\"], \"recommended_action\": \"Do not release payment. Request more delivery evidence and admin review.\", \"requires_human_review\": true}<|im_end|>"
}
]
dataset = Dataset.from_list(synthetic_data)
# Train
print("Starting training...")
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
args=training_args,
peft_config=lora_config,
max_seq_length=1024
)
trainer.train()
# Save
trainer.model.save_pretrained(OUTPUT_DIR)
tokenizer.save_pretrained(OUTPUT_DIR)
print(f"Training complete! LoRA adapter saved to {OUTPUT_DIR}")
print("\nIMPORTANT: See PRIVATE_MODEL_TRAINING_NOTES.md for full details.")