feiyang-cai commited on
Commit
762e097
·
verified ·
1 Parent(s): 8c11f13

Update utils.py

Browse files
Files changed (1) hide show
  1. utils.py +32 -3
utils.py CHANGED
@@ -218,9 +218,10 @@ class MolecularPropertyPredictionModel():
218
  #self.lora_model = PeftModel.from_pretrained(self.base_model, adapter_id, token = os.environ.get("TOKEN"))
219
  #self.lora_model.to("cuda")
220
  #print(self.lora_model)
221
-
222
  self.base_model.set_adapter(adapter_name)
223
  self.base_model.eval()
 
224
 
225
  #if adapter_name not in self.apapter_scaler_path:
226
  # self.apapter_scaler_path[adapter_name] = hf_hub_download(adapter_id, filename="scaler.pkl", token = os.environ.get("TOKEN"))
@@ -237,7 +238,7 @@ class MolecularPropertyPredictionModel():
237
  # # handle error
238
  # return "error"
239
 
240
- @spaces.GPU(duration=10)
241
  def predict(self, valid_df, task_type):
242
  test_dataset = Dataset.from_pandas(valid_df)
243
  # construct the dataloader
@@ -263,6 +264,34 @@ class MolecularPropertyPredictionModel():
263
  y_pred = self.scaler.inverse_transform(y_pred)
264
 
265
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
266
  return y_pred
267
 
268
  def predict_single_smiles(self, smiles, task_type):
@@ -293,7 +322,7 @@ class MolecularPropertyPredictionModel():
293
  valid_df_smiles = valid_df['smiles'].tolist()
294
 
295
  input_df = pd.DataFrame(valid_df_smiles, columns=['smiles'])
296
- results = self.predict(input_df, task_type)
297
 
298
  # add the results to the dataframe
299
  df.loc[valid_idx, 'prediction'] = results
 
218
  #self.lora_model = PeftModel.from_pretrained(self.base_model, adapter_id, token = os.environ.get("TOKEN"))
219
  #self.lora_model.to("cuda")
220
  #print(self.lora_model)
221
+
222
  self.base_model.set_adapter(adapter_name)
223
  self.base_model.eval()
224
+ print(f"switch to {adapter_name} successfully")
225
 
226
  #if adapter_name not in self.apapter_scaler_path:
227
  # self.apapter_scaler_path[adapter_name] = hf_hub_download(adapter_id, filename="scaler.pkl", token = os.environ.get("TOKEN"))
 
238
  # # handle error
239
  # return "error"
240
 
241
+ @spaces.GPU(duration=5)
242
  def predict(self, valid_df, task_type):
243
  test_dataset = Dataset.from_pandas(valid_df)
244
  # construct the dataloader
 
264
  y_pred = self.scaler.inverse_transform(y_pred)
265
 
266
 
267
+ return y_pred
268
+
269
+ @spaces.GPU(duration=20)
270
+ def predict_long(self, valid_df, task_type):
271
+ test_dataset = Dataset.from_pandas(valid_df)
272
+ # construct the dataloader
273
+ test_loader = torch.utils.data.DataLoader(
274
+ test_dataset,
275
+ batch_size=16,
276
+ collate_fn=self.data_collator,
277
+ )
278
+
279
+ # predict
280
+ y_pred = []
281
+ for i, batch in tqdm(enumerate(test_loader), total=len(test_loader), desc="Evaluating"):
282
+ with torch.no_grad():
283
+ batch = {k: v.to(self.base_model.device) for k, v in batch.items()}
284
+ outputs = self.base_model(**batch)
285
+ if task_type == "regression": # TODO: check if the model is regression or classification
286
+ y_pred.append(outputs.logits.cpu().detach().numpy())
287
+ else:
288
+ y_pred.append((torch.sigmoid(outputs.logits) > 0.5).cpu().detach().numpy())
289
+
290
+ y_pred = np.concatenate(y_pred, axis=0)
291
+ if task_type=="regression" and self.scaler is not None:
292
+ y_pred = self.scaler.inverse_transform(y_pred)
293
+
294
+
295
  return y_pred
296
 
297
  def predict_single_smiles(self, smiles, task_type):
 
322
  valid_df_smiles = valid_df['smiles'].tolist()
323
 
324
  input_df = pd.DataFrame(valid_df_smiles, columns=['smiles'])
325
+ results = self.predict_long(input_df, task_type)
326
 
327
  # add the results to the dataframe
328
  df.loc[valid_idx, 'prediction'] = results