Queimo's picture
Pin exact evaluated starting checkpoint, objective equivalence tests, source and joint training protocol
31dee3b verified
Raw History Blame Contribute Delete
4.69 kB
"""Restartable single-GPU prepare → validate → train → probe workflow."""
from pathlib import Path
import sys
sys.path.insert(0,str(Path(__file__).resolve().parent))
from multitask_data import *
import subprocess
def alive(pid,needle):
try:return needle in Path(f'/proc/{pid}/cmdline').read_text()
except OSError:return False
def run_script(name,*args):
process=subprocess.Popen([sys.executable,'-u',str(Path(__file__).with_name(name)),*args],env={**os.environ,'TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD':'1'})
write(OUT/'active_process.json',dict(pid=process.pid,script=name,args=list(args),time=time.time()))
if name=='multitask_data.py':write(OUT/'prepare_pid.json',dict(pid=process.pid))
code=process.wait()
if code:raise RuntimeError(f'{name} exited with code {code}; see driver.log and status.json')
def wait_existing_stage(script):
candidates=[]
for name in ['active_process.json','prepare_pid.json','status.json']:
try:candidates.append(json.loads((OUT/name).read_text()).get('pid'))
except (OSError,ValueError):pass
for pid in set(candidates)-{None,os.getpid()}:
if alive(pid,script):
print('WAITING_FOR_EXISTING_STAGE',script,pid,flush=True)
while alive(pid,script):time.sleep(20)
def publish_protocol():
from multitask_model import CONFIG
api=HfApi();api.create_repo(MODEL_REPO,repo_type='model',exist_ok=True)
sources=[Path(__file__).with_name(n) for n in ['multitask_data.py','multitask_model.py','multitask_train.py','multitask_evaluate.py','multitask_driver.py','eval_common.py','train_cosmo.py','bigsoldb_evaluate.py','openadmet_evaluate.py']]
write(OUT/'source_hashes.json',{p.name:sha(p) for p in sources})
write(OUT/'config.json',CONFIG)
readme=OUT/'README.md'
if not readme.exists():readme.write_text('''---
tags:
- chemistry
- multitask
---
# REM3DI PCQMep2 COSMOep10 CombiSolv-QM continuation
Training is in progress. The exact encoder/preprocessors/COSMO head from the preceding BigSolDB2.0 evaluation initialize this run; only the omitted denoising decoder is restored from PCQM epoch2. Three tasks train jointly: original embedding denoising, COSMO sigma/A/V reconstruction, and CombiSolv-QM solvation free energy. Monroe's uncertainty weights and covariance decorrelation are used. See config.json, initialization.json, validation files, source/ and the pinned prepared dataset reference.
Five full joint epochs are planned. Each epoch directory includes all model heads, learned task weights, optimizer, scheduler, RNG, label transforms, architecture and SHA-256 manifest. Each completed checkpoint is backed up and its large-file hashes verified. Every epoch will receive a matched BigSolDB2.0 Kumo Large probe; a final report will replace this progress card after all requested results pass validation.
''')
names=['README.md','initialization.json','config.json','source_hashes.json','loss_implementation_validation.json','smoke_validation.json','prepared_data_hub.json','preparation_complete.json']
ops=[CommitOperationAdd(path_in_repo=n,path_or_fileobj=str(OUT/n)) for n in names if (OUT/n).exists()]
ops += [CommitOperationAdd(path_in_repo='source/'+p.name,path_or_fileobj=str(p)) for p in sources]
c=api.create_commit(repo_id=MODEL_REPO,operations=ops,commit_message='Pin exact evaluated starting checkpoint, objective equivalence tests, source and joint training protocol')
write(OUT/'protocol_hub.json',dict(repository=MODEL_REPO,revision=c.oid))
def main():
OUT.mkdir(exist_ok=True)
lock=(OUT/'driver.lock').open('a');fcntl.flock(lock,fcntl.LOCK_EX|fcntl.LOCK_NB)
if (OUT/'complete.json').exists():print('MULTITASK_ALREADY_COMPLETE');return
if not (OUT/'preparation_complete.json').exists():
wait_existing_stage('multitask_data.py')
if not (OUT/'preparation_complete.json').exists():run_script('multitask_data.py')
if not (OUT/'smoke_validation.json').exists():
wait_existing_stage('multitask_train.py')
if not (OUT/'smoke_validation.json').exists():run_script('multitask_train.py','--smoke')
publish_protocol()
if not (OUT/'training_complete.json').exists():
wait_existing_stage('multitask_train.py')
if not (OUT/'training_complete.json').exists():run_script('multitask_train.py')
wait_existing_stage('multitask_evaluate.py')
if not (OUT/'complete.json').exists():run_script('multitask_evaluate.py')
if __name__=='__main__':
try:main()
except Exception:
error=traceback.format_exc();print(error,flush=True)
write(OUT/'driver_failure.json',dict(error=error,time=time.time(),pid=os.getpid()));raise