teolm30 commited on
Commit
f429d15
·
verified ·
1 Parent(s): 883ea98

Upload train.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. train.py +54 -0
train.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Ult1-Coding Fine-Tuning Script
3
+ Fine-tune on any code dataset.
4
+ Requires GPU with ~10 GB VRAM.
5
+
6
+ Usage:
7
+ python train.py --dataset bigcode/the-stack-dedup --subset data/python
8
+ """
9
+ import torch, argparse, os
10
+ from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer, DataCollatorForSeq2Seq
11
+ from peft import LoraConfig, get_peft_model, TaskType
12
+ from datasets import load_dataset
13
+
14
+ parser = argparse.ArgumentParser()
15
+ parser.add_argument("--model", default="teolm30/Ult1-coding")
16
+ parser.add_argument("--dataset", default="code_search_net")
17
+ parser.add_argument("--subset", default="python")
18
+ parser.add_argument("--lr", type=float, default=2e-4)
19
+ parser.add_argument("--epochs", type=int, default=1)
20
+ parser.add_argument("--max_length", type=int, default=1024)
21
+ parser.add_argument("--output", default="./ult1_coding_finetuned")
22
+ args = parser.parse_args()
23
+
24
+ os.makedirs(args.output, exist_ok=True)
25
+
26
+ model = AutoModelForCausalLM.from_pretrained(args.model, torch_dtype=torch.bfloat16, device_map="auto")
27
+ tokenizer = AutoTokenizer.from_pretrained(args.model)
28
+ if tokenizer.pad_token is None:
29
+ tokenizer.pad_token = tokenizer.eos_token
30
+
31
+ lora_config = LoraConfig(r=16, lora_alpha=32, target_modules=["q_proj","k_proj","v_proj","o_proj"], task_type=TaskType.CAUSAL_LM)
32
+ model = get_peft_model(model, lora_config)
33
+ model.print_trainable_parameters()
34
+
35
+ dataset = load_dataset(args.dataset, split="train", streaming=True).take(5000)
36
+ def fmt(ex):
37
+ code = ex.get("code") or ex.get("content") or ex.get("func_code_string") or str(ex)
38
+ return {"text": f"<|im_start|>user\nWrite code:\n<|im_end|>\n<|im_start|>assistant\n{code}<|im_end|>"}
39
+ dataset = dataset.map(fmt)
40
+ def tok(exs):
41
+ return tokenizer(exs["text"], truncation=True, max_length=args.max_length, padding="max_length")
42
+ dataset = dataset.map(tok, remove_columns=[c for c in dataset.column_names if c != "text"], batched=True)
43
+
44
+ args_t = TrainingArguments(
45
+ output_dir=args.output, per_device_train_batch_size=2, gradient_accumulation_steps=8,
46
+ num_train_epochs=args.epochs, learning_rate=args.lr, logging_steps=10,
47
+ save_strategy="epoch", bf16=True, report_to="none",
48
+ )
49
+ trainer = Trainer(model=model, args=args_t, train_dataset=dataset,
50
+ data_collator=DataCollatorForSeq2Seq(tokenizer, pad_to_multiple_of=8))
51
+ trainer.train()
52
+ model.save_pretrained(args.output)
53
+ tokenizer.save_pretrained(args.output)
54
+ print(f"Saved to {args.output}")