#!/usr/bin/env python3 # /// script # dependencies = [ # "trl>=0.12.0", # "peft>=0.7.0", # "transformers>=4.36.0", # "accelerate>=0.24.0", # "trackio", # ] # /// from datasets import load_dataset from peft import LoraConfig from trl import SFTTrainer, SFTConfig import trackio import os print("šŸš€ Starting TRL + Trackio Demo") print("=" * 50) # Initialize Trackio with Space sync for remote viewing # Trackio will auto-create the Space if it doesn't exist print("\nšŸ“Š Initializing Trackio...") trackio.init( project="trl-demo", space_id="evalstate/trl-trackio-dashboard", # Auto-creates if needed! config={ "model": "Qwen/Qwen2.5-0.5B", "dataset": "trl-lib/Capybara", "max_steps": 50, # Longer for better visualization "learning_rate": 2e-5, } ) print("āœ… Trackio initialized! Dashboard: https://huggingface.co/spaces/evalstate/trl-trackio-dashboard") # Load a small dataset (200 examples for better visualization) print("\nšŸ“Š Loading dataset...") dataset = load_dataset("trl-lib/Capybara", split="train[:200]") print(f"āœ… Dataset loaded: {len(dataset)} examples") # Get username for hub push username = os.environ.get("HF_USERNAME", "evalstate") # fallback to evalstate # Training configuration with Trackio enabled print("\nāš™ļø Configuring training...") config = SFTConfig( # Output and Hub settings output_dir="trl-demo", push_to_hub=True, hub_model_id=f"{username}/trl-trackio-demo", # Training settings (longer for better metrics) max_steps=50, # More steps for visualization per_device_train_batch_size=2, # Logging (log frequently for real-time monitoring) logging_steps=5, # Trackio monitoring - this is the key! report_to="trackio", # Learning rate learning_rate=2e-5, ) # LoRA configuration (reduces memory usage) print("šŸ”§ Setting up LoRA...") peft_config = LoraConfig( r=8, lora_alpha=16, lora_dropout=0.05, bias="none", task_type="CAUSAL_LM", ) # Initialize trainer print("\nšŸŽÆ Initializing trainer...") trainer = SFTTrainer( model="Qwen/Qwen2.5-0.5B", train_dataset=dataset, args=config, peft_config=peft_config, ) # Train! print("\nšŸƒ Training started...") print("šŸ“ˆ Trackio will track: loss, learning rate, GPU usage, memory, throughput") print("-" * 50) trainer.train() # Save to Hub print("\nšŸ’¾ Pushing to Hub...") trainer.push_to_hub() # Finish Trackio logging print("\nšŸ“Š Finalizing Trackio...") trackio.finish() print("\nāœ… Demo complete!") print(f"šŸ“¦ Model saved to: https://huggingface.co/{username}/trl-trackio-demo") print("šŸ“Š Check Trackio for training metrics and visualizations!")