akra35567 commited on
Commit
867e38e
·
1 Parent(s): 922bbf0

Update modules/treinamento.py

Browse files
Files changed (1) hide show
  1. modules/treinamento.py +9 -33
modules/treinamento.py CHANGED
@@ -3,18 +3,17 @@ import threading
3
  import time
4
  import json
5
  import os
 
 
6
  from loguru import logger
7
  from sentence_transformers import SentenceTransformer
8
- from peft import LoraConfig, get_peft_model, set_peft_model_state_dict
9
- from llama_cpp import Llama
10
  from .database import Database
11
- from .local_llm import _get_llm # ← REUSO DO MESMO LLAMA OBJECT
12
 
13
- # === CONFIGURAÇÕES GLOBAIS ===
14
  EMBEDDING_MODEL = "paraphrase-multilingual-MiniLM-L12-v2"
15
  embedding_model = SentenceTransformer(EMBEDDING_MODEL)
16
-
17
- FINETUNED_PATH: str = "/home/user/data/finetuned_hermes"
18
  os.makedirs(FINETUNED_PATH, exist_ok=True)
19
 
20
  def gerar_embedding(text: str):
@@ -26,8 +25,6 @@ class Treinamento:
26
  self.interval_hours = interval_hours
27
  self._thread = None
28
  self._running = False
29
-
30
- # REUSO DO LLAMA JÁ CARREGADO
31
  self.llm = _get_llm()
32
  if self.llm:
33
  logger.info("Treinamento conectado ao OpenHermes GGUF GLOBAL (sem reload!)")
@@ -41,7 +38,6 @@ class Treinamento:
41
  def _aprender_roleplay(self, numero: str, msg: str, resp: str):
42
  if not numero or not self.llm:
43
  return
44
-
45
  dataset_path = f"{FINETUNED_PATH}/roleplay.jsonl"
46
  entry = {
47
  "messages": [
@@ -59,33 +55,21 @@ class Treinamento:
59
  if not self.llm:
60
  logger.warning("Modelo não carregado. Pulando finetune.")
61
  return
62
-
63
  dataset_path = f"{FINETUNED_PATH}/roleplay.jsonl"
64
  if not os.path.exists(dataset_path) or os.path.getsize(dataset_path) < 1000:
65
  logger.info("Poucos dados. Esperando mais interações...")
66
  return
67
-
68
  logger.info("INICIANDO FINETUNE LORA (ANGOLANO STYLE) COM llama.cpp...")
69
-
70
  try:
71
- # === CRIA CONFIG LORA ===
72
  lora_config = LoraConfig(
73
- r=32,
74
- lora_alpha=64,
75
  target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
76
- lora_dropout=0.05,
77
- bias="none",
78
- task_type="CAUSAL_LM"
79
  )
80
-
81
- # === APLICA LORA NO LLAMA (cria arquivo temporário) ===
82
  lora_path = f"{FINETUNED_PATH}/temp_lora"
83
  os.makedirs(lora_path, exist_ok=True)
84
-
85
- # Salva config
86
  lora_config.save_pretrained(lora_path)
87
 
88
- # === TREINA COM llama.cpp CLI (mais rápido e estável) ===
89
  cmd = [
90
  "python", "-m", "llama_cpp.convert",
91
  "--outfile", f"{lora_path}/adapter_model.bin",
@@ -99,27 +83,19 @@ class Treinamento:
99
  "--threads", "4",
100
  "--ctx", "4096"
101
  ]
102
-
103
- import subprocess
104
  result = subprocess.run(cmd, capture_output=True, text=True)
105
  if result.returncode == 0:
106
  logger.info("FINETUNE LORA CONCLUÍDO COM SUCESSO!")
107
- # Move pro lugar certo
108
- import shutil
109
  if os.path.exists(f"{lora_path}/adapter_model.bin"):
110
  shutil.move(f"{lora_path}/adapter_model.bin", f"{FINETUNED_PATH}/adapter_model.bin")
111
  shutil.move(f"{lora_path}/adapter_config.json", f"{FINETUNED_PATH}/adapter_config.json")
112
- logger.info("LORA ANGOLANO SALVO EM /home/user/data/finetuned_hermes")
113
- # Limpa dataset
114
  open(dataset_path, 'w').close()
115
  logger.info("Dataset limpo. Pronto pro próximo ciclo.")
116
  else:
117
  logger.error(f"Erro no treino: {result.stderr}")
118
-
119
  except Exception as e:
120
  logger.error(f"Erro crítico no finetune: {e}")
121
- import traceback
122
- logger.error(traceback.format_exc())
123
 
124
  def _run_loop(self):
125
  interval = self.interval_hours * 3600
@@ -136,4 +112,4 @@ class Treinamento:
136
  self._running = True
137
  self._thread = threading.Thread(target=self._run_loop, daemon=True)
138
  self._thread.start()
139
- logger.info(f"Treinamento periódico iniciado (a cada {self.interval_hours}h)")
 
3
  import time
4
  import json
5
  import os
6
+ import shutil
7
+ import subprocess
8
  from loguru import logger
9
  from sentence_transformers import SentenceTransformer
10
+ from peft import LoraConfig
 
11
  from .database import Database
12
+ from .local_llm import _get_llm
13
 
 
14
  EMBEDDING_MODEL = "paraphrase-multilingual-MiniLM-L12-v2"
15
  embedding_model = SentenceTransformer(EMBEDDING_MODEL)
16
+ FINETUNED_PATH = "/home/user/data/finetuned_hermes"
 
17
  os.makedirs(FINETUNED_PATH, exist_ok=True)
18
 
19
  def gerar_embedding(text: str):
 
25
  self.interval_hours = interval_hours
26
  self._thread = None
27
  self._running = False
 
 
28
  self.llm = _get_llm()
29
  if self.llm:
30
  logger.info("Treinamento conectado ao OpenHermes GGUF GLOBAL (sem reload!)")
 
38
  def _aprender_roleplay(self, numero: str, msg: str, resp: str):
39
  if not numero or not self.llm:
40
  return
 
41
  dataset_path = f"{FINETUNED_PATH}/roleplay.jsonl"
42
  entry = {
43
  "messages": [
 
55
  if not self.llm:
56
  logger.warning("Modelo não carregado. Pulando finetune.")
57
  return
 
58
  dataset_path = f"{FINETUNED_PATH}/roleplay.jsonl"
59
  if not os.path.exists(dataset_path) or os.path.getsize(dataset_path) < 1000:
60
  logger.info("Poucos dados. Esperando mais interações...")
61
  return
 
62
  logger.info("INICIANDO FINETUNE LORA (ANGOLANO STYLE) COM llama.cpp...")
 
63
  try:
 
64
  lora_config = LoraConfig(
65
+ r=32, lora_alpha=64,
 
66
  target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
67
+ lora_dropout=0.05, bias="none", task_type="CAUSAL_LM"
 
 
68
  )
 
 
69
  lora_path = f"{FINETUNED_PATH}/temp_lora"
70
  os.makedirs(lora_path, exist_ok=True)
 
 
71
  lora_config.save_pretrained(lora_path)
72
 
 
73
  cmd = [
74
  "python", "-m", "llama_cpp.convert",
75
  "--outfile", f"{lora_path}/adapter_model.bin",
 
83
  "--threads", "4",
84
  "--ctx", "4096"
85
  ]
 
 
86
  result = subprocess.run(cmd, capture_output=True, text=True)
87
  if result.returncode == 0:
88
  logger.info("FINETUNE LORA CONCLUÍDO COM SUCESSO!")
 
 
89
  if os.path.exists(f"{lora_path}/adapter_model.bin"):
90
  shutil.move(f"{lora_path}/adapter_model.bin", f"{FINETUNED_PATH}/adapter_model.bin")
91
  shutil.move(f"{lora_path}/adapter_config.json", f"{FINETUNED_PATH}/adapter_config.json")
92
+ logger.info("LORA ANGOLANO SALVO EM /home/user/data/finetuned_hermes") # ← INDENTAÇÃO CORRIGIDA!
 
93
  open(dataset_path, 'w').close()
94
  logger.info("Dataset limpo. Pronto pro próximo ciclo.")
95
  else:
96
  logger.error(f"Erro no treino: {result.stderr}")
 
97
  except Exception as e:
98
  logger.error(f"Erro crítico no finetune: {e}")
 
 
99
 
100
  def _run_loop(self):
101
  interval = self.interval_hours * 3600
 
112
  self._running = True
113
  self._thread = threading.Thread(target=self._run_loop, daemon=True)
114
  self._thread.start()
115
+ logger.info(f"Treinamento periódico iniciado (a cada {self.interval_hours}h)")