Instructions to use dnagpt/laya-bio-models with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Laya
How to use dnagpt/laya-bio-models with Laya:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
File size: 4,292 Bytes
d35dd87 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | #!/usr/bin/env python3
"""Continue the first fixed-budget pair after the already running M1.
Checks completed results and frozen input/code hashes before launching another
GPU process. Does not evaluate test or choose hyperparameters from calibration.
"""
import argparse
import hashlib
import json
import os
from pathlib import Path
import subprocess
import sys
import time
ROOT = Path(__file__).resolve().parents[1]
RUNS = ROOT / 'artifacts/laya_formal'
def write_status(value):
value['updated_utc'] = time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime())
path = RUNS / 'first_pair_status.json'
tmp = path.with_suffix('.tmp')
tmp.write_text(json.dumps(value, indent=2) + '\n')
tmp.replace(path)
print(json.dumps(value), flush=True)
def verify_frozen():
manifest = json.loads((RUNS / 'frozen_first_pair/run_manifest.json').read_text())
for name, expected in manifest['hashes'].items():
if hashlib.sha256((ROOT / name).read_bytes()).hexdigest() != expected:
raise RuntimeError(f'Frozen first-pair input/code changed: {name}')
for task in json.loads((ROOT / 'artifacts/laya_formal_data/manifest.json').read_text())['tasks'].values():
for split in ('train', 'selection_dev', 'calibration'):
item = task['files'][split]
if hashlib.sha256((ROOT / item['path']).read_bytes()).hexdigest() != item['sha256']:
raise RuntimeError(f'Data hash mismatch: {item["path"]}')
def check_summary(condition):
result = json.loads((RUNS / f'{condition}_seed20260922/summary.json').read_text())
if result['test_access'] or not result['no_cpt'] or not result['checkpoint_reload_logits_match']:
raise RuntimeError(f'{condition}: test/supervision/reload invariant failed')
if not result['training']['finite']:
raise RuntimeError(f'{condition}: finite training invariant failed')
if condition != 'b0' and (result['training']['updates'] != 3005 or result['training']['examples_consumed'] != 96160):
raise RuntimeError(f'{condition}: training budget mismatch')
if result['n_rows'] != {'train':32050, 'selection_dev':1978, 'calibration':1986}:
raise RuntimeError(f'{condition}: dataset membership counts changed')
return result
def main():
p = argparse.ArgumentParser()
p.add_argument('--wait-m1-pid', type=int, required=True)
a = p.parse_args()
verify_frozen()
while Path(f'/proc/{a.wait_m1_pid}').exists():
write_status({'state':'waiting_for_m1','m1_pid':a.wait_m1_pid,
'queue':['m2','b0'],'test_access':False})
time.sleep(30)
check_summary('m1')
for condition in ('m2','b0'):
verify_frozen()
output = RUNS / f'{condition}_seed20260922'
if (output / 'summary.json').exists():
check_summary(condition)
continue
command = [sys.executable, '-u', str(ROOT / 'scripts/laya_formal_experiment.py'),
'--condition',condition,'--task','both','--device','cuda',
'--epochs','3','--updates','0','--micro-batch','8','--grad-accum','4',
'--eval-batch','16','--seed','20260922',
'--eligible-ids','artifacts/laya_formal_data/eligible_ids.json',
'--output-dir',str(output)]
with (RUNS / 'logs' / f'{condition}_seed20260922.log').open('w') as log:
process = subprocess.Popen(command, cwd=ROOT, stdout=log, stderr=subprocess.STDOUT)
while process.poll() is None:
write_status({'state':'running','condition':condition,'pid':process.pid,
'command':command,'test_access':False})
time.sleep(30)
if process.returncode != 0:
raise RuntimeError(f'{condition} failed with exit code {process.returncode}; see log')
check_summary(condition)
write_status({'state':'complete','completed':['m1','m2','b0'],'test_access':False,
'remaining_paper_work':['fixed-head control','additional seeds','locked test','sequence dependence diagnostics']})
if __name__ == '__main__':
try:
main()
except Exception as exc:
write_status({'state':'failed','error':str(exc),'test_access':False})
raise
|