evez420 commited on
Commit
15fd806
·
verified ·
1 Parent(s): 7a255f8

Upload training/evez-colab-headless.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. training/evez-colab-headless.py +97 -0
training/evez-colab-headless.py ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """EVEZ Colab Training - Headless Runner
3
+ Usage: Run on any machine with GPU access (Colab, Kaggle, local)
4
+ 1. Upload this script + training data
5
+ 2. python3 evez-colab-headless.py
6
+ 3. Adapter weights saved to ./evez-adapter/
7
+ """
8
+ import json
9
+ import os
10
+ import sys
11
+
12
+ def main():
13
+ print("🧬 EVEZ Self-Training Pipeline - Headless Mode")
14
+
15
+ # Install deps
16
+ os.system("pip install -q transformers datasets peft trl torch accelerate")
17
+
18
+ import torch
19
+ if not torch.cuda.is_available():
20
+ print("❌ No GPU detected. This needs CUDA.")
21
+ sys.exit(1)
22
+ print(f"✅ GPU: {torch.cuda.get_device_name(0)}")
23
+
24
+ from transformers import AutoModelForCausalLM, AutoTokenizer
25
+ from peft import LoraConfig, get_peft_model
26
+ from trl import SFTTrainer, SFTConfig
27
+ from datasets import Dataset
28
+
29
+ # Load training data
30
+ data_url = "https://raw.githubusercontent.com/EVEZX/neuros/main/training/evez-alpaca.json"
31
+ try:
32
+ import urllib.request
33
+ urllib.request.urlretrieve(data_url, "evez-alpaca.json")
34
+ with open("evez-alpaca.json") as f:
35
+ data = json.load(f)
36
+ print(f"✅ Loaded {len(data)} instruction pairs")
37
+ except Exception as e:
38
+ print(f"❌ Failed to load data: {e}")
39
+ sys.exit(1)
40
+
41
+ # Format dataset
42
+ formatted = []
43
+ for d in data:
44
+ text = f"### Instruction:\n{d['instruction']}\n### Input:\n{d.get('input','')}\n### Response:\n{d['output']}"
45
+ formatted.append({"text": text})
46
+ dataset = Dataset.from_list(formatted)
47
+
48
+ # Load model
49
+ model_name = "HuggingFaceTB/SmolLM2-135M" # Tiny model for free tier
50
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
51
+ tokenizer.pad_token = tokenizer.eos_token
52
+ model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")
53
+
54
+ # LoRA config
55
+ lora_config = LoraConfig(
56
+ r=8, lora_alpha=16, lora_dropout=0.05,
57
+ target_modules=["q_proj", "v_proj"],
58
+ task_type="CAUSAL_LM"
59
+ )
60
+ model = get_peft_model(model, lora_config)
61
+ model.print_trainable_parameters()
62
+
63
+ # Train
64
+ training_args = SFTConfig(
65
+ output_dir="./evez-adapter",
66
+ num_train_epochs=3,
67
+ per_device_train_batch_size=4,
68
+ learning_rate=2e-4,
69
+ logging_steps=10,
70
+ save_steps=100,
71
+ max_seq_length=512,
72
+ dataset_text_field="text",
73
+ )
74
+
75
+ trainer = SFTTrainer(
76
+ model=model,
77
+ args=training_args,
78
+ train_dataset=dataset,
79
+ processing_class=tokenizer,
80
+ )
81
+
82
+ print("🚀 Starting training...")
83
+ trainer.train()
84
+
85
+ # Save adapter
86
+ model.save_pretrained("./evez-adapter")
87
+ tokenizer.save_pretrained("./evez-adapter")
88
+ print("✅ Adapter saved to ./evez-adapter/")
89
+
90
+ # Optional: push to HF Hub
91
+ if os.environ.get("PUSH_TO_HUB"):
92
+ model.push_to_hub("evez420/EVEZ", token=os.environ.get("HF_TOKEN"))
93
+ tokenizer.push_to_hub("evez420/EVEZ", token=os.environ.get("HF_TOKEN"))
94
+ print("✅ Pushed to HF Hub: evez420/EVEZ")
95
+
96
+ if __name__ == "__main__":
97
+ main()