ESM2-GraphResidual-v2 / src /models /exporting.py
Marcochris's picture
Upload 10 files
e797c98 verified
Raw History Blame Contribute Delete
2 kB
import gzip,hashlib,json,shutil
from pathlib import Path
import numpy as np,pandas as pd,torch
from src.models.model import ResidualV2,SEQ_TYPES
from src.graph.data import Inputs,COUNTS
def export_all(root,checkpoint,out,chunk=50000):
root=Path(root);out=Path(out);(out/"embeddings").mkdir(parents=True,exist_ok=True);state=torch.load(checkpoint,map_location="cpu",weights_only=False);model=ResidualV2(state["relations"],state["config"]["beta_init"]);model.load_state_dict(state["model_state_dict"]);model.eval();inputs=Inputs(root);m=pd.read_csv(root/"work/graph_embedding_assets_v1/node_id_mapping.tsv",sep="\t");m.to_csv(out/"embeddings/node_id_mapping.tsv",sep="\t",index=False);modes=[];checks=[]
with torch.no_grad():
for typ,n in COUNTS.items():
dst=out/"embeddings"/f"{typ}_residual_embeddings.npy";arr=np.lib.format.open_memmap(dst,mode="w+",dtype=np.float16,shape=(n,640))
for i in range(0,n,chunk):
j=min(i+chunk,n);idx=np.arange(i,j);g,e,v=inputs.batch(typ,idx,"cpu");z,_,_=model.encode(typ,g,e,v);arr[i:j]=z.numpy().astype(np.float16)
arr.flush();a=np.load(dst,mmap_mode="r");checks.append((typ+"_shape",a.shape==(n,640),str(a.shape)));checks.append((typ+"_finite",np.isfinite(a).all(),str(a.dtype)))
sub=m[m.node_type==typ].sort_values("node_index")
if typ in SEQ_TYPES:
v=np.asarray(inputs.valid[typ],bool);mode=np.where(v,"esm_graph_residual","graph_only_fallback")
else:mode=np.repeat("graph_projected",n)
modes.append(pd.DataFrame({"node_type":typ,"node_index":np.arange(n),"node_id":sub.node_id.to_numpy(),"fusion_mode":mode}))
pd.concat(modes).to_csv(out/"embeddings/fusion_mode.tsv.gz",sep="\t",index=False,compression="gzip")
rep=pd.DataFrame(checks,columns=["check","passed","detail"]);rep["status"]=np.where(rep.passed,"PASS","FAIL");rep[["check","status","detail"]].to_csv(out/"embedding_integrity_report.tsv",sep="\t",index=False)
if not rep.passed.all():raise RuntimeError("export integrity failed")
print("EXPORT_PASS",len(checks))