#!/usr/bin/env python3 """ AEGIS v2.2 Training Script SO(8) NKAT Geometric Neural Network Training on AXCEPT-Borea-Phi3.5-instinct-jp This script demonstrates how AEGIS v2.2 was trained with: 1. Base model: AXCEPT-Borea-Phi3.5-instinct-jp (Microsoft Phi-3.5-mini-instruct 기반의 일본어 특화 모델) 2. SO(8) NKAT adapters for geometric reasoning 3. Supervised Fine-Tuning + RLPO with geometric rewards """ import torch from transformers import ( AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, DataCollatorForLanguageModeling ) from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training # Import SO(8) NKAT components try: from scripts.models.so8t_transformer import NKATMLPWrapper, SO8ResidualAdapter from scripts.models.so8t_adapter import inject_nkat_to_all_layers except ImportError: print("Warning: SO(8) NKAT components not available") NKATMLPWrapper = None SO8ResidualAdapter = None inject_nkat_to_all_layers = None def load_base_model(): """Load AXCEPT-Borea-Phi3.5-instinct-jp as base model""" model_name = "AXCEPT-Borea-Phi3.5-instinct-jp" print(f"Loading base model: {model_name}") tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype=torch.float16, device_map="auto" ) return model, tokenizer def apply_so8_adapters(model): """Apply SO(8) NKAT adapters to the model""" if inject_nkat_to_all_layers is None: print("Warning: SO(8) adapters not available, skipping") return model print("Applying SO(8) NKAT adapters...") model = inject_nkat_to_all_layers( model, adapter_hidden_size=256, alpha_init=-0.1, nkat_target_layers="all", nkat_mode="full_layer" ) return model def setup_lora(model): """Setup LoRA for efficient fine-tuning""" lora_config = LoraConfig( r=64, lora_alpha=128, lora_dropout=0.05, target_modules=["gate_proj", "up_proj", "down_proj"], bias="none", task_type="CAUSAL_LM" ) model = prepare_model_for_kbit_training(model) model = get_peft_model(model, lora_config) return model def create_training_args(): """Create training arguments for SFT + RLPO""" return TrainingArguments( output_dir="./aegis_v22_training", num_train_epochs=3, per_device_train_batch_size=2, per_device_eval_batch_size=2, gradient_accumulation_steps=4, learning_rate=1e-5, weight_decay=0.01, warmup_steps=100, logging_steps=10, save_steps=500, evaluation_strategy="steps", eval_steps=500, save_total_limit=3, load_best_model_at_end=True, fp16=True, dataloader_num_workers=4, remove_unused_columns=False, ) def main(): """Main training function""" print("AEGIS v2.2 Training Script") print("=" * 50) print("Step 1: Loading base model (AXCEPT-Borea-Phi3.5-instinct-jp)") # Load base model model, tokenizer = load_base_model() print("Step 2: Applying SO(8) NKAT adapters") model = apply_so8_adapters(model) print("Step 3: Setting up LoRA") model = setup_lora(model) print("Step 4: Preparing training arguments") training_args = create_training_args() print("Step 5: Loading datasets") # Note: Actual dataset loading would go here # train_dataset = load_dataset("path/to/training/data") # eval_dataset = load_dataset("path/to/eval/data") print("Step 6: Setting up Trainer") # trainer = Trainer( # model=model, # args=training_args, # train_dataset=train_dataset, # eval_dataset=eval_dataset, # tokenizer=tokenizer, # data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False), # ) print("Step 7: Starting Supervised Fine-Tuning") # trainer.train() print("Step 8: RLPO Training with Geometric Rewards") # RLPO training would follow SFT # This involves preference learning with SO(8) geometric reward modeling print("Step 9: Saving final model") # trainer.save_model("./aegis_v22_final") print("\nAEGIS v2.2 training completed!") print("Key features:") print("- Base model: AXCEPT-Borea-Phi3.5-instinct-jp") print("- SO(8) NKAT geometric reasoning adapters") print("- Supervised Fine-Tuning + RLPO") print("- Optimized for mathematical and Japanese reasoning") if __name__ == "__main__": main()