Spaces:
Running
on
Zero
Running
on
Zero
feiyang-cai
commited on
Update utils.py
Browse files
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=
|
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.
|
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
|