Pista1981 commited on
Commit
be94bde
Β·
verified Β·
1 Parent(s): 62c1e68

πŸ”§ v3: Fix SFTConfig for trl>=0.8

Browse files
Files changed (1) hide show
  1. app.py +30 -28
app.py CHANGED
@@ -1,5 +1,5 @@
1
  """
2
- 🧬 HIVEMIND GPU WORKER v2
3
  Training LoRA adapters za Hivemind agente
4
  """
5
  import gradio as gr
@@ -14,7 +14,7 @@ def train_agent(agent_name: str, skill: str, epochs: int = 2):
14
  import torch
15
  from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
16
  from peft import LoraConfig, get_peft_model
17
- from trl import SFTTrainer
18
  from datasets import Dataset
19
  from huggingface_hub import HfApi, login
20
  from datetime import datetime
@@ -22,14 +22,14 @@ def train_agent(agent_name: str, skill: str, epochs: int = 2):
22
  log = [f"πŸš€ Starting: {agent_name} - {skill}"]
23
 
24
  if not HF_TOKEN:
25
- return "❌ HF_TOKEN not set in Space secrets! Go to Settings -> Repository secrets"
26
 
27
  login(token=HF_TOKEN)
28
  api = HfApi(token=HF_TOKEN)
29
 
30
  task_id = f"{agent_name[:8].lower().replace(' ','')}-{datetime.now().strftime('%m%d%H%M%S')}"
31
 
32
- # Load model (CPU friendly small model)
33
  log.append("πŸ“¦ Loading TinyLlama...")
34
  model = AutoModelForCausalLM.from_pretrained(
35
  "TinyLlama/TinyLlama-1.1B-Chat-v1.0",
@@ -51,34 +51,36 @@ def train_agent(agent_name: str, skill: str, epochs: int = 2):
51
  trainable = sum(p.numel() for p in model.parameters() if p.requires_grad)
52
  log.append(f" Trainable params: {trainable:,}")
53
 
54
- # Dataset
55
- data = [
56
- {"text": f"<|user|>\nWhat is {skill}?</s>\n<|assistant|>\n{skill} is a fundamental technique in machine learning and AI.</s>"},
57
- {"text": f"<|user|>\nExplain {skill}</s>\n<|assistant|>\n{skill} helps optimize model performance and efficiency.</s>"},
58
- {"text": f"<|user|>\nHow to implement {skill}?</s>\n<|assistant|>\nTo implement {skill}, apply proper techniques and best practices.</s>"},
59
- {"text": f"<|user|>\nWhy is {skill} important?</s>\n<|assistant|>\n{skill} is crucial for building effective AI systems.</s>"},
60
  ]
61
- dataset = Dataset.from_list(data)
62
  log.append(f"πŸ“Š Dataset: {len(dataset)} examples")
63
 
64
- # Train (minimal for CPU)
65
  log.append(f"πŸ‹οΈ Training {epochs} epoch(s)...")
66
- trainer = SFTTrainer(
67
- model=model,
68
- train_dataset=dataset,
 
 
 
 
 
 
 
69
  dataset_text_field="text",
70
- max_seq_length=128,
 
 
 
 
71
  tokenizer=tokenizer,
72
- args=TrainingArguments(
73
- output_dir="./out",
74
- num_train_epochs=epochs,
75
- per_device_train_batch_size=1,
76
- learning_rate=2e-4,
77
- save_strategy="no",
78
- report_to="none",
79
- fp16=False,
80
- logging_steps=1,
81
- )
82
  )
83
  result = trainer.train()
84
  log.append(f"βœ… Training complete! Loss: {result.training_loss:.4f}")
@@ -91,7 +93,7 @@ def train_agent(agent_name: str, skill: str, epochs: int = 2):
91
  log.append(f"πŸ“€ Uploading to {repo_id}...")
92
 
93
  api.create_repo(repo_id=repo_id, exist_ok=True, private=False)
94
- api.upload_folder(folder_path="./lora", repo_id=repo_id, commit_message=f"πŸ€– {agent_name}: {skill}")
95
  log.append(f"βœ… SUCCESS: https://huggingface.co/{repo_id}")
96
 
97
  return "\n".join(log)
@@ -101,7 +103,7 @@ def train_agent(agent_name: str, skill: str, epochs: int = 2):
101
 
102
 
103
  with gr.Blocks(title="Hivemind GPU Worker") as demo:
104
- gr.Markdown("# 🧬 Hivemind GPU Worker v2\nTraining LoRA adapters for AI agents")
105
 
106
  with gr.Row():
107
  agent_input = gr.Textbox(label="Agent Name", value="TestAgent")
 
1
  """
2
+ 🧬 HIVEMIND GPU WORKER v3
3
  Training LoRA adapters za Hivemind agente
4
  """
5
  import gradio as gr
 
14
  import torch
15
  from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
16
  from peft import LoraConfig, get_peft_model
17
+ from trl import SFTTrainer, SFTConfig
18
  from datasets import Dataset
19
  from huggingface_hub import HfApi, login
20
  from datetime import datetime
 
22
  log = [f"πŸš€ Starting: {agent_name} - {skill}"]
23
 
24
  if not HF_TOKEN:
25
+ return "❌ HF_TOKEN not set in Space secrets!"
26
 
27
  login(token=HF_TOKEN)
28
  api = HfApi(token=HF_TOKEN)
29
 
30
  task_id = f"{agent_name[:8].lower().replace(' ','')}-{datetime.now().strftime('%m%d%H%M%S')}"
31
 
32
+ # Load model
33
  log.append("πŸ“¦ Loading TinyLlama...")
34
  model = AutoModelForCausalLM.from_pretrained(
35
  "TinyLlama/TinyLlama-1.1B-Chat-v1.0",
 
51
  trainable = sum(p.numel() for p in model.parameters() if p.requires_grad)
52
  log.append(f" Trainable params: {trainable:,}")
53
 
54
+ # Dataset - format as list of strings
55
+ texts = [
56
+ f"<|user|>\nWhat is {skill}?</s>\n<|assistant|>\n{skill} is a fundamental technique in machine learning.</s>",
57
+ f"<|user|>\nExplain {skill}</s>\n<|assistant|>\n{skill} helps optimize model performance.</s>",
58
+ f"<|user|>\nHow to implement {skill}?</s>\n<|assistant|>\nTo implement {skill}, apply proper techniques.</s>",
59
+ f"<|user|>\nWhy is {skill} important?</s>\n<|assistant|>\n{skill} is crucial for effective AI systems.</s>",
60
  ]
61
+ dataset = Dataset.from_dict({"text": texts})
62
  log.append(f"πŸ“Š Dataset: {len(dataset)} examples")
63
 
64
+ # Train with SFTConfig
65
  log.append(f"πŸ‹οΈ Training {epochs} epoch(s)...")
66
+
67
+ training_args = SFTConfig(
68
+ output_dir="./out",
69
+ num_train_epochs=epochs,
70
+ per_device_train_batch_size=1,
71
+ learning_rate=2e-4,
72
+ save_strategy="no",
73
+ report_to="none",
74
+ logging_steps=1,
75
+ max_seq_length=128,
76
  dataset_text_field="text",
77
+ )
78
+
79
+ trainer = SFTTrainer(
80
+ model=model,
81
+ train_dataset=dataset,
82
  tokenizer=tokenizer,
83
+ args=training_args,
 
 
 
 
 
 
 
 
 
84
  )
85
  result = trainer.train()
86
  log.append(f"βœ… Training complete! Loss: {result.training_loss:.4f}")
 
93
  log.append(f"πŸ“€ Uploading to {repo_id}...")
94
 
95
  api.create_repo(repo_id=repo_id, exist_ok=True, private=False)
96
+ api.upload_folder(folder_path="./lora", repo_id=repo_id)
97
  log.append(f"βœ… SUCCESS: https://huggingface.co/{repo_id}")
98
 
99
  return "\n".join(log)
 
103
 
104
 
105
  with gr.Blocks(title="Hivemind GPU Worker") as demo:
106
+ gr.Markdown("# 🧬 Hivemind GPU Worker v3\nTraining LoRA adapters for AI agents")
107
 
108
  with gr.Row():
109
  agent_input = gr.Textbox(label="Agent Name", value="TestAgent")