Spaces:
Running
Running
File size: 5,295 Bytes
ae8e0ff | 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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | #!/bin/bash
# ============================================================
# QR-SPPS NB-5 Part B: Scaling Fit + Full Pipeline Summary
# ============================================================
# Run from: ~/QARPdemo (AFTER run_nb5_30q.sh has completed)
# cd ~/QARPdemo && sbatch run_nb5_final.sh
#
# All .pkl files read/written relative to working directory.
# QRSPPS_mpi_scaling.pkl is read from ~/QARPdemo/ (absolute path in script).
#
# This script:
# 1. Loads QRSPPS_mpi_scaling.pkl (29q+30q MPI measurements from Part A)
# 2. Runs single-node VQE benchmark at 12-20q (real energies, real timing)
# 3. Fits exponential scaling law and extrapolates to 40q
# 4. Integrates full NB1-NB4 pipeline results (all .pkl files)
# 5. Adds pipeline_summary for judge cross-verification
# 6. Saves QRSPPS_scaling_results.pkl + all scaling plots
#
# Execution: single-node, NO MPI.
#
# Expected results (verified against QRSPPS_scaling_results.pkl):
# Scaling law: t(n) = 7.8785 x 2^(1.1993*n)
# R2 = 0.9948 (exact: 0.9947702934)
# Doubling = 1.1993 per qubit
# t(40q) = 4,709,365s = 1,308.2h
# 40q RAM = 17,592,186 MB = 17.6 TB
# Policy red. = 16.67% (Stockpile release, dE[40q]=-7.4505)
#
# Depends on: QRSPPS_mpi_scaling.pkl (run_nb5_30q.sh)
# QRSPPS_hamiltonians.pkl (NB1)
# QRSPPS_vqe_results.pkl (NB2)
# QRSPPS_policy_results.pkl (NB3)
# QRSPPS_dosqpe_results.pkl (NB4)
# Produces: QRSPPS_scaling_results.pkl
# QRSPPS_qubit_scaling_full.png
# QRSPPS_qubit_scaling.png
#
# Runtime: ~15-20 min
# ============================================================
#SBATCH --job-name=qrspps_nb5_final
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=12
#SBATCH --partition=Interactive
#SBATCH --time=48:00:00
#SBATCH --output=log_nb5_final.txt
source ~/QARPdemo/setup_env.sh
export QARP_DISABLE_MPI=1
export OMP_NUM_THREADS=48
echo "================================================================"
echo " QR-SPPS NB-5B: Scaling Fit + Pipeline Summary"
echo "================================================================"
echo " Start : $(date)"
echo " Node : $(hostname)"
echo " Job : $SLURM_JOB_ID"
echo " Dir : $(pwd)"
echo ""
echo " Expected: R2=0.9948 | rate=1.1993/q | t(40q)=1308.2h | 17.6TB"
echo "================================================================"
# Dependency check (NB5_Scaling reads mpi_scaling.pkl from ~/QARPdemo/
# and all others as relative paths from cwd)
MISSING=0
MPI_PKL="$HOME/QARPdemo/QRSPPS_mpi_scaling.pkl"
if [ -f "$MPI_PKL" ]; then
echo "Found : QRSPPS_mpi_scaling.pkl ($(du -h $MPI_PKL | cut -f1))"
else
echo "MISSING: $MPI_PKL"
echo "Run 'sbatch run_nb5_30q.sh' first and wait for it to complete."
MISSING=$((MISSING+1))
fi
for PKL in QRSPPS_hamiltonians.pkl QRSPPS_vqe_results.pkl \
QRSPPS_policy_results.pkl QRSPPS_dosqpe_results.pkl; do
if [ -f "$PKL" ]; then
echo "Found : $PKL ($(du -h $PKL | cut -f1))"
else
echo "MISSING: $PKL in $(pwd)"
MISSING=$((MISSING+1))
fi
done
if [ $MISSING -gt 0 ]; then
echo ""
echo "ERROR: $MISSING required file(s) missing. Pipeline order:"
echo " NB1: Run QRSPPS_NB1_Hamiltonian_40q.ipynb in Jupyter"
echo " NB2: cd ~/QARPdemo && sbatch run_nb2_vqe.sh"
echo " NB3+4: cd ~/QARPdemo && sbatch run_nb3_nb4.sh"
echo " NB5A: cd ~/QARPdemo && sbatch run_nb5_30q.sh"
echo " NB5B: cd ~/QARPdemo && sbatch run_nb5_final.sh (this script)"
exit 1
fi
echo ""
echo "=== Starting QRSPPS_NB5_Scaling.py ==="
python3 QRSPPS_NB5_Scaling.py
EXIT=$?
echo ""
echo "=== NB5 scaling exit: $EXIT ($(date)) ==="
if [ ! -f "QRSPPS_scaling_results.pkl" ]; then
echo "ERROR: QRSPPS_scaling_results.pkl not created. Check log_nb5_final.txt."
exit 1
fi
echo "Output: QRSPPS_scaling_results.pkl ($(du -h QRSPPS_scaling_results.pkl | cut -f1)) OK"
# Verify the three key numbers
python3 - << 'PYEOF'
import pickle, sys
try:
with open('QRSPPS_scaling_results.pkl', 'rb') as f:
s = pickle.load(f)
print("")
print(" Scaling law verification (vs .pkl):")
print(f" R2 = {s['r_squared']:.4f} (expected 0.9948)")
print(f" Doubling rate = {s['doubling_rate']:.4f} (expected 1.1993)")
print(f" t(40q) = {s['t_40q_predicted']:.0f}s = {s['t_40q_predicted']/3600:.1f}h (expected 1308.2h)")
print(f" Policy E-red = {s['policy_energy_reduction_pct']:.2f}% (expected 16.67%)")
except Exception as e:
print(f" Verify failed: {e}", file=sys.stderr)
PYEOF
echo ""
echo "================================================================"
echo " FULL QR-SPPS PIPELINE COMPLETE"
echo " End: $(date)"
echo "================================================================"
echo ""
echo "All .pkl files for judge cross-verification:"
for PKL in QRSPPS_hamiltonians.pkl QRSPPS_vqe_results.pkl \
QRSPPS_policy_results.pkl QRSPPS_dosqpe_results.pkl \
QRSPPS_scaling_results.pkl; do
if [ -f "$PKL" ]; then
echo " OK $PKL ($(du -h $PKL | cut -f1))"
else
echo " -- $PKL MISSING"
fi
done
echo ""
echo "Run dashboard:"
echo " cd ~/QARPdemo && streamlit run dashboard.py"
exit $EXIT
|