QUICK interface
QUICK is an open-source HF/DFT code that runs on the GPU. Basis functions are supported only up to d angular momentum.
ASH features a simple interface to QUICK that allows QUICK energy+gradient calculations on the GPU. The QUICK interface can be used in a QM/MM setting, thus allowing both the QM and MM steps to run on the GPU (QUICK for QM and OpenMM for MM).
The QUICK interface is a bit limited at the moment.
QUICKTheory class:
class QUICKTheory:
def __init__(self, quickdir=None, filename='quick', printlevel=2,
quickinput=None, numcores=1, quickbinary="quick.cuda"):
Keyword |
Type |
Default value |
Details |
---|---|---|---|
|
string |
None |
Directory where QUICK binaries are. |
|
string |
None |
Single-line string containing the QUICK input-keywords (without job-keyword). |
|
integer |
2 |
Printlevel |
|
integer |
1 |
Number of CPU cores used (only for CPU-version of QUICK). |
|
string |
'quick' |
Filename used for QUICK input/output files. |
|
string |
'quick.cuda' |
Name of the QUICK binary to use. Options: 'quick.cuda' (GPU-CUDA), 'quick.cuda.MPI' (for multiple CUDA GPUs) or 'quick' (CPU) |
QUICK installation
QUICK needs to be compiled and installed separately, paying attention to different GPU architectures available. See QUICK installation guide. In our tests we have successfully compiled the CUDA version for a workstation with an NVIDIA Geforce RTX 2080 Ti like below:
QUICK_HOME=/path/to/quick-install-dir
mkdir ${QUICK_HOME}/builddir
cd ${QUICK_HOME}/builddir
cmake .. -DCOMPILER=GNU -DMPI=TRUE -DCUDA=TRUE -DQUICK_USER_ARCH="volta turing" \
-DCMAKE_INSTALL_PREFIX=${QUICK_INSTALL}
make
make install
QUICK performance control and parallelization
The QUICK binary (quickbinary keyword in QUICKTheory) should generally chosen to be quick.cuda when running on the GPU. The quick.cuda.mpi binary should be used when multiple GPU cards are available (requires MPI installation).
Examples
DFT-SCF example:
from ash import *
n2_singlet= Fragment(diatomic="N2", bondlength=1.09, charge=0, mult=1)
#Define QUICK theory : B3LYP/6-31G* calculation (note: do not put job-keyword in string)
quick = QUICKTheory(quickinput="B3LYP BASIS=6-31G* cutoff=1.0e-8")
Singlepoint(theory=quick, fragment=n2_singlet)