oExz commited on
Commit
b3d682a
·
verified ·
1 Parent(s): c258461

Upload train_unsloth.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. train_unsloth.py +92 -0
train_unsloth.py ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # /// script
2
+ # dependencies = [
3
+ # "unsloth",
4
+ # "trl>=0.12.0",
5
+ # "peft>=0.7.0",
6
+ # "trackio",
7
+ # "datasets",
8
+ # "transformers>=4.40.0",
9
+ # "torch>=2.0.0",
10
+ # "huggingface-hub",
11
+ # ]
12
+ # ///
13
+
14
+ import os
15
+ from datasets import load_dataset
16
+ from trl import SFTTrainer, SFTConfig
17
+ from unsloth import FastLanguageModel
18
+ import trackio
19
+
20
+ hf_token = os.getenv("HF_TOKEN")
21
+ if hf_token:
22
+ os.environ.setdefault("HF_HUB_TOKEN", hf_token)
23
+
24
+ DATASET = os.getenv("DATASET", "oExz/reasoning-distill-claude-opus-4-7-max-qwen-format")
25
+ BASE_MODEL = os.getenv("BASE_MODEL", "Qwen/Qwen3.5-4B")
26
+ OUTPUT_REPO = os.getenv("OUTPUT_REPO", "oExz/qwen3.5-4b-reasoning-lora")
27
+
28
+ print(f"Loading dataset {DATASET}...")
29
+ dataset = load_dataset(DATASET)
30
+ train_ds = dataset["train"]
31
+ eval_ds = dataset["eval"]
32
+ print(f"Train: {len(train_ds)}, Eval: {len(eval_ds)}")
33
+
34
+ print(f"Loading base model {BASE_MODEL} with Unsloth...")
35
+ model, tokenizer = FastLanguageModel.from_pretrained(
36
+ model_name=BASE_MODEL,
37
+ max_seq_length=1024,
38
+ dtype=None,
39
+ load_in_4bit=True,
40
+ trust_remote_code=True,
41
+ )
42
+
43
+ model = FastLanguageModel.get_peft_model(
44
+ model,
45
+ r=16,
46
+ lora_alpha=32,
47
+ target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
48
+ lora_dropout=0.05,
49
+ bias="none",
50
+ use_gradient_checkpointing="unsloth",
51
+ random_state=3407,
52
+ )
53
+
54
+ trackio.init(
55
+ project="qwen-reasoning-finetune",
56
+ space_id="oExz/trackio",
57
+ )
58
+
59
+ trainer = SFTTrainer(
60
+ model=model,
61
+ tokenizer=tokenizer,
62
+ train_dataset=train_ds,
63
+ eval_dataset=eval_ds,
64
+ args=SFTConfig(
65
+ output_dir="/tmp/qwen-lora",
66
+ push_to_hub=True,
67
+ hub_model_id=OUTPUT_REPO,
68
+ hub_strategy="every_save",
69
+ num_train_epochs=2,
70
+ per_device_train_batch_size=2,
71
+ gradient_accumulation_steps=4,
72
+ learning_rate=2e-4,
73
+ lr_scheduler_type="cosine",
74
+ warmup_ratio=0.1,
75
+ eval_strategy="steps",
76
+ eval_steps=50,
77
+ save_strategy="steps",
78
+ save_steps=50,
79
+ logging_steps=10,
80
+ report_to="trackio",
81
+ run_name="qwen3.5-4b-reasoning-qlora",
82
+ max_length=1024,
83
+ bf16=True,
84
+ ),
85
+ )
86
+
87
+ print("Starting training...")
88
+ trainer.train()
89
+ print("Training complete, pushing to hub...")
90
+ trainer.push_to_hub()
91
+ print("Done!")
92
+ trackio.finish()