From 9af3c3200b6bd68859f0aa64ea07528e4c35ab61 Mon Sep 17 00:00:00 2001 From: Oliver Knitter Date: Mon, 23 Dec 2024 17:22:45 +0000 Subject: [PATCH] Added neural quantum states (NQS) for quantum chemistry example repository. --- examples/neural_quantum_states/README.md | 50 ++++ examples/neural_quantum_states/__init__.py | 0 .../__pycache__/config.cpython-312.pyc | Bin 0 -> 3523 bytes .../__pycache__/config.cpython-38.pyc | Bin 0 -> 1816 bytes .../__pycache__/config.cpython-39.pyc | Bin 0 -> 1676 bytes .../__pycache__/main.cpython-310.pyc | Bin 0 -> 3620 bytes .../__pycache__/main.cpython-312.pyc | Bin 0 -> 6499 bytes .../__pycache__/main.cpython-38.pyc | Bin 0 -> 3614 bytes .../__pycache__/main.cpython-39.pyc | Bin 0 -> 4461 bytes examples/neural_quantum_states/config.py | 119 ++++++++ .../exp_configs/nqs.yaml | 54 ++++ examples/neural_quantum_states/main.py | 149 ++++++++++ examples/neural_quantum_states/nqs-qchem.yml | 190 +++++++++++++ examples/neural_quantum_states/run.sh | 16 ++ .../neural_quantum_states/src/__init__.py | 0 .../src/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 144 bytes .../src/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 138 bytes .../src/__pycache__/complex.cpython-312.pyc | Bin 0 -> 1816 bytes .../src/__pycache__/complex.cpython-39.pyc | Bin 0 -> 1507 bytes .../__pycache__/data_loader.cpython-312.pyc | Bin 0 -> 1192 bytes .../__pycache__/data_loader.cpython-39.pyc | Bin 0 -> 935 bytes .../src/__pycache__/evaluate.cpython-39.pyc | Bin 0 -> 2219 bytes .../src/__pycache__/helper.cpython-312.pyc | Bin 0 -> 2377 bytes .../src/__pycache__/helper.cpython-39.pyc | Bin 0 -> 1293 bytes .../src/__pycache__/optimizer.cpython-312.pyc | Bin 0 -> 1512 bytes .../src/__pycache__/optimizer.cpython-39.pyc | Bin 0 -> 970 bytes .../src/__pycache__/scheduler.cpython-312.pyc | Bin 0 -> 5143 bytes .../src/__pycache__/scheduler.cpython-39.pyc | Bin 0 -> 9584 bytes .../src/__pycache__/train.cpython-39.pyc | Bin 0 -> 7979 bytes .../src/__pycache__/util.cpython-312.pyc | Bin 0 -> 3551 bytes .../src/__pycache__/util.cpython-39.pyc | Bin 0 -> 3373 bytes examples/neural_quantum_states/src/complex.py | 35 +++ .../__pycache__/data_loader.cpython-39.pyc | Bin 0 -> 1899 bytes .../read_hamiltonian.cpython-312.pyc | Bin 0 -> 5480 bytes .../read_hamiltonian.cpython-39.pyc | Bin 0 -> 3757 bytes .../src/data/data_loader.py | 43 +++ .../src/data/pubchem_IDs/ID_data.bak | 32 +++ .../src/data/pubchem_IDs/ID_data.dat | Bin 0 -> 15877 bytes .../src/data/pubchem_IDs/ID_data.dir | 32 +++ .../src/data/read_hamiltonian.py | 93 ++++++ .../src/models/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 151 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 145 bytes .../models/__pycache__/base.cpython-312.pyc | Bin 0 -> 2947 bytes .../models/__pycache__/base.cpython-39.pyc | Bin 0 -> 6373 bytes .../models/__pycache__/made.cpython-312.pyc | Bin 0 -> 13595 bytes .../models/__pycache__/made.cpython-39.pyc | Bin 0 -> 7478 bytes .../models/__pycache__/retnet.cpython-39.pyc | Bin 0 -> 10366 bytes .../models/__pycache__/retnet2.cpython-39.pyc | Bin 0 -> 5202 bytes .../__pycache__/retnet_old.cpython-312.pyc | Bin 0 -> 13465 bytes .../__pycache__/retnet_old.cpython-39.pyc | Bin 0 -> 5761 bytes .../__pycache__/transformer.cpython-39.pyc | Bin 0 -> 6197 bytes .../models/__pycache__/util.cpython-312.pyc | Bin 0 -> 7209 bytes .../models/__pycache__/util.cpython-39.pyc | Bin 0 -> 2526 bytes .../neural_quantum_states/src/models/base.py | 164 +++++++++++ .../neural_quantum_states/src/models/made.py | 171 +++++++++++ .../src/models/retnet.py | 267 +++++++++++++++++ .../src/models/transformer.py | 172 +++++++++++ .../src/objective/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 158 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 148 bytes .../adaptive_shadows.cpython-39.pyc | Bin 0 -> 5569 bytes .../__pycache__/automatic.cpython-312.pyc | Bin 0 -> 11295 bytes .../__pycache__/automatic.cpython-39.pyc | Bin 0 -> 3836 bytes .../__pycache__/hamiltonian.cpython-312.pyc | Bin 0 -> 1903 bytes .../__pycache__/hamiltonian.cpython-39.pyc | Bin 0 -> 3948 bytes .../__pycache__/naive_sampler.cpython-39.pyc | Bin 0 -> 7386 bytes .../__pycache__/util.cpython-312.pyc | Bin 0 -> 780 bytes .../objective/__pycache__/util.cpython-39.pyc | Bin 0 -> 1707 bytes .../src/objective/adaptive_shadows.py | 147 ++++++++++ .../src/objective/automatic.py | 93 ++++++ .../src/objective/hamiltonian.py | 88 ++++++ .../src/objective/naive_sampler.py | 192 +++++++++++++ .../src/training/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 148 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 147 bytes .../__pycache__/evaluate.cpython-312.pyc | Bin 0 -> 3110 bytes .../__pycache__/evaluate.cpython-39.pyc | Bin 0 -> 3232 bytes .../__pycache__/scheduler.cpython-39.pyc | Bin 0 -> 9847 bytes .../__pycache__/train.cpython-312.pyc | Bin 0 -> 11569 bytes .../training/__pycache__/train.cpython-39.pyc | Bin 0 -> 9478 bytes .../src/training/evaluate.py | 92 ++++++ .../src/training/scheduler.py | 263 +++++++++++++++++ .../src/training/train.py | 268 ++++++++++++++++++ examples/neural_quantum_states/src/util.py | 99 +++++++ 85 files changed, 2829 insertions(+) create mode 100644 examples/neural_quantum_states/README.md create mode 100644 examples/neural_quantum_states/__init__.py create mode 100644 examples/neural_quantum_states/__pycache__/config.cpython-312.pyc create mode 100644 examples/neural_quantum_states/__pycache__/config.cpython-38.pyc create mode 100644 examples/neural_quantum_states/__pycache__/config.cpython-39.pyc create mode 100644 examples/neural_quantum_states/__pycache__/main.cpython-310.pyc create mode 100644 examples/neural_quantum_states/__pycache__/main.cpython-312.pyc create mode 100644 examples/neural_quantum_states/__pycache__/main.cpython-38.pyc create mode 100644 examples/neural_quantum_states/__pycache__/main.cpython-39.pyc create mode 100644 examples/neural_quantum_states/config.py create mode 100644 examples/neural_quantum_states/exp_configs/nqs.yaml create mode 100644 examples/neural_quantum_states/main.py create mode 100644 examples/neural_quantum_states/nqs-qchem.yml create mode 100755 examples/neural_quantum_states/run.sh create mode 100644 examples/neural_quantum_states/src/__init__.py create mode 100644 examples/neural_quantum_states/src/__pycache__/__init__.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/__init__.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/complex.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/complex.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/data_loader.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/data_loader.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/evaluate.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/helper.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/helper.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/optimizer.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/optimizer.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/scheduler.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/scheduler.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/train.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/util.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/__pycache__/util.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/complex.py create mode 100644 examples/neural_quantum_states/src/data/__pycache__/data_loader.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/data/__pycache__/read_hamiltonian.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/data/__pycache__/read_hamiltonian.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/data/data_loader.py create mode 100644 examples/neural_quantum_states/src/data/pubchem_IDs/ID_data.bak create mode 100644 examples/neural_quantum_states/src/data/pubchem_IDs/ID_data.dat create mode 100644 examples/neural_quantum_states/src/data/pubchem_IDs/ID_data.dir create mode 100644 examples/neural_quantum_states/src/data/read_hamiltonian.py create mode 100644 examples/neural_quantum_states/src/models/__init__.py create mode 100644 examples/neural_quantum_states/src/models/__pycache__/__init__.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/__init__.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/base.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/base.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/made.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/made.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/retnet.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/retnet2.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/retnet_old.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/retnet_old.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/transformer.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/util.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/models/__pycache__/util.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/models/base.py create mode 100644 examples/neural_quantum_states/src/models/made.py create mode 100644 examples/neural_quantum_states/src/models/retnet.py create mode 100644 examples/neural_quantum_states/src/models/transformer.py create mode 100644 examples/neural_quantum_states/src/objective/__init__.py create mode 100644 examples/neural_quantum_states/src/objective/__pycache__/__init__.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/objective/__pycache__/__init__.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/objective/__pycache__/adaptive_shadows.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/objective/__pycache__/automatic.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/objective/__pycache__/automatic.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/objective/__pycache__/hamiltonian.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/objective/__pycache__/hamiltonian.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/objective/__pycache__/naive_sampler.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/objective/__pycache__/util.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/objective/__pycache__/util.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/objective/adaptive_shadows.py create mode 100644 examples/neural_quantum_states/src/objective/automatic.py create mode 100644 examples/neural_quantum_states/src/objective/hamiltonian.py create mode 100644 examples/neural_quantum_states/src/objective/naive_sampler.py create mode 100644 examples/neural_quantum_states/src/training/__init__.py create mode 100644 examples/neural_quantum_states/src/training/__pycache__/__init__.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/training/__pycache__/__init__.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/training/__pycache__/evaluate.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/training/__pycache__/evaluate.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/training/__pycache__/scheduler.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/training/__pycache__/train.cpython-312.pyc create mode 100644 examples/neural_quantum_states/src/training/__pycache__/train.cpython-39.pyc create mode 100644 examples/neural_quantum_states/src/training/evaluate.py create mode 100644 examples/neural_quantum_states/src/training/scheduler.py create mode 100644 examples/neural_quantum_states/src/training/train.py create mode 100644 examples/neural_quantum_states/src/util.py diff --git a/examples/neural_quantum_states/README.md b/examples/neural_quantum_states/README.md new file mode 100644 index 0000000..fb4f2c3 --- /dev/null +++ b/examples/neural_quantum_states/README.md @@ -0,0 +1,50 @@ +# AUTOREGRESSIVE NEURAL QUANTUM STATES FOR QUANTUM CHEMISTRY + +This respository contains code jointly developed between the University of Michigan and SandboxAQ to implement the retentive network (RetNet) neural quantum states ansatz outlined in the paper, "Retentive Nueral Quantum States: Efficient Ansatze for Ab Initio Quantum Chemistry," by Oliver Knitter, Dan Zhao, James Stokes, Martin Ganahl, Stefan Leichenauer, and Shravan Veerapaneni. + +Preprint available on the arXiv: https://arxiv.org/abs/2411.03900 + +Corresponding Author: Oliver Knitter, knitter@umich.edu + +This repository is based off of the code Tianchen Zhao released (https://github.com/Ericolony/made-qchem) alongside the paper "Scalable neural quantum states architecture for quantum chemistry" (https://arxiv.org/abs/2208.05637). This new code uses neural quantum states (NQS), implemented in PyTorch to calculate electronic ground state energies for second quantized molecular Hamiltonians, which are calculated using PySCF and Tangelo (https://github.com/sandbox-quantum/Tangelo/). The RetNet ansatz implementation was made using the yet-another-retnet repository (https://github.com/fkodom/yet-another-retnet). Other ansatze available are the MADE and Transformer ansatze, which are implemented natively in PyTorch. The Hamiltonian expectation value estimates are calculated following the procedure outlined in Zhao et al.'s paper, but the modular structure of the code allows for relatively simple plug-and-play implementations of different models and Hamiltonian expectation estimate calculators. + +## Usage + +### 1. Environment Setup + +- The environment requirements are avaialable in the nqs-qchem.yml file. + +- Make sure your operating system meets the requirements for PyTorch 2.5.1 and CUDA 11.8. + +- If setting up the environment through the .yml file does not work, then the primary dependencies are obtained as follows: + + ``` + conda install python==3.9.18 + conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia + conda install tensorboardX + conda install pytorch-model-summary + conda install yacs + pip install yet-another-retnet + pip install tangelo-gc + pip install --prefer-binary pyscf + ``` + +### 2. Running the Program + +To view a list of previously logged molecule names, without running the main program, run + +``` +python -m main --list_molecules +``` + +If a desired molecule name is not stored by the program, then running the program with the desired name and a corresponding pubchem ID will link the name and ID in the program's internal name storage. The list of orbital basis sets is available within the PySCF documentation. The program itself can be run by executing the following script: + +``` +./run.sh +``` + +The run script will adapt to the number of GPUs specified for use, but it does so in a naive way. The script presumes that the total number of GPUs used by the program equals the total number of system GPUs available on the current machine, and will call on all those GPUs to run the program. It is the user's responsibility to ensure these parameters are adequate, and to modify them if necessary (to run the program using multiple nodes, for instance). +Input configuration flags are generally recorded in .yaml files within the directory ./exp_configs/ and are called as needed in the run script. Some configurations are expected to be specified within the run script: hypothetically all configurations may be specified in the run script, which supersedes the .yaml file, but this is not the expected form of use. + +### 3. Logging Outputs +All logged results and outputs produced by the program can be found under './logger/'. Each run of the program updates './logger/results.txt' (which is not automatically erased) with the best result obtained over the specified number of trials. Each run of the program generates its own output directory within './logger/' that stores a copy of the .yaml file containing the input configurations that were used (those not specified by the file are included in the name of the directory). A dictionary containing basic logging information for all trials is saved as 'result.npy', and tensorboard files containing identical information are saved as well. The model corresponding with the best score of all the trials is also saved here. It is possible to specify different save locations for all these data using existing input configurations. diff --git a/examples/neural_quantum_states/__init__.py b/examples/neural_quantum_states/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/neural_quantum_states/__pycache__/config.cpython-312.pyc b/examples/neural_quantum_states/__pycache__/config.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9110ff5dce9705184a54323fe88ea8354bef3d3 GIT binary patch literal 3523 zcmai$%WoS+7{JGl?f4lxi5(|Sle)A80yN=Kpj4=6v%7UxUGFZt>z3v+gn08PN!;3Q zp%sTjL_#PBE}#mI+z?kTocIH{fRsZs64FXYNVye-Q!nt%u4kO!wK9@D-#7D{?>X!B zubE5|!T3e^$@x8l(4SOcBis>={)!>=7}Zfdw1GB5i{TIoBPaZ0XM1rVaYA!$NC7{sYf983ry?Ic$CSW{~#iNDpBAB zy(vL9#yCMM6hss`(a**>C;Hi#;6%S{OPq-IiDQxxJ+(Z;cDzbmVOn>_Q%v?c6-4mv z^(D@pYNO1F7~~M-<=m;nbDS9LW8*v{dg{Qt=hb0>aorhTWU`lK5b-=GXfK0^7dR2` zL%hfd`uh-MW9C%iB}VjQ`7+z_vb@Q(?u=hyayHxXcXDnZ8vA;B!PT&|}nwZ-3mOtN$D99cw{IkFHgmc6q7% zaA~&dL(_FF#n?xbL*eD~)Ekz2=nfHXD?goe7gL7D;q@ zqp{`ufR3oEXESqajZJ5+v9bQZY2uH!*4u5TIk&ZSuXX9(@|v?bx7^rTSzn#K`;g>T zoi<)xS;ZYcttNeWeFmQvea~#8f8r=T^wpIwuk2m@EmCOG*P}Lbm859Ev%Z}s&5?vf ztr@36%(`vaa+SojS`}A}nnhAnx}}>pWD^uq&?LQzEm@XGq^ejVeCv`-(yCs;ie}5^ zO+h6Cl46o1J!qSXpjsp;>Q$p=%eZ2btR+-stm>km`gWp{JYTDjh$vWKNSIdzThTSF zNFR`>Z3>D;GO8??nxa*(DcCX@(hXawDvPp-HLyj7EO9}WYAVx{^MWldU<(M6mNl>_ zVR7ujC ze6Q&RMUrFP5~`L(QwTm85)46Nct^}#1&1kv1LOsCBYU* zLe&Kc8v>X}cqBNtNY;5yh(LBwI5eM)`P`B?B%B6vpdS(r+o;kQ*fD z%W!Q}$?rq*n4GE#aLG(8NRmmIV(6yr-QOntpXc4xCjGbeEdK6hqkezGxz?0Hr4M}T z8+c@&4unFXKhVX$V<;B?+};j9K|=@Wp*?9kyqj^Jip~z2wRW5gm)QR@E=PsXrGBL?KjJbIp-LQ+Mcv0OvZGu;@VK-ms%Et>f z#tS*>j&dgF7mv0h&1!YfsB7AvLb!UeAnd?* z_D@FBVlB>$wUZ3XX0#;xoyKy4COMvufj-Fdg2E+*%j#Z_vv9BT6{**GQOPBRWu>pg zIcZl_SX2IWX;S_rDL3P? z#J5$R4Vh`@baf+mE+SI#1VH?P)SQ8_#DK z*qVPcAJuPbS|5U3J7OJ8_|9}7bM2SRuNoAVdAi+A=EjlnCeGBXB~sWCrJjEB>SuxT~3X_lL5p+BCSCckUb5=58e?`HdWa+0(s zR<_(Or%p)xePpFMO#M_3&_3aUD~b@IPmvX{qUqXR6cXMI(^`OR!Y$WC)*@m7 zlTOrSc@qT?5_K#TQrF=Wf58f&kEp{c7D2v4oi6uL2sQ_Vc6%Ym#6*Xz>UtryDI-32 zATp~4W{=>=x{!+<6q-FAfCVcP2jUYRIrMX=N>oTZ*X#vMN1kUL^1x?n$Z-g=L^jhU zySvn+#0goEg4*X49?J^i^%g5iSY$2Q2*bOH7xq9e_ydZ8uMoRKFc#4;wOI{?Aw(1J z>k)(lR@;T9?z;W~^0Bm7g(o`!Xl%%4p+gwJqRJ!A~?-P98?&StLkx+qH-Z zy<~+B3TTk#2~3*R77xD+xayN2vO<_@w|mj|n$lrvE?U$OzL6TPS{jz8LDyxq$b%Zm z)m_3~syonTu?J~!u`bY=y|ljIVL2@cbz5PXk>1z!my+NvB^miY(#yj= literal 0 HcmV?d00001 diff --git a/examples/neural_quantum_states/__pycache__/config.cpython-39.pyc b/examples/neural_quantum_states/__pycache__/config.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08a96967c784ade0804f3581ab8c5c7c4421bfc2 GIT binary patch literal 1676 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 Sonfx_XFc2fG{rQ?>-K*?qPtH3 literal 0 HcmV?d00001 diff --git a/examples/neural_quantum_states/__pycache__/main.cpython-38.pyc b/examples/neural_quantum_states/__pycache__/main.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1debd948dec7d37ecf1241151cd9ac4cd61e295a GIT binary patch literal 3614 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