lamekemal commited on
Commit
82bf711
·
verified ·
1 Parent(s): 877c868

Create finetune_full.py

Browse files
Files changed (1) hide show
  1. finetune_full.py +89 -0
finetune_full.py ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # finetune_full.py
2
+ import torch
3
+ from datasets import load_dataset
4
+ from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer
5
+ import os
6
+
7
+ os.environ["OMP_NUM_THREADS"] = "8"
8
+
9
+ base_model = "mistralai/Mistral-7B-Instruct-v0.3"
10
+ new_model_dir = "./mistral-7b-brvm-full-finetuned"
11
+ output_dir = "./results_full"
12
+
13
+ # 1. Dataset
14
+ dataset = load_dataset("lamekemal/brvm_finetune")
15
+
16
+ # 2. Charger modèle + tokenizer en FP16
17
+ model = AutoModelForCausalLM.from_pretrained(
18
+ base_model,
19
+ torch_dtype=torch.float16,
20
+ device_map="auto",
21
+ trust_remote_code=True,
22
+ )
23
+ model.config.use_cache = False
24
+ model.gradient_checkpointing_enable()
25
+
26
+ tokenizer = AutoTokenizer.from_pretrained(base_model, trust_remote_code=True)
27
+ if tokenizer.pad_token is None:
28
+ tokenizer.pad_token = tokenizer.eos_token
29
+ tokenizer.padding_side = "right"
30
+
31
+ # 3. Prétraitement
32
+ def tokenize_function(examples):
33
+ texts = [
34
+ f"Instruction: {instr}\nRéponse: {resp}"
35
+ for instr, resp in zip(examples["instruction"], examples["response"])
36
+ ]
37
+ return tokenizer(
38
+ texts,
39
+ truncation=True,
40
+ padding="max_length",
41
+ max_length=512,
42
+ )
43
+
44
+ tokenized_datasets = dataset.map(tokenize_function, batched=True)
45
+
46
+ # 4. Arguments d’entraînement
47
+ training_args = TrainingArguments(
48
+ output_dir=output_dir,
49
+ num_train_epochs=3,
50
+ per_device_train_batch_size=4, # full finetune = VRAM lourd
51
+ gradient_accumulation_steps=4,
52
+ optim="adamw_torch_fused",
53
+ save_steps=100,
54
+ logging_steps=10,
55
+ learning_rate=2e-5,
56
+ fp16=True,
57
+ max_grad_norm=1.0,
58
+ warmup_ratio=0.03,
59
+ lr_scheduler_type="cosine",
60
+ report_to="tensorboard",
61
+ evaluation_strategy="steps",
62
+ eval_steps=100,
63
+ save_total_limit=2,
64
+ load_best_model_at_end=True,
65
+ metric_for_best_model="eval_loss",
66
+ )
67
+
68
+ # 5. Trainer classique (pas LoRA)
69
+ trainer = Trainer(
70
+ model=model,
71
+ train_dataset=tokenized_datasets["train"],
72
+ eval_dataset=tokenized_datasets["validation"],
73
+ args=training_args,
74
+ )
75
+
76
+ # 6. Entraînement
77
+ trainer.train()
78
+
79
+ # 7. Sauvegarde locale et push Hub
80
+ trainer.save_model(new_model_dir)
81
+ tokenizer.save_pretrained(new_model_dir)
82
+
83
+ from huggingface_hub import HfApi
84
+ api = HfApi()
85
+ repo_id = "lamekemal/mistral-7b-brvm-full-finetuned"
86
+ trainer.push_to_hub(repo_id)
87
+ tokenizer.push_to_hub(repo_id)
88
+
89
+ print(f"✅ Full fine-tune sauvegardé dans {new_model_dir} et poussé sur Hugging Face Hub")