Arko006 commited on
Commit
648720e
·
verified ·
1 Parent(s): dbbf75a

Upload models/loader.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. models/loader.py +68 -0
models/loader.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+ import torch
4
+ from huggingface_hub import hf_hub_download
5
+ from safetensors.torch import load_file
6
+ from config import HF_MODEL_REPO, HF_TOKEN, MODEL_CACHE_DIR, NODE_DIM, EDGE_DIM, HIDDEN_DIM, NUM_TASKS, DROPOUT
7
+ from .multitask_gnn import MultiTaskGNN
8
+
9
+
10
+ class ModelLoader:
11
+ def __init__(self):
12
+ self.model = None
13
+ self.config = None
14
+
15
+ def load_config(self) -> dict:
16
+ if self.config is not None:
17
+ return self.config
18
+ try:
19
+ path = hf_hub_download(
20
+ repo_id=HF_MODEL_REPO,
21
+ filename="model_config.json",
22
+ token=HF_TOKEN or None,
23
+ cache_dir=MODEL_CACHE_DIR,
24
+ )
25
+ with open(path) as f:
26
+ self.config = json.load(f)
27
+ except Exception:
28
+ self.config = {
29
+ "node_dim": NODE_DIM,
30
+ "edge_dim": EDGE_DIM,
31
+ "hidden_dim": HIDDEN_DIM,
32
+ "num_tasks": NUM_TASKS,
33
+ "dropout": DROPOUT,
34
+ }
35
+ return self.config
36
+
37
+ def load_model(self) -> torch.nn.Module:
38
+ if self.model is not None:
39
+ return self.model
40
+
41
+ config = self.load_config()
42
+
43
+ model = MultiTaskGNN(
44
+ in_channels=config.get("node_dim", NODE_DIM),
45
+ edge_dim=config.get("edge_dim", EDGE_DIM),
46
+ hidden_dim=config.get("hidden_dim", HIDDEN_DIM),
47
+ num_tasks=config.get("num_tasks", NUM_TASKS),
48
+ dropout=config.get("dropout", DROPOUT),
49
+ )
50
+
51
+ try:
52
+ path = hf_hub_download(
53
+ repo_id=HF_MODEL_REPO,
54
+ filename="model.safetensors",
55
+ token=HF_TOKEN or None,
56
+ cache_dir=MODEL_CACHE_DIR,
57
+ )
58
+ state_dict = load_file(path)
59
+ model.load_state_dict(state_dict)
60
+ except Exception:
61
+ pass
62
+
63
+ model.eval()
64
+ self.model = model
65
+ return model
66
+
67
+ def is_loaded(self) -> bool:
68
+ return self.model is not None