hoduyquocbao commited on
Commit
9c3f080
1 Parent(s): ece098b

fix error features

Browse files
__pycache__/checkpoint.cpython-310.pyc ADDED
Binary file (4.03 kB). View file
 
app.py CHANGED
@@ -289,7 +289,6 @@ def generate(
289
  # Thông báo về việc phân tích đầu vào
290
  yield "🔍 Đang phân tích truy vấn của bạn..."
291
 
292
- continuous_training(max_epochs=3)
293
 
294
  # Xác định hàm nào sẽ được gọi dựa trên tin nhắn của người dùng
295
  function_call = process_query(message)
@@ -300,6 +299,7 @@ def generate(
300
  elif function_call["name"] == "summarize_query":
301
  yield "🛠️ Đã chọn chức năng: Tóm tắt văn bản."
302
  elif function_call["name"] == "sentiment_analysis":
 
303
  yield "🛠️ Đã chọn chức năng: Phân tích tâm lý."
304
  elif function_call["name"] in ["general_query", "hard_query"]:
305
  yield "🛠️ Đã chọn chức năng: Trả lời câu hỏi."
 
289
  # Thông báo về việc phân tích đầu vào
290
  yield "🔍 Đang phân tích truy vấn của bạn..."
291
 
 
292
 
293
  # Xác định hàm nào sẽ được gọi dựa trên tin nhắn của người dùng
294
  function_call = process_query(message)
 
299
  elif function_call["name"] == "summarize_query":
300
  yield "🛠️ Đã chọn chức năng: Tóm tắt văn bản."
301
  elif function_call["name"] == "sentiment_analysis":
302
+ continuous_training(total_steps=300, steps_per_call=50)
303
  yield "🛠️ Đã chọn chức năng: Phân tích tâm lý."
304
  elif function_call["name"] in ["general_query", "hard_query"]:
305
  yield "🛠️ Đã chọn chức năng: Trả lời câu hỏi."
checkpoint.py CHANGED
@@ -6,7 +6,10 @@ from transformers import (
6
  AutoModelForCausalLM,
7
  TrainingArguments,
8
  Trainer,
9
- DataCollatorForLanguageModeling
 
 
 
10
  )
11
  from peft import LoraConfig, get_peft_model
12
  import spaces
@@ -17,16 +20,15 @@ CHECKPOINT_DIR = "./checkpoints"
17
  if not os.path.exists(CHECKPOINT_DIR):
18
  os.makedirs(CHECKPOINT_DIR)
19
 
20
- # Tải Dataset
21
  dataset = load_dataset('vntc/wiki-mini-corpus')
22
 
23
- # Chia Dataset thành train và validation
24
  split_dataset = dataset['train'].train_test_split(test_size=0.1, seed=42)
25
  train_dataset = split_dataset['train']
26
  validation_dataset = split_dataset['test']
27
 
28
- # Tiền Xử Lý Văn Bản
29
- @spaces.GPU(duration=20, queue=False)
30
  def preprocess_function(examples):
31
  passages = [passage.lower().strip() for passage in examples['passage']]
32
  return {'passage': passages}
@@ -34,7 +36,7 @@ def preprocess_function(examples):
34
  processed_train = train_dataset.map(preprocess_function, batched=True, remove_columns=['id', 'metadata'])
35
  processed_validation = validation_dataset.map(preprocess_function, batched=True, remove_columns=['id', 'metadata'])
36
 
37
- # Tokenization
38
  model_name = "meta-llama/Llama-3.2-3B-Instruct"
39
  tokenizer = AutoTokenizer.from_pretrained(model_name)
40
 
@@ -42,7 +44,6 @@ tokenizer = AutoTokenizer.from_pretrained(model_name)
42
  if tokenizer.pad_token is None:
43
  tokenizer.pad_token = tokenizer.eos_token
44
 
45
- @spaces.GPU(duration=20, queue=False)
46
  def tokenize_function(examples):
47
  return tokenizer(
48
  examples['passage'],
@@ -54,8 +55,7 @@ def tokenize_function(examples):
54
  tokenized_train = processed_train.map(tokenize_function, batched=True)
55
  tokenized_validation = processed_validation.map(tokenize_function, batched=True)
56
 
57
- # Thêm trường 'labels'
58
- # @spaces.GPU(duration=20, queue=False)
59
  def add_labels(examples):
60
  examples['labels'] = examples['input_ids'].copy()
61
  return examples
@@ -63,79 +63,93 @@ def add_labels(examples):
63
  tokenized_train = tokenized_train.map(add_labels, batched=True)
64
  tokenized_validation = tokenized_validation.map(add_labels, batched=True)
65
 
66
- # Loại bỏ các cột không cần thiết
67
  tokenized_train = tokenized_train.remove_columns(['passage'])
68
  tokenized_validation = tokenized_validation.remove_columns(['passage'])
69
 
70
- # Định dạng dữ liệu cho PyTorch
71
  tokenized_train.set_format('torch')
72
  tokenized_validation.set_format('torch')
73
 
74
- # Tạo DatasetDict
75
  final_dataset = {
76
  'train': tokenized_train,
77
  'validation': tokenized_validation
78
  }
79
 
80
- # Tải Cấu Hình Hình với LoRA
81
- model = AutoModelForCausalLM.from_pretrained(
82
- model_name,
83
- device_map="auto",
84
- torch_dtype=torch.float16,
85
- load_in_8bit=False
86
- )
87
-
88
- lora_config = LoraConfig(
89
- r=8,
90
- lora_alpha=32,
91
- target_modules=["q_proj", "k_proj", "v_proj", "out_proj"],
92
- lora_dropout=0.1,
93
- bias="none",
94
- )
95
-
96
- model = get_peft_model(model, lora_config)
97
- print(model)
98
-
99
- # Cấu Hình TrainingArguments
100
- training_args = TrainingArguments(
101
- output_dir=CHECKPOINT_DIR,
102
- per_device_train_batch_size=4,
103
- per_device_eval_batch_size=4,
104
- gradient_accumulation_steps=8,
105
- num_train_epochs=3,
106
- learning_rate=3e-4,
107
- weight_decay=0.01,
108
- logging_steps=50, # Giảm số bước logging
109
- evaluation_strategy="steps", # Đánh giá sau mỗi vài bước
110
- eval_steps=50, # Đánh giá sau mỗi 100 bước
111
- save_strategy="steps", # Lưu checkpoint sau mỗi vài bước
112
- save_steps=50, # Lưu checkpoint sau mỗi 100 bước
113
- save_total_limit=5, # Giới hạn số lượng checkpoint lưu trữ
114
- fp16=True,
115
- report_to="none",
116
- load_best_model_at_end=True,
117
- )
118
-
119
- # Data Collator
120
- data_collator = DataCollatorForLanguageModeling(
121
- tokenizer=tokenizer,
122
- mlm=False, # Vì bạn đang thực hiện Causal LM
123
- pad_to_multiple_of=8
124
- )
125
-
126
- # Tạo Trainer
127
- trainer = Trainer(
128
- model=model,
129
- args=training_args,
130
- train_dataset=final_dataset['train'],
131
- eval_dataset=final_dataset['validation'],
132
- tokenizer=tokenizer,
133
- data_collator=data_collator,
134
- )
135
 
136
  # Định Nghĩa Hàm Huấn Luyện với Decorator @spaces.GPU
137
- @spaces.GPU(duration=20, queue=False)
138
  def run_training():
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  # Kiểm tra nếu có checkpoint
140
  checkpoints = [os.path.join(CHECKPOINT_DIR, d) for d in os.listdir(CHECKPOINT_DIR) if d.startswith('checkpoint')]
141
  if checkpoints:
@@ -149,26 +163,31 @@ def run_training():
149
  trainer.save_model(CHECKPOINT_DIR)
150
  return "Huấn luyện hoàn tất hoặc đã tiếp tục từ checkpoint."
151
 
152
- # Hàm Tự Động Hóa Việc Gọi Lặp Lại `run_training`
153
- @spaces.GPU(duration=20, queue=False)
154
- def continuous_training(max_epochs=3):
155
- current_epoch = 0
156
- while current_epoch < max_epochs:
 
 
 
 
 
 
 
157
  result = run_training()
158
  print(result)
 
 
159
 
160
- # Giả định mỗi lần gọi huấn luyện tiến thêm 0.25 epoch (tùy thuộc vào tốc độ huấn luyện)
161
- current_epoch += 0.25
162
- print(f"Đã huấn luyện {current_epoch} / {max_epochs} epochs.")
163
-
164
- # Kiểm tra nếu đã đạt số epoch mong muốn
165
- if current_epoch >= max_epochs:
166
- print("Đã hoàn thành quá trình huấn luyện.")
167
  break
168
 
169
  # Chờ một khoảng thời gian trước khi gọi lại (tùy thuộc vào yêu cầu của hệ thống)
170
- time.sleep(1) # Thời gian chờ có thể điều chỉnh
171
 
172
- # # Chạy quá trình huấn luyện liên tục
173
- # if __name__ == "__main__":
174
- # continuous_training(max_epochs=3)
 
6
  AutoModelForCausalLM,
7
  TrainingArguments,
8
  Trainer,
9
+ DataCollatorForLanguageModeling,
10
+ TrainerCallback,
11
+ TrainerState,
12
+ TrainerControl
13
  )
14
  from peft import LoraConfig, get_peft_model
15
  import spaces
 
20
  if not os.path.exists(CHECKPOINT_DIR):
21
  os.makedirs(CHECKPOINT_DIR)
22
 
23
+ # Tải Dataset (CPU)
24
  dataset = load_dataset('vntc/wiki-mini-corpus')
25
 
26
+ # Chia Dataset thành train và validation (CPU)
27
  split_dataset = dataset['train'].train_test_split(test_size=0.1, seed=42)
28
  train_dataset = split_dataset['train']
29
  validation_dataset = split_dataset['test']
30
 
31
+ # Tiền Xử Lý Văn Bản (CPU)
 
32
  def preprocess_function(examples):
33
  passages = [passage.lower().strip() for passage in examples['passage']]
34
  return {'passage': passages}
 
36
  processed_train = train_dataset.map(preprocess_function, batched=True, remove_columns=['id', 'metadata'])
37
  processed_validation = validation_dataset.map(preprocess_function, batched=True, remove_columns=['id', 'metadata'])
38
 
39
+ # Tokenization (CPU)
40
  model_name = "meta-llama/Llama-3.2-3B-Instruct"
41
  tokenizer = AutoTokenizer.from_pretrained(model_name)
42
 
 
44
  if tokenizer.pad_token is None:
45
  tokenizer.pad_token = tokenizer.eos_token
46
 
 
47
  def tokenize_function(examples):
48
  return tokenizer(
49
  examples['passage'],
 
55
  tokenized_train = processed_train.map(tokenize_function, batched=True)
56
  tokenized_validation = processed_validation.map(tokenize_function, batched=True)
57
 
58
+ # Thêm trường 'labels' (CPU)
 
59
  def add_labels(examples):
60
  examples['labels'] = examples['input_ids'].copy()
61
  return examples
 
63
  tokenized_train = tokenized_train.map(add_labels, batched=True)
64
  tokenized_validation = tokenized_validation.map(add_labels, batched=True)
65
 
66
+ # Loại bỏ các cột không cần thiết (CPU)
67
  tokenized_train = tokenized_train.remove_columns(['passage'])
68
  tokenized_validation = tokenized_validation.remove_columns(['passage'])
69
 
70
+ # Định dạng dữ liệu cho PyTorch (CPU)
71
  tokenized_train.set_format('torch')
72
  tokenized_validation.set_format('torch')
73
 
74
+ # Tạo DatasetDict (CPU)
75
  final_dataset = {
76
  'train': tokenized_train,
77
  'validation': tokenized_validation
78
  }
79
 
80
+ # Định Nghĩa TrainerCallback để Lưu Checkpoint Nhanh Hơn
81
+ class SaveCheckpointCallback(TrainerCallback):
82
+ def on_step_end(self, args, state, control, **kwargs):
83
+ if state.global_step % args.save_steps == 0 and state.global_step != 0:
84
+ checkpoint_path = os.path.join(args.output_dir, f"checkpoint-{state.global_step}")
85
+ print(f"Lưu checkpoint tại: {checkpoint_path}")
86
+ trainer.save_model(checkpoint_path)
87
+ return TrainerControl.CONTINUE
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
 
89
  # Định Nghĩa Hàm Huấn Luyện với Decorator @spaces.GPU
90
+ @spaces.GPU(duration=15, queue=False)
91
  def run_training():
92
+ """
93
+ Hàm huấn luyện mô hình sử dụng GPU với thời gian hạn chế.
94
+ """
95
+ # Tải và Cấu Hình Mô Hình với LoRA (GPU)
96
+ model = AutoModelForCausalLM.from_pretrained(
97
+ model_name,
98
+ device_map="auto",
99
+ torch_dtype=torch.float16,
100
+ load_in_8bit=False
101
+ )
102
+
103
+ lora_config = LoraConfig(
104
+ r=8,
105
+ lora_alpha=32,
106
+ target_modules=["q_proj", "k_proj", "v_proj", "out_proj"],
107
+ lora_dropout=0.1,
108
+ bias="none",
109
+ )
110
+
111
+ model = get_peft_model(model, lora_config)
112
+ print(model)
113
+
114
+ # Cấu Hình TrainingArguments (GPU)
115
+ training_args = TrainingArguments(
116
+ output_dir=CHECKPOINT_DIR,
117
+ per_device_train_batch_size=4,
118
+ per_device_eval_batch_size=4,
119
+ gradient_accumulation_steps=8,
120
+ num_train_epochs=3,
121
+ max_steps=50, # Đặt max_steps tại đây
122
+ learning_rate=3e-4,
123
+ weight_decay=0.01,
124
+ logging_steps=10, # Giảm số bước logging để theo dõi thường xuyên hơn
125
+ eval_strategy="steps", # Đánh giá sau mỗi vài bước
126
+ eval_steps=50, # Đánh giá sau mỗi 50 bước
127
+ save_strategy="steps", # Lưu checkpoint sau mỗi vài bước
128
+ save_steps=50, # Lưu checkpoint sau mỗi 50 bước
129
+ save_total_limit=5, # Giới hạn số lượng checkpoint lưu trữ
130
+ fp16=True,
131
+ report_to="none",
132
+ load_best_model_at_end=True,
133
+ )
134
+
135
+ # Data Collator (GPU)
136
+ data_collator = DataCollatorForLanguageModeling(
137
+ tokenizer=tokenizer,
138
+ mlm=False, # Vì bạn đang thực hiện Causal LM
139
+ pad_to_multiple_of=8
140
+ )
141
+
142
+ # Tạo Trainer (GPU)
143
+ trainer = Trainer(
144
+ model=model,
145
+ args=training_args,
146
+ train_dataset=final_dataset['train'],
147
+ eval_dataset=final_dataset['validation'],
148
+ tokenizer=tokenizer,
149
+ data_collator=data_collator,
150
+ callbacks=[SaveCheckpointCallback()], # Thêm callback
151
+ )
152
+
153
  # Kiểm tra nếu có checkpoint
154
  checkpoints = [os.path.join(CHECKPOINT_DIR, d) for d in os.listdir(CHECKPOINT_DIR) if d.startswith('checkpoint')]
155
  if checkpoints:
 
163
  trainer.save_model(CHECKPOINT_DIR)
164
  return "Huấn luyện hoàn tất hoặc đã tiếp tục từ checkpoint."
165
 
166
+ # Hàm Tự Động Hóa Việc Gọi Lặp Lại Hàm Huấn Luyện
167
+ def continuous_training(total_steps=300, steps_per_call=50):
168
+ """
169
+ Hàm tự động gọi lại `run_training` để hoàn thành quá trình huấn luyện.
170
+
171
+ Args:
172
+ total_steps (int): Tổng số bước huấn luyện mong muốn.
173
+ steps_per_call (int): Số bước huấn luyện mỗi lần gọi hàm.
174
+ """
175
+ steps_done = 0
176
+ while steps_done < total_steps:
177
+ print(f"Bắt đầu huấn luyện cho {steps_per_call} bước.")
178
  result = run_training()
179
  print(result)
180
+ steps_done += steps_per_call
181
+ print(f"Đã huấn luyện {steps_done} / {total_steps} bước.")
182
 
183
+ # Kiểm tra nếu đã đạt số bước mong muốn
184
+ if steps_done >= total_steps:
185
+ print("Đã hoàn thành toàn bộ quá trình huấn luyện.")
 
 
 
 
186
  break
187
 
188
  # Chờ một khoảng thời gian trước khi gọi lại (tùy thuộc vào yêu cầu của hệ thống)
189
+ time.sleep(2) # Thời gian chờ có thể điều chỉnh
190
 
191
+ # Gọi hàm huấn luyện liên tục
192
+ if __name__ == "__main__":
193
+ continuous_training(total_steps=300, steps_per_call=50)
requirements.txt CHANGED
@@ -17,4 +17,5 @@ sentencepiece
17
  soxr
18
  pydub
19
  opencv-python
20
- av
 
 
17
  soxr
18
  pydub
19
  opencv-python
20
+ av
21
+ peft