File size: 2,852 Bytes
96b4304
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env bash
# 12-stage latent curriculum, instance-wise superposition targets.
#
# Same architecture and curriculum as w12_latent, except:
#   - the output prompt is one sampled stage-k assignment, not the unique
#     solution (input clues stay fixed)
#   - the candidate-head BCE is off (SUDOKU_AUX_WEIGHT=0)
#   - promotion is gated on the in-set rate (emitted digit is a stage-k
#     candidate), not on candidate-set exact match
#
# Usage:
#   bash launch_instance_latent.sh            # GPU 0, full 800k run
#   GPU=6 bash launch_instance_latent.sh      # pick another GPU
#   SUDOKU_MAX_STEPS=200 bash launch_instance_latent.sh   # smoke

set -u

_SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
_CODE_DIR="$(cd "${_SCRIPT_DIR}/.." && pwd)"
export SUDOKU_RUN_DIR="${SUDOKU_RUN_DIR:-${_SCRIPT_DIR}}"
# shellcheck source=env_paths.sh
source "${_SCRIPT_DIR}/env_paths.sh"

cd "$RUN_DIR" || exit 1
if [ -n "${CUDNN_LIB}" ]; then export LD_LIBRARY_PATH="${CUDNN_LIB}:${LD_LIBRARY_PATH:-}"; fi
export XLA_PYTHON_CLIENT_MEM_FRACTION=0.9

GPU="${GPU:-0}"
name="${NAME:-w12_inst_latent}"
mkdir -p logs

export SUDOKU_TRAIN_PATH="${_CODE_DIR}/datasets/train_sudoku_puzzles.npy"
export SUDOKU_TEST_PATH="${_CODE_DIR}/datasets/test_sudoku_puzzles.npy"
# Masks are a metric only (in-set rate / promotion). Not a training target.
export SUDOKU_TRAIN_CAND="${_CODE_DIR}/datasets_multicandidate_s12/train_cand_masks.npy"
export SUDOKU_TEST_CAND="${_CODE_DIR}/datasets_multicandidate_s12/test_cand_masks.npy"
export SUDOKU_INSTANCE_DIR="${_CODE_DIR}/datasets_superposition"

export SUDOKU_RESUME=0
export SUDOKU_LATENT_SLOTS=12
export SUDOKU_RECURRENT=1
export SUDOKU_BACKTRACK=0
export SUDOKU_START_STAGE=1
export SUDOKU_MAX_STAGE=12
export SUDOKU_CAND_SLOT_MODE=depth
export SUDOKU_PASSES_PER_STAGE=1
export SUDOKU_AUX_WEIGHT=0.0
export SUDOKU_LEVEL_BALANCED=0
export SUDOKU_DATA_CURRICULUM=none

export SUDOKU_PLATEAU_STEPS="${SUDOKU_PLATEAU_STEPS:-20000}"
export SUDOKU_PLATEAU_DELTA=0.005
export SUDOKU_PATIENCE="${SUDOKU_PATIENCE:-80000}"
export SUDOKU_MIN_STAGE_STEPS="${SUDOKU_MIN_STAGE_STEPS:-8000}"
export SUDOKU_PROMOTE_ACC="${SUDOKU_PROMOTE_ACC:-0.90}"
export SUDOKU_MAX_STEPS="${SUDOKU_MAX_STEPS:-800000}"
export SUDOKU_EVAL_EVERY="${SUDOKU_EVAL_EVERY:-2000}"
export SUDOKU_SAVE_EVERY="${SUDOKU_SAVE_EVERY:-10000}"
export SUDOKU_CKPT_KEEP=100

export SUDOKU_LR=0.0002
export SUDOKU_DROPOUT=0.2
export SUDOKU_WD=0.005

echo "launching ${name} on GPU ${GPU}"
echo "  K=12 recurrent=1 aux=0 instance_dir=${SUDOKU_INSTANCE_DIR}"
echo "  max_steps=${SUDOKU_MAX_STEPS} plateau=${SUDOKU_PLATEAU_STEPS} patience=${SUDOKU_PATIENCE}"
CUDA_VISIBLE_DEVICES="${GPU}" \
  nohup "$PY" -u -m train.main \
    --workdir="./logs/${name}" \
    --exp_name="${name}" \
    > "logs/${name}.log" 2>&1 &
echo "  pid $!  log=${RUN_DIR}/logs/${name}.log"