toufImed commited on
Commit
0dbf59c
·
verified ·
1 Parent(s): ba403b4

Training in progress, epoch 1

Browse files
adapter_model.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:79a28d9ed1478cfa8e0b6c291207f256fa9887b6a33432dd0c5bf237aa1d4ace
3
  size 13648432
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:654ffab5d59c705d6a9955d68660fe9f935b3c23ea328b42abb4a43196d85511
3
  size 13648432
job_run_finetune_llama3_1_8b.py ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Installing More Dependencies
2
+ import torch
3
+ from datasets import load_dataset, Dataset
4
+ from peft import LoraConfig, AutoPeftModelForCausalLM, get_peft_model, PeftModel
5
+ from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TrainingArguments
6
+ from trl import SFTTrainer
7
+ import os
8
+
9
+ # Configuration
10
+ #MODEL_ID = "NousResearch/Meta-Llama-3.1-8B-Instruct"
11
+ MODEL_ID = "meta-llama/Llama-3.1-8B-Instruct"
12
+ OUTPUT_DIR = "./fine_tunned_dodel_ul2"
13
+ DATASET_NAME = "your_dataset" # Remplacer par votre dataset
14
+ # Charger le modèle et le tokenizer
15
+
16
+ bnb_config = BitsAndBytesConfig(
17
+ load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype="float16", bnb_4bit_use_double_quant=True
18
+ )
19
+ try:
20
+ model = AutoModelForCausalLM.from_pretrained(
21
+ MODEL_ID,
22
+ torch_dtype=torch.float16,
23
+ device_map="auto",
24
+ trust_remote_code=True,
25
+ quantization_config=bnb_config,
26
+ #max_memory={0: "18GB", "cpu": "24GB"} # Ajuste la mémoire GPU et CPU
27
+ )
28
+ except torch.cuda.OutOfMemoryError:
29
+ print("Erreur de mémoire GPU. Tentative avec des paramètres réduits...")
30
+ model = AutoModelForCausalLM.from_pretrained(
31
+ MODEL_ID,
32
+ torch_dtype=torch.float16,
33
+ device_map="auto",
34
+ trust_remote_code=True,
35
+ quantization_config=bnb_config,
36
+ #max_memory={0: "8GB", "cpu": "32GB"}, # Réduit la mémoire GPU, augmente CPU
37
+ load_in_8bit=True # Active la quantification 8-bit
38
+ )
39
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
40
+ tokenizer.pad_token = tokenizer.eos_token # Configure le pad_token comme étant l'eos_token
41
+ lora_config = LoraConfig(
42
+ r=8,
43
+ lora_alpha=32,
44
+ lora_dropout=0.05,
45
+ bias="none",
46
+ task_type="CAUSAL_LM"
47
+ )
48
+ # Appliquer LoRA au modèle
49
+ model = get_peft_model(model, lora_config)
50
+ # Préparer le dataset
51
+ dataset = dataset = load_dataset(
52
+ "json",
53
+ data_files={
54
+ "train": "datasets/train.json",
55
+ "validation": "datasets/validation.json",
56
+ "test": "datasets/test.json"
57
+ }
58
+ )
59
+
60
+ def tokenize_function(examples):
61
+ # return self.tokenizer(
62
+ # examples["text"],
63
+ # padding="max_length",
64
+ # truncation=True,
65
+ # max_length=self.config.max_length
66
+ # )
67
+ """
68
+ Fonction de prétraitement des exemples :
69
+ - Concatène le contexte et la question pour créer les entrées
70
+ - Tokenise les entrées et les réponses cibles
71
+ """
72
+ # Concaténer contexte et question pour chaque exemple
73
+ inputs = [context + " " + question for context, question in zip(examples["context"], examples["question"])]
74
+
75
+ # Extraire les réponses ciblées
76
+ targets = examples["response"]
77
+
78
+ # Tokenisation des entrées avec padding et troncature
79
+ model_inputs = tokenizer(
80
+ inputs,
81
+ padding="max_length",
82
+ truncation=True,
83
+ max_length=512,
84
+ return_tensors="pt"
85
+ )
86
+
87
+ # Tokenisation des cibles avec padding et troncature
88
+ with tokenizer.as_target_tokenizer():
89
+ labels = tokenizer(
90
+ targets,
91
+ padding="max_length",
92
+ truncation=True,
93
+ max_length=128,
94
+ return_tensors="pt"
95
+ )
96
+
97
+ # Activation des gradients uniquement pour input_ids et labels
98
+ model_inputs["input_ids"] = model_inputs["input_ids"]
99
+ # model_inputs["labels"] = model_inputs["labels"]
100
+
101
+ # model_inputs["input_ids"] = model_inputs["input_ids"].cpu().requires_grad_(True).to(model.device)
102
+ # model_inputs["labels"] = model_inputs["labels"].cpu().requires_grad_(True).to(model.device)
103
+ return model_inputs
104
+
105
+ train_data = dataset['train']
106
+ eval_data = dataset['validation']
107
+ train_dataset = train_data.map(tokenize_function, batched=True)
108
+ eval_dataset = eval_data.map(tokenize_function, batched=True) if eval_data else None
109
+ # tokenized_dataset = dataset.map(
110
+ # lambda x: tokenizer(x["text"], truncation=True, padding="max_length", max_length=512),
111
+ # batched=True
112
+ # )
113
+ # Configuration de l'entraînement
114
+ peft_config = LoraConfig(
115
+ r=8, lora_alpha=16, lora_dropout=0.05, bias="none", task_type="CAUSAL_LM"
116
+ )
117
+ training_args = TrainingArguments(
118
+ output_dir=OUTPUT_DIR,
119
+ num_train_epochs=3,
120
+ per_device_train_batch_size=4, # Réduit de 4 à 2
121
+ gradient_accumulation_steps=16, # Augmenté de 4 à 8
122
+ learning_rate=2e-4,
123
+ fp16=True,
124
+ save_strategy="epoch",
125
+ gradient_checkpointing=True, # Active le gradient checkpointing
126
+ max_grad_norm=0.3,
127
+ push_to_hub=True # Limite le gradient pour économiser la mémoire
128
+ )
129
+ # Initialiser le trainer
130
+ trainer = SFTTrainer(
131
+ model=model,
132
+ train_dataset=train_dataset,
133
+ eval_dataset=eval_dataset,
134
+ peft_config=peft_config,
135
+ #dataset_text_field="text",
136
+ args=training_args,
137
+ tokenizer=tokenizer,
138
+ #packing=False,
139
+ max_seq_length=1024
140
+ )
141
+ # Entraînement
142
+ #trainer.train()
143
+ try:
144
+ # S'assurer que le modèle est en mode entraînement
145
+ model.train()
146
+ # Activer les gradients
147
+ torch.set_grad_enabled(True)
148
+ trainer.train()
149
+
150
+ # Merge avec le modèle original et sauvegarder
151
+ if isinstance(model, PeftModel):
152
+ merged_model = model.merge_and_unload()
153
+ else:
154
+ merged_model = model
155
+ # raise ValueError("Model is not a PeftModel with LoRA adapters")
156
+ # merged_model = model.merge_and_unload()
157
+ merged_model.save_pretrained(OUTPUT_DIR)
158
+ tokenizer.save_pretrained(OUTPUT_DIR)
159
+ # Push sur Hugging Face Hub
160
+ merged_model.push_to_hub(f"{os.getenv('HF_USERNAME')}/Meta-Llama-3.1-8B-Instruct-finetuned")
161
+ tokenizer.push_to_hub(f"{os.getenv('HF_USERNAME')}/Meta-Llama-3.1-8B-Instruct-finetuned")
162
+ # except torch.cuda.OutOfMemoryError:
163
+ # print("Erreur de mémoire GPU pendant l'entraînement. Tentative avec des paramètres réduits...")
164
+ # training_args.per_device_train_batch_size //= 2
165
+ # training_args.gradient_accumulation_steps *= 2
166
+ # print(f"Nouveaux paramètres : batch_size={training_args.per_device_train_batch_size}, grad_accum={training_args.gradient_accumulation_steps}")
167
+ # trainer = Trainer(model=model, args=training_args, train_dataset=train_dataset, eval_dataset=eval_dataset)
168
+ # trainer.train()
169
+
170
+ except RuntimeError as e:
171
+ print(f"Erreur d'entraînement : {str(e)}")
172
+ raise
training_args.bin CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:36f069bb29ad91e31a28963587faa77a80ae40c02a8026ae486287aa7cc3911d
3
  size 5560
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3a674e513a45017f67ae526348d95432a41d1e0ef0fc057b56ac1daaf8a284f9
3
  size 5560