Hey Everyone!
I’am trying to efficiently compute DFT energy for different molecules using a multiprocessing Queue and a process Pool.
First, I put ase.Atoms objects into a queue then compute the energy using the apply_async method of Pool:
def calculate_dft_energy_queue(queue, n_threads, M):
m = Manager()
# Create multiprocessing queue
q = m.Queue()
# Create a group of parallel writers and start them
for elem in queue:
q.put(elem)
# Create multiprocessing pool
p = Pool(n_threads)
# Calculate energy for every item in the queue.
# To mitigate large variance in dft computation times
# for different molecules the size of the queue
# must be significantly larger then n_threads.
energy_calculators = []
for i in range(len(queue)):
energy_calculators.append(p.apply_async(calculate_dft_energy_item, (q, M)))
# Wait for the asynchrounous reader threads to finish
results = [ec.get() for ec in energy_calculators]
results = sorted(results, key=lambda x:x[0])
p.terminate()
p.join()
return results
The ‘calculate_dft_energy_item’ transforms ase.Atoms object into a psi4.core.Molecule object and computes DFT energy:
def calculate_dft_energy_item(queue):
# Get molecule from the queue
ase_atoms, _, idx = queue.get()
molecule = atoms2psi4mol(ase_atoms)
# Calculate DFT energy
energy = get_dft_energy(molecule)
print(energy)
return (idx, energy)
The ‘get_dft_energy’ function:
def get_dft_energy(mol):
try:
energy = psi4.driver.energy(FUNCTIONAL_STRING, **{"molecule": mol, "return_wfn": False})
except SCFConvergenceError as e:
# Set energy to some threshold if SOSCF does not converge
# Multiply by 627.5 to go from Hartree to kcal/mol
print("DFT optimization did not converge!")
return -1000.0 * 627.5
psi4.core.clean()
return energy * 627.5
Then I get the following error:
Scratch directory: /tmp/
*** tstart() called on dlils-kad-2gpu
*** at Wed Jan 11 23:18:37 2023
=> Loading Basis Set <=
Name: DEF2-SVP
Role: ORBITAL
Keyword: BASIS
atoms 1 entry O line 130 file /mnt/2tb/tsypin/anaconda3/envs/md_env/share/psi4/basis/def2-svp.gbs
atoms 2-3, 5, 7-12, 15-18, 20, 22 entry C line 90 file /mnt/2tb/tsypin/anaconda3/envs/md_env/share/psi4/basis/def2-svp.gbs
atoms 4 entry S line 328 file /mnt/2tb/tsypin/anaconda3/envs/md_env/share/psi4/basis/def2-svp.gbs
atoms 6, 13-14 entry N line 110 file /mnt/2tb/tsypin/anaconda3/envs/md_env/share/psi4/basis/def2-svp.gbs
atoms 19, 21 entry F line 150 file /mnt/2tb/tsypin/anaconda3/envs/md_env/share/psi4/basis/def2-svp.gbs
atoms 23-33 entry H line 15 file /mnt/2tb/tsypin/anaconda3/envs/md_env/share/psi4/basis/def2-svp.gbs
=> WB97X-D: Empirical Dispersion <=
Chai and Head-Gordon Dispersion Correction
Chai, J.-D.; Head-Gordon, M. (2010), J. Chem. Phys., 132: 6615-6620
s6 = 1.000000
---------------------------------------------------------
SCF
by Justin Turney, Rob Parrish, Andy Simmonett
and Daniel G. A. Smith
RKS Reference
1 Threads, 7629 MiB Core
---------------------------------------------------------
==> Geometry <==
Molecular point group: c1
Full point group: C1
Geometry (in Angstrom), charge = 0, multiplicity = 1:
Center X Y Z Mass
------------ ----------------- ----------------- ----------------- -----------------
O -2.167867914424 -1.962588696865 0.370367951682 15.994914619570
C -1.726256554514 -0.922864193944 -0.149864404419 12.000000000000
C -0.271956842172 -0.809455125346 -0.508895445941 12.000000000000
S 0.526637461753 -0.263406843404 1.068910004996 31.972071174400
C 2.280446301536 -0.154979565447 0.781632164670 12.000000000000
N 3.179060976186 -1.189271429443 0.968063754384 14.003074004430
C 4.417025354437 -0.735245254807 0.672485096712 12.000000000000
C 5.657329012151 -1.346148264937 0.649876622041 12.000000000000
C 6.816844240870 -0.707928076461 0.290242965568 12.000000000000
C 6.691746799445 0.629443764239 -0.005635488402 12.000000000000
C 5.468467523927 1.250287407344 0.014465204913 12.000000000000
C 4.328757323058 0.559945797839 0.342925027276 12.000000000000
N 3.039526321674 0.909829599877 0.434147564831 14.003074004430
N -2.632811716867 0.148808968265 -0.430559993027 14.003074004430
C -4.013605931806 0.161578391499 -0.159427892945 12.000000000000
C -4.752150489321 -0.755717653395 0.562628815130 12.000000000000
C -6.105751076315 -0.649732549374 0.751885949582 12.000000000000
C -6.808369086732 0.392839250554 0.251208606169 12.000000000000
F -8.125833248812 0.518601656855 0.445109913212 18.998403162730
C -6.130013823267 1.352995821781 -0.466305919285 12.000000000000
F -6.842175993804 2.389013087478 -0.926445653242 18.998403162730
C -4.746361860982 1.236579912048 -0.648634870780 12.000000000000
H -0.163567605548 0.040635315824 -1.205382117854 1.007825032230
H 0.137134578668 -1.750199516729 -0.854296458713 1.007825032230
H 5.727494747895 -2.425659953942 0.895557383855 1.007825032230
H 7.788019560707 -1.206406865598 0.302899204155 1.007825032230
H 7.618696840841 1.188020575420 -0.269049915072 1.007825032230
H 5.430489516889 2.327084697066 -0.263429594343 1.007825032230
H 2.647767672380 1.867907229186 0.241010295921 1.007825032230
H -2.161907760510 0.997304042544 -0.894708832110 1.007825032230
H -4.250925854811 -1.628236536305 0.955001410991 1.007825032230
H -6.625096916710 -1.473899607494 1.326835665672 1.007825032230
H -4.246670231684 1.999091381070 -1.226783608770 1.007825032230
Running in c1 symmetry.
Rotational constants: A = 0.03642 B = 0.00222 C = 0.00214 [cm^-1]
Rotational constants: A = 1091.76325 B = 66.70255 C = 64.15705 [MHz]
Nuclear repulsion = 1693.023622131090860
Charge = 0
Multiplicity = 1
Electrons = 164
Nalpha = 82
Nbeta = 82
==> Algorithm <==
SCF Algorithm Type is DF.
DIIS enabled.
MOM disabled.
Fractional occupation disabled.
Guess Type is SAD.
Energy threshold = 1.00e-06
Density threshold = 1.00e-06
Integral threshold = 1.00e-12
==> Primary Basis <==
Basis Set: DEF2-SVP
Blend: DEF2-SVP
Number of shells: 167
Number of basis functions: 367
Number of Cartesian functions: 389
Spherical Harmonics?: true
Max angular momentum: 2
forrtl: severe (174): SIGSEGV, segmentation fault occurred
Image PC Routine Line Source
libgdma.so 00007FAA2E4F20DC for__signal_handl Unknown Unknown
libpthread-2.27.s 00007FAABF1AC980 Unknown Unknown Unknown
libiomp5.so 00007FAABDF43776 __kmp_acquire_tic Unknown Unknown
libiomp5.so 00007FAABDF1443A __kmpc_set_lock Unknown Unknown
core.cpython-39-x 00007FAA25DB4520 _ZN3psi8timer_onE Unknown Unknown
core.cpython-39-x 00007FAA1C6E9333 _ZN3psi5VBase10in Unknown Unknown
core.cpython-39-x 00007FAA1C6E8219 Unknown Unknown Unknown
core.cpython-39-x 00007FAA25FE0FB0 Unknown Unknown Unknown
core.cpython-39-x 00007FAA25FC5D7A Unknown Unknown Unknown
core.cpython-39-x 00007FAA25FF4523 Unknown Unknown Unknown
core.cpython-39-x 00007FAA262C51BE Unknown Unknown Unknown
core.cpython-39-x 00007FAA26302080 Unknown Unknown Unknown
core.cpython-39-x 00007FAA264BD4FD Unknown Unknown Unknown
core.cpython-39-x 00007FAA264BD79B Unknown Unknown Unknown
core.cpython-39-x 00007FAA2612B691 Unknown Unknown Unknown
python3.9 000055EE6A253E14 Unknown Unknown Unknown
python 000055EE6A20DCAF _PyObject_MakeTpC Unknown Unknown
python3.9 000055EE6A18805B Unknown Unknown Unknown
python 000055EE6A217A7A _PyObject_Call Unknown Unknown
python3.9 000055EE6A17DAD9 Unknown Unknown Unknown
python3.9 000055EE6A228E9B Unknown Unknown Unknown
core.cpython-39-x 00007FAA26519557 Unknown Unknown Unknown
python 000055EE6A20DCAF _PyObject_MakeTpC Unknown Unknown
python 000055EE6A2ABD89 _PyEval_EvalFrame Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python 000055EE6A2693C4 _PyFunction_Vecto Unknown Unknown
python 000055EE6A21795A _PyObject_Call Unknown Unknown
python 000055EE6A2A99F0 _PyEval_EvalFrame Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python 000055EE6A2693C4 _PyFunction_Vecto Unknown Unknown
python 000055EE6A21795A _PyObject_Call Unknown Unknown
python 000055EE6A2A99F0 _PyEval_EvalFrame Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python 000055EE6A2693C4 _PyFunction_Vecto Unknown Unknown
python 000055EE6A21795A _PyObject_Call Unknown Unknown
python 000055EE6A2A99F0 _PyEval_EvalFrame Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python 000055EE6A2693C4 _PyFunction_Vecto Unknown Unknown
python 000055EE6A21795A _PyObject_Call Unknown Unknown
python 000055EE6A2A99F0 _PyEval_EvalFrame Unknown Unknown
python 000055EE6A269284 _PyFunction_Vecto Unknown Unknown
python3.9 000055EE6A1CFAE6 Unknown Unknown Unknown
python 000055EE6A269284 _PyFunction_Vecto Unknown Unknown
python 000055EE6A217A7A _PyObject_Call Unknown Unknown
python 000055EE6A2A99F0 _PyEval_EvalFrame Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python 000055EE6A269354 _PyFunction_Vecto Unknown Unknown
python 000055EE6A217A7A _PyObject_Call Unknown Unknown
python 000055EE6A2A99F0 _PyEval_EvalFrame Unknown Unknown
python 000055EE6A269284 _PyFunction_Vecto Unknown Unknown
python3.9 000055EE6A1D172F Unknown Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python3.9 000055EE6A269DA9 Unknown Unknown Unknown
python3.9 000055EE6A1D058E Unknown Unknown Unknown
python 000055EE6A269284 _PyFunction_Vecto Unknown Unknown
python3.9 000055EE6A1D172F Unknown Unknown Unknown
python 000055EE6A269284 _PyFunction_Vecto Unknown Unknown
python 000055EE6A253ECA _PyObject_FastCal Unknown Unknown
python3.9 000055EE6A25DB79 Unknown Unknown Unknown
python 000055EE6A20DD5F _PyObject_MakeTpC Unknown Unknown
python 000055EE6A2A780A _PyEval_EvalFrame Unknown Unknown
python 000055EE6A269284 _PyFunction_Vecto Unknown Unknown
python3.9 000055EE6A1D1755 Unknown Unknown Unknown
python 000055EE6A269284 _PyFunction_Vecto Unknown Unknown
python3.9 000055EE6A1D172F Unknown Unknown Unknown
python 000055EE6A269284 _PyFunction_Vecto Unknown Unknown
python3.9 000055EE6A1D1755 Unknown Unknown Unknown
python 000055EE6A269284 _PyFunction_Vecto Unknown Unknown
python3.9 000055EE6A1D172F Unknown Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python 000055EE6A2693C4 _PyFunction_Vecto Unknown Unknown
python 000055EE6A253F4E _PyObject_FastCal Unknown Unknown
python3.9 000055EE6A25DB79 Unknown Unknown Unknown
python 000055EE6A20DD5F _PyObject_MakeTpC Unknown Unknown
python 000055EE6A2A8735 _PyEval_EvalFrame Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python3.9 000055EE6A269CA4 Unknown Unknown Unknown
python3.9 000055EE6A1CFAE6 Unknown Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python 000055EE6A2693C4 _PyFunction_Vecto Unknown Unknown
python3.9 000055EE6A1D058E Unknown Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python3.9 000055EE6A269CA4 Unknown Unknown Unknown
python3.9 000055EE6A1D1755 Unknown Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python 000055EE6A269354 _PyFunction_Vecto Unknown Unknown
python3.9 000055EE6A1CFAE6 Unknown Unknown Unknown
python3.9 000055EE6A268663 Unknown Unknown Unknown
python 000055EE6A31545C PyEval_EvalCodeEx Unknown Unknown
python 000055EE6A26945B PyEval_EvalCode Unknown Unknown
python3.9 000055EE6A31550B Unknown Unknown Unknown
python3.9 000055EE6A345F75 Unknown Unknown Unknown
python3.9 000055EE6A1E6987 Unknown Unknown Unknown
python 000055EE6A34BA2F PyRun_SimpleFileE Unknown Unknown
python 000055EE6A34C10B Py_RunMain Unknown Unknown
python 000055EE6A34C309 Py_BytesMain Unknown Unknown
libc-2.27.so 00007FAABEDCAC87 __libc_start_main Unknown Unknown
python3.9 000055EE6A2D30A0 Unknown Unknown Unknown
What I also noticed is that when I calculate DFT energy in the parent process everything works just fine.