ssdavid commited on
Commit
6cf53e5
·
verified ·
1 Parent(s): 46aabde

Upload train_smollm2_compact.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. train_smollm2_compact.py +73 -0
train_smollm2_compact.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # /// script
2
+ # requires-python = ">=3.10"
3
+ # dependencies = [
4
+ # "transformers>=4.45.0",
5
+ # "datasets>=2.14.0",
6
+ # "trl>=0.12.0",
7
+ # "peft>=0.13.0",
8
+ # "accelerate>=0.34.0",
9
+ # "bitsandbytes>=0.44.0",
10
+ # "trackio>=0.1.0",
11
+ # "huggingface_hub>=0.25.0",
12
+ # ]
13
+ # ///
14
+
15
+ import os
16
+ import trackio
17
+ from datasets import load_dataset
18
+ from transformers import AutoModelForCausalLM, AutoTokenizer
19
+ from trl import SFTConfig, SFTTrainer
20
+
21
+ # Initialize tracking
22
+ trackio.init(project="obsidian-bases-slm-compact")
23
+
24
+ # Config
25
+ MODEL_ID = "HuggingFaceTB/SmolLM2-135M-Instruct"
26
+ DATASET_ID = "ssdavid/obsidian-bases-query-v2-compact"
27
+ OUTPUT_REPO = "ssdavid/obsidian-bases-slm-compact"
28
+
29
+ # Load dataset
30
+ print(f"Loading dataset: {DATASET_ID}")
31
+ dataset = load_dataset(DATASET_ID, split="train")
32
+ print(f"Dataset size: {len(dataset)}")
33
+
34
+ # Load model and tokenizer
35
+ print(f"Loading model: {MODEL_ID}")
36
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
37
+ model = AutoModelForCausalLM.from_pretrained(MODEL_ID)
38
+
39
+ if tokenizer.pad_token is None:
40
+ tokenizer.pad_token = tokenizer.eos_token
41
+
42
+ # Training config
43
+ training_args = SFTConfig(
44
+ output_dir="./output",
45
+ num_train_epochs=3,
46
+ per_device_train_batch_size=8,
47
+ gradient_accumulation_steps=2,
48
+ learning_rate=2e-5,
49
+ warmup_ratio=0.1,
50
+ logging_steps=10,
51
+ save_strategy="epoch",
52
+ push_to_hub=True,
53
+ hub_model_id=OUTPUT_REPO,
54
+ hub_token=os.environ.get("HF_TOKEN"),
55
+ report_to=["trackio"],
56
+ )
57
+
58
+ # Trainer
59
+ trainer = SFTTrainer(
60
+ model=model,
61
+ args=training_args,
62
+ train_dataset=dataset,
63
+ processing_class=tokenizer,
64
+ )
65
+
66
+ # Train
67
+ print("Starting training...")
68
+ trainer.train()
69
+
70
+ # Push final model
71
+ print("Pushing to Hub...")
72
+ trainer.push_to_hub()
73
+ print(f"✓ Model pushed to {OUTPUT_REPO}")