File size: 1,714 Bytes
ae02605
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/bin/bash
# QM9 molecular generation - validity retained as denoising steps fall.
#
# This is the axis the discrete graph-diffusion literature competes on. DiGress
# and its successors use hundreds of denoising steps; the question is how much
# validity survives at few steps, and that depends on the training schedule and
# the decoding rule rather than on model scale - which is why it is winnable at
# this budget when text8 bits-per-character is not.
#
# Both of the project's findings are under test here at once, and QM9 is the
# strongest possible case for the second. Its marginals are extremely
# position-dependent: node slot 8 is NEVER occupied, and edge slots range from
# never-bonded to always-bonded, giving a mean total-variation distance of 0.435
# between a slot and the average slot. Finding 2 therefore predicts that a
# relative-only encoding badly caps few-step generation here, and that absolute
# position information produces a large gain. Registered before the runs.
#SBATCH -J mol1
#SBATCH -p gpu-h100
#SBATCH --gpus=h100:1
#SBATCH -c 8
#SBATCH --mem=48g
#SBATCH -t 3:00:00
#SBATCH -o logs/mol1-%A_%a.out
#SBATCH --array=0-7%8
source /etc/profile
SCR=/scratch/zt1/project/msml612/user/$USER
module load python/3.10.10
export PYTHONPATH=
cd $SCR/pcmd/src
MODES=(mdlm matched); PES=(rope ape); SEEDS=(0 1)
I=$SLURM_ARRAY_TASK_ID
M=${MODES[$((I / 4))]}; P=${PES[$(((I % 4) / 2))]}; S=${SEEDS[$((I % 2))]}
NAME="mol1-$M-$P-s$S"
echo "=== $NAME ==="
$SCR/hf_env/bin/python -u train_mol.py --mode $M --pe $P --seed $S --K 8 \
  --root $SCR/pcmd/data/qm9 --d 384 --layers 8 --heads 8 --bs 256 \
  --steps 60000 --lr 1e-4 --warmup 2000 --n_gen 4096 --gen_bs 512 \
  --out $SCR/pcmd/runs/$NAME