Files
qibotn/run_vidal_mps_cases.sh
jaunatisblue 72f95599bb
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
完善mps的vidal机制,多节点并行;补充tn搜索时dask集群搜索的方式
2026-05-12 15:44:19 +08:00

135 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}"
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