gonzalolinares commited on
Commit
17a6842
·
verified ·
1 Parent(s): a41fb61

SFT script

Browse files
Files changed (1) hide show
  1. train_sft.py +64 -0
train_sft.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # /// script
2
+ # dependencies = ["trl>=0.12.0", "peft>=0.7.0", "trackio", "datasets", "transformers", "accelerate", "torch"]
3
+ # ///
4
+ """SFT on compile-verified C++ curriculum. Designed for Hugging Face Jobs (uv)."""
5
+
6
+ import os
7
+
8
+ from datasets import load_dataset
9
+ from peft import LoraConfig
10
+ from trl import SFTConfig, SFTTrainer
11
+
12
+ DATASET_ID = os.environ.get("DATASET_ID", "gonzalolinares/cpp-compiler-curriculum")
13
+ MODEL_ID = os.environ.get("MODEL_ID", "Qwen/Qwen2.5-1.5B-Instruct")
14
+ HUB_MODEL_ID = os.environ.get("HUB_MODEL_ID", "gonzalolinares/qwen25-1.5b-cpp-sft")
15
+ OUTPUT_DIR = os.environ.get("OUTPUT_DIR", "qwen25-1.5b-cpp-sft")
16
+
17
+
18
+ def main() -> None:
19
+ ds = load_dataset(DATASET_ID, split="train")
20
+ # Keep messages format for SFTTrainer chat templates
21
+ if "messages" not in ds.column_names:
22
+ raise SystemExit(f"Dataset must have 'messages'; got {ds.column_names}")
23
+
24
+ split = ds.train_test_split(test_size=0.1, seed=42)
25
+
26
+ trainer = SFTTrainer(
27
+ model=MODEL_ID,
28
+ train_dataset=split["train"],
29
+ eval_dataset=split["test"],
30
+ peft_config=LoraConfig(
31
+ r=16,
32
+ lora_alpha=32,
33
+ lora_dropout=0.05,
34
+ bias="none",
35
+ task_type="CAUSAL_LM",
36
+ target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
37
+ ),
38
+ args=SFTConfig(
39
+ output_dir=OUTPUT_DIR,
40
+ num_train_epochs=3,
41
+ per_device_train_batch_size=2,
42
+ per_device_eval_batch_size=2,
43
+ gradient_accumulation_steps=8,
44
+ learning_rate=2e-4,
45
+ logging_steps=5,
46
+ eval_strategy="steps",
47
+ eval_steps=20,
48
+ save_steps=50,
49
+ max_length=1024,
50
+ bf16=True,
51
+ push_to_hub=True,
52
+ hub_model_id=HUB_MODEL_ID,
53
+ report_to="trackio",
54
+ project="cpp-compiler-rl",
55
+ run_name="sft-qwen25-1.5b",
56
+ ),
57
+ )
58
+ trainer.train()
59
+ trainer.push_to_hub()
60
+ print(f"Pushed to {HUB_MODEL_ID}")
61
+
62
+
63
+ if __name__ == "__main__":
64
+ main()