code5ecure commited on
Commit
c52be7e
·
verified ·
1 Parent(s): 743728e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +7 -69
app.py CHANGED
@@ -1,10 +1,7 @@
1
  import torch
2
- from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
3
  import numpy as np
4
  import gradio as gr
5
- from opacus import PrivacyEngine
6
- from torch.utils.data import Dataset
7
- from torch.optim import AdamW
8
  from sentence_transformers import SentenceTransformer
9
  import faiss
10
 
@@ -33,20 +30,6 @@ embedder = None
33
  index = None
34
  texts = []
35
 
36
- # Custom Dataset for training data
37
- class ChatDataset(Dataset):
38
- def __init__(self, data):
39
- self.data = data
40
- self.encodings = tokenizer(data, truncation=True, padding=True, max_length=128, return_tensors="pt")
41
-
42
- def __len__(self):
43
- return len(self.data)
44
-
45
- def __getitem__(self, idx):
46
- item = {key: val[idx].to(device) for key, val in self.encodings.items()}
47
- item["labels"] = item["input_ids"].clone()
48
- return item
49
-
50
  # Load training data from training_data.txt in the root directory
51
  def load_training_data():
52
  global texts
@@ -72,63 +55,18 @@ def build_rag_index(texts):
72
  index.add(embeddings)
73
  return embedder, index
74
 
75
- # Fine-tune model with differential privacy
76
  def train_model():
77
  global texts, embedder, index
78
  texts = load_training_data()
79
  if not texts:
80
- print("No training data available. Skipping training.")
81
  return
82
 
83
  # Build RAG index
84
  build_rag_index(texts)
85
 
86
- train_dataset = ChatDataset(texts)
87
-
88
- training_args = TrainingArguments(
89
- output_dir="./results",
90
- num_train_epochs=3,
91
- per_device_train_batch_size=4, # Reduced to avoid memory issues
92
- save_steps=10_000,
93
- save_total_limit=2,
94
- use_cpu=True if not torch.cuda.is_available() else False, # Use CPU if no GPU
95
- logging_steps=100, # Log training progress
96
- )
97
-
98
- # Initialize optimizer explicitly
99
- optimizer = AdamW(model.parameters(), lr=5e-5)
100
-
101
- trainer = Trainer(
102
- model=model,
103
- args=training_args,
104
- train_dataset=train_dataset,
105
- optimizers=(optimizer, None), # Pass optimizer explicitly
106
- )
107
-
108
- # Set model to training mode for differential privacy
109
- model.train()
110
-
111
- # Add differential privacy
112
- try:
113
- privacy_engine = PrivacyEngine(secure_mode=False) # False for experimentation
114
- private_model, private_optimizer, train_dataloader = privacy_engine.make_private(
115
- module=model,
116
- optimizer=optimizer,
117
- data_loader=trainer.get_train_dataloader(),
118
- noise_multiplier=1.1,
119
- max_grad_norm=1.0,
120
- )
121
-
122
- trainer.optimizer = private_optimizer
123
- trainer.train_dataloader = train_dataloader
124
- trainer.model = private_model # Update trainer to use private model
125
-
126
- trainer.train()
127
- model.save_pretrained("./fine_tuned_model")
128
- tokenizer.save_pretrained("./fine_tuned_model")
129
- print("Model training completed and saved to ./fine_tuned_model")
130
- except Exception as e:
131
- print(f"Error during training with differential privacy: {e}")
132
 
133
  def add_noise(tensor, sensitivity, epsilon, delta):
134
  """Add Laplace noise for differential privacy."""
@@ -180,14 +118,14 @@ def chat(message, history):
180
 
181
  return response
182
 
183
- # Train the model on startup
184
  train_model()
185
 
186
  # Gradio interface
187
  iface = gr.ChatInterface(
188
  fn=chat,
189
- title="LLaMA 2 Persian Chatbot with Differential Privacy and RAG",
190
- description="Chat with a fine-tuned LLaMA 2 Persian model using training_data.txt from the root directory with RAG."
191
  )
192
 
193
  if __name__ == "__main__":
 
1
  import torch
2
+ from transformers import AutoModelForCausalLM, AutoTokenizer
3
  import numpy as np
4
  import gradio as gr
 
 
 
5
  from sentence_transformers import SentenceTransformer
6
  import faiss
7
 
 
30
  index = None
31
  texts = []
32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  # Load training data from training_data.txt in the root directory
34
  def load_training_data():
35
  global texts
 
55
  index.add(embeddings)
56
  return embedder, index
57
 
58
+ # Fine-tune model with differential privacy (skipped to use only pretrained LLaMA 2)
59
  def train_model():
60
  global texts, embedder, index
61
  texts = load_training_data()
62
  if not texts:
63
+ print("No training data available. Skipping RAG index build.")
64
  return
65
 
66
  # Build RAG index
67
  build_rag_index(texts)
68
 
69
+ print("Skipping fine-tuning to use only pretrained LLaMA 2 model.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
 
71
  def add_noise(tensor, sensitivity, epsilon, delta):
72
  """Add Laplace noise for differential privacy."""
 
118
 
119
  return response
120
 
121
+ # Train the model on startup (now only loads data and builds RAG index)
122
  train_model()
123
 
124
  # Gradio interface
125
  iface = gr.ChatInterface(
126
  fn=chat,
127
+ title="LLaMA 2 Persian Chatbot with RAG",
128
+ description="Chat with pretrained LLaMA 2 Persian model using training_data.txt as RAG knowledge base."
129
  )
130
 
131
  if __name__ == "__main__":