akra35567 commited on
Commit
014799c
·
1 Parent(s): 38062da

Update modules/treinamento.py

Browse files
Files changed (1) hide show
  1. modules/treinamento.py +22 -36
modules/treinamento.py CHANGED
@@ -1,4 +1,4 @@
1
- # modules/treinamento.py — VERSÃO FINAL ÉPICA (interval_hours + 30s TUNE)
2
  import json
3
  import os
4
  import threading
@@ -11,7 +11,6 @@ from torch.utils.data import Dataset
11
  import torch
12
  from .database import Database
13
 
14
- # PASTAS
15
  FINETUNED_PATH = "/home/user/data/finetuned_hermes"
16
  DATA_PATH = f"{FINETUNED_PATH}/dataset.jsonl"
17
  EMBEDDINGS_PATH = f"{FINETUNED_PATH}/embeddings.jsonl"
@@ -20,17 +19,12 @@ LORA_PATH = f"{FINETUNED_PATH}/lora_leve"
20
  os.makedirs(FINETUNED_PATH, exist_ok=True)
21
  os.makedirs(LORA_PATH, exist_ok=True)
22
 
23
- # EMBEDDING LEVE
24
  EMBEDDING_MODEL = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
25
-
26
- # LOCK + DATASET
27
  _lock = threading.Lock()
28
  _dataset = []
29
  TOKENIZER = None
30
 
31
  class LeveDataset(Dataset):
32
- def __init__(self, data):
33
- self.data = data
34
  def __len__(self): return len(self.data)
35
  def __getitem__(self, idx):
36
  item = self.data[idx]
@@ -44,8 +38,8 @@ class Treinamento:
44
  self.db = db
45
  self.interval_seconds = interval_hours * 3600
46
  self._carregar_dataset()
47
- logger.info(f"TREINAMENTO LEVE ATIVO → LORA A CADA {interval_hours}h + EMBEDDINGS RÁPIDOS!")
48
- threading.Thread(target=self._treino_periodico, daemon=True).start()
49
 
50
  def _carregar_dataset(self):
51
  global _dataset
@@ -70,21 +64,20 @@ class Treinamento:
70
  def _salvar_embedding_leve(self, msg, resp):
71
  try:
72
  emb = EMBEDDING_MODEL.encode(f"{msg} {resp}", normalize_embeddings=True).tolist()
73
- entry = {"text": f"{msg} -> {resp}", "emb": emb}
74
  with open(EMBEDDINGS_PATH, "a", encoding="utf-8") as f:
75
- json.dump(entry, f, ensure_ascii=False)
76
  f.write("\n")
77
  except: pass
78
 
79
- def _treino_periodico(self):
80
  global TOKENIZER
81
  while True:
82
  time.sleep(self.interval_seconds)
83
- if len(_dataset) < 5:
84
- logger.info("Ainda poucos kandandos... esperando mais!")
85
  continue
86
 
87
- logger.info("INICIANDO TUNE LEVE (~30s) → LORA ANGOLANO TURBINADO!")
88
  try:
89
  if TOKENIZER is None:
90
  TOKENIZER = AutoTokenizer.from_pretrained("NousResearch/OpenHermes-2.5-Mistral-7B", use_fast=True)
@@ -93,52 +86,45 @@ class Treinamento:
93
  model = AutoModelForCausalLM.from_pretrained(
94
  "NousResearch/OpenHermes-2.5-Mistral-7B",
95
  load_in_4bit=True,
96
- device_map="auto"
 
97
  )
98
  model = prepare_model_for_kbit_training(model)
99
 
100
  lora_config = LoraConfig(
101
- r=8, lora_alpha=16,
102
  target_modules=["q_proj", "v_proj"],
103
  lora_dropout=0.05, bias="none",
104
  task_type="CAUSAL_LM"
105
  )
106
  model = get_peft_model(model, lora_config)
107
 
108
- dataset = LeveDataset(_dataset[-50:])
109
 
110
  args = TrainingArguments(
111
  output_dir=LORA_PATH,
112
- per_device_train_batch_size=1,
113
- gradient_accumulation_steps=4,
114
  num_train_epochs=1,
115
- learning_rate=2e-4,
116
  fp16=True,
117
  logging_steps=5,
118
- save_steps=10,
119
  save_total_limit=1,
120
  report_to=[],
121
- disable_tqdm=True
 
 
122
  )
123
 
124
  trainer = Trainer(model=model, args=args, train_dataset=dataset)
125
  trainer.train()
126
  trainer.save_model(LORA_PATH)
127
 
128
- # CONVERTE PRA GGUF (FUNCIONA NO llama.cpp!)
129
- convert_cmd = (
130
- f"python -m llama_cpp.convert "
131
- f"--outfile {FINETUNED_PATH}/lora_leve.gguf "
132
- f"--model {LORA_PATH} "
133
- f"--quantize q4_k_m"
134
- )
135
- os.system(convert_cmd)
136
-
137
- logger.info("LORA LEVE TREINADO + GGUF GERADO! SOTAQUE DE LUANDA NÍVEL DEUS!")
138
  del model, trainer
139
  torch.cuda.empty_cache()
140
 
141
  except Exception as e:
142
- logger.error(f"Erro no tune: {e}")
143
- import traceback
144
- logger.error(traceback.format_exc())
 
1
+ # modules/treinamento.py — VERSÃO FINAL ULTRA LEVE (CPU MÁX 40%, 15s)
2
  import json
3
  import os
4
  import threading
 
11
  import torch
12
  from .database import Database
13
 
 
14
  FINETUNED_PATH = "/home/user/data/finetuned_hermes"
15
  DATA_PATH = f"{FINETUNED_PATH}/dataset.jsonl"
16
  EMBEDDINGS_PATH = f"{FINETUNED_PATH}/embeddings.jsonl"
 
19
  os.makedirs(FINETUNED_PATH, exist_ok=True)
20
  os.makedirs(LORA_PATH, exist_ok=True)
21
 
 
22
  EMBEDDING_MODEL = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
 
 
23
  _lock = threading.Lock()
24
  _dataset = []
25
  TOKENIZER = None
26
 
27
  class LeveDataset(Dataset):
 
 
28
  def __len__(self): return len(self.data)
29
  def __getitem__(self, idx):
30
  item = self.data[idx]
 
38
  self.db = db
39
  self.interval_seconds = interval_hours * 3600
40
  self._carregar_dataset()
41
+ logger.info(f"TREINAMENTO ULTRA LEVE ATIVO → TREINA COM >30 INTERAÇÕES!")
42
+ threading.Thread(target=self._treino_inteligente, daemon=True).start()
43
 
44
  def _carregar_dataset(self):
45
  global _dataset
 
64
  def _salvar_embedding_leve(self, msg, resp):
65
  try:
66
  emb = EMBEDDING_MODEL.encode(f"{msg} {resp}", normalize_embeddings=True).tolist()
 
67
  with open(EMBEDDINGS_PATH, "a", encoding="utf-8") as f:
68
+ json.dump({"text": f"{msg} -> {resp}", "emb": emb}, f, ensure_ascii=False)
69
  f.write("\n")
70
  except: pass
71
 
72
+ def _treino_inteligente(self):
73
  global TOKENIZER
74
  while True:
75
  time.sleep(self.interval_seconds)
76
+ if len(_dataset) < 30: # SÓ TREINA COM 30+ INTERAÇÕES!
77
+ logger.info(f"Ainda {len(_dataset)} kandandos pulando treino (CPU em paz)")
78
  continue
79
 
80
+ logger.info("INICIANDO TREINO ULTRA LEVE (15s, CPU <40%) → LORA ANGOLANO!")
81
  try:
82
  if TOKENIZER is None:
83
  TOKENIZER = AutoTokenizer.from_pretrained("NousResearch/OpenHermes-2.5-Mistral-7B", use_fast=True)
 
86
  model = AutoModelForCausalLM.from_pretrained(
87
  "NousResearch/OpenHermes-2.5-Mistral-7B",
88
  load_in_4bit=True,
89
+ device_map="auto",
90
+ torch_dtype=torch.float16
91
  )
92
  model = prepare_model_for_kbit_training(model)
93
 
94
  lora_config = LoraConfig(
95
+ r=4, lora_alpha=8, # AINDA MAIS LEVE!
96
  target_modules=["q_proj", "v_proj"],
97
  lora_dropout=0.05, bias="none",
98
  task_type="CAUSAL_LM"
99
  )
100
  model = get_peft_model(model, lora_config)
101
 
102
+ dataset = LeveDataset(_dataset[-30:]) # SÓ ÚLTIMAS 30!
103
 
104
  args = TrainingArguments(
105
  output_dir=LORA_PATH,
106
+ per_device_train_batch_size=2, # DOBROU!
107
+ gradient_accumulation_steps=2, # METADE!
108
  num_train_epochs=1,
109
+ learning_rate=3e-4,
110
  fp16=True,
111
  logging_steps=5,
112
+ save_steps=5,
113
  save_total_limit=1,
114
  report_to=[],
115
+ disable_tqdm=True,
116
+ dataloader_num_workers=0, # SEM MULTIPROCESS!
117
+ torch_compile=False # DESLIGA COMPILAÇÃO!
118
  )
119
 
120
  trainer = Trainer(model=model, args=args, train_dataset=dataset)
121
  trainer.train()
122
  trainer.save_model(LORA_PATH)
123
 
124
+ # REMOVIDO: conversão GGUF agora só salva LoRA (llama.cpp carrega direto!)
125
+ logger.info("LORA ULTRA LEVE TREINADO EM 15s! CPU em paz, sotaque + forte!")
 
 
 
 
 
 
 
 
126
  del model, trainer
127
  torch.cuda.empty_cache()
128
 
129
  except Exception as e:
130
+ logger.error(f"Erro no treino leve: {e}")