Some checks failed
Build wheels / build (ubuntu-latest, 3.11) (push) Has been cancelled
Build wheels / build (ubuntu-latest, 3.12) (push) Has been cancelled
Build wheels / build (ubuntu-latest, 3.13) (push) Has been cancelled
Tests / check (push) Has been cancelled
Tests / build (ubuntu-latest, 3.11) (push) Has been cancelled
Tests / build (ubuntu-latest, 3.12) (push) Has been cancelled
Tests / build (ubuntu-latest, 3.13) (push) Has been cancelled
136 lines
4.1 KiB
Bash
Executable File
136 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Focused Vidal/MPS expectation test cases for 1D chain circuits.
|
|
#
|
|
# These cases intentionally avoid qmatchatea and generic TN paths. They target
|
|
# the current supported scope: one-qubit gates, adjacent two-qubit gates, and
|
|
# Pauli-sum expectation values on a 1D chain.
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$ROOT_DIR"
|
|
|
|
PYTHON_BIN="${PYTHON_BIN:-.venv/bin/python}"
|
|
MPIEXEC="${MPIEXEC:-mpiexec}"
|
|
HOSTFILE="${HOSTFILE:-hostfile}"
|
|
|
|
THREADS="${THREADS:-32}"
|
|
MPI_RANKS="${MPI_RANKS:-16}"
|
|
MPI_THREADS="${MPI_THREADS:-12}"
|
|
|
|
export OMP_NUM_THREADS="${OMP_NUM_THREADS:-1}"
|
|
export MKL_NUM_THREADS="${MKL_NUM_THREADS:-1}"
|
|
source "$ROOT_DIR/tools/qibotn_torch_mt_env.sh"
|
|
|
|
run() {
|
|
echo
|
|
echo "--------------------------------------------------------------------------------"
|
|
echo "$*"
|
|
echo "--------------------------------------------------------------------------------"
|
|
"$@"
|
|
}
|
|
|
|
case "${1:-help}" in
|
|
smoke)
|
|
# Short correctness-oriented run. Useful before starting long jobs.
|
|
run "$PYTHON_BIN" -u benchmark_cpu_expectation.py \
|
|
--mps \
|
|
--nqubits 40 \
|
|
--nlayers 10 \
|
|
--bond 2048 \
|
|
--torch-threads "$THREADS" \
|
|
--circuits brickwall_cnot reversed_cnot shifted_cz rxx_rzz \
|
|
--observables ring_xz open_zz range2_xx long_z_string
|
|
;;
|
|
|
|
convergence)
|
|
# Same circuit/observable, increasing bond. Check value convergence.
|
|
for bond in ${BONDS:-4096 16384 65536}; do
|
|
run "$PYTHON_BIN" -u benchmark_cpu_expectation.py \
|
|
--mps \
|
|
--nqubits "${NQ:-80}" \
|
|
--nlayers "${LAYERS:-16}" \
|
|
--bond "$bond" \
|
|
--torch-threads "$THREADS" \
|
|
--circuits "${CIRCUIT:-brickwall_cnot}" \
|
|
--observables "${OBSERVABLE:-ring_xz}"
|
|
done
|
|
;;
|
|
|
|
single-long)
|
|
# Single long Vidal run. On node-3, a similar n=40,l=30,bond=2048 case
|
|
# took about 9 minutes for one expectation. This one is meant to be longer.
|
|
run "$PYTHON_BIN" -u benchmark_cpu_expectation.py \
|
|
--mps \
|
|
--nqubits "${NQ:-80}" \
|
|
--nlayers "${LAYERS:-16}" \
|
|
--bond "${BOND:-65536}" \
|
|
--torch-threads "$THREADS" \
|
|
--circuits "${CIRCUIT:-brickwall_cnot}" \
|
|
--observables "${OBSERVABLE:-ring_xz}"
|
|
;;
|
|
|
|
suite-long)
|
|
# Application-style multi-circuit, multi-observable MPS run.
|
|
# This is intentionally multi-term and should run much longer than single-long.
|
|
run "$PYTHON_BIN" -u benchmark_cpu_expectation.py \
|
|
--mps \
|
|
--nqubits "${NQ:-80}" \
|
|
--nlayers "${LAYERS:-16}" \
|
|
--bond "${BOND:-65536}" \
|
|
--torch-threads "$THREADS" \
|
|
--circuits brickwall_cnot reversed_cnot shifted_cz rxx_rzz \
|
|
--observables ring_xz open_zz mixed_local range2_xx long_z_string
|
|
;;
|
|
|
|
mpi-long)
|
|
# Multi-node Vidal segmented MPS run. Uses HOSTFILE.
|
|
run "$MPIEXEC" -hostfile "$HOSTFILE" -n "$MPI_RANKS" "$PYTHON_BIN" -u benchmark_cpu_expectation.py \
|
|
--mpi --mps \
|
|
--nqubits "${NQ:-80}" \
|
|
--nlayers "${LAYERS:-16}" \
|
|
--bond "${BOND:-65536}" \
|
|
--torch-threads "$MPI_THREADS" \
|
|
--circuits brickwall_cnot reversed_cnot shifted_cz rxx_rzz \
|
|
--observables ring_xz open_zz mixed_local range2_xx long_z_string
|
|
;;
|
|
|
|
stress)
|
|
# Heavier entanglement. Start only after single-long is stable.
|
|
run "$PYTHON_BIN" -u benchmark_cpu_expectation.py \
|
|
--mps \
|
|
--nqubits "${NQ:-80}" \
|
|
--nlayers "${LAYERS:-18}" \
|
|
--bond "${BOND:-262144}" \
|
|
--torch-threads "${THREADS:-48}" \
|
|
--circuits "${CIRCUIT:-rxx_rzz}" \
|
|
--observables ring_xz open_zz range2_xx
|
|
;;
|
|
|
|
help|*)
|
|
cat <<'EOF'
|
|
Usage: ./run_vidal_mps_cases.sh [smoke|convergence|single-long|suite-long|mpi-long|stress]
|
|
|
|
Common overrides:
|
|
PYTHON_BIN=.venv/bin/python
|
|
THREADS=32
|
|
OMP_NUM_THREADS=1 MKL_NUM_THREADS=1
|
|
|
|
Single-node scale overrides:
|
|
NQ=80 LAYERS=16 BOND=65536
|
|
CIRCUIT=brickwall_cnot
|
|
OBSERVABLE=ring_xz
|
|
BONDS="4096 16384 65536" # for convergence mode
|
|
|
|
Multi-node overrides:
|
|
HOSTFILE=hostfile
|
|
MPI_RANKS=16 MPI_THREADS=12
|
|
|
|
Recommended first runs:
|
|
./run_vidal_mps_cases.sh smoke
|
|
./run_vidal_mps_cases.sh convergence
|
|
./run_vidal_mps_cases.sh single-long
|
|
EOF
|
|
;;
|
|
esac
|