Dear EasyBuild experts,
Firstly, thank you for your very nice work!
I'm trying to compile PySCF with the following *.eb file:
easyblock = 'CMakeMakeCp'
name = 'PySCF'
version = '2.0.0a'
versionsuffix = '-Python-%(pyver)s'
homepage = 'http://www.pyscf.org <http://www.pyscf.org/>'
description = "PySCF is an open-source collection of electronic
structure modules powered by Python."
toolchain = {'name': 'foss', 'version': '2020b'}
source_urls = ['https://github.com/pyscf/pyscf/archive/
<https://github.com/pyscf/pyscf/archive/>']
sources = ['v%(version)s.tar.gz']
checksums =
['20f4c9faf65436a97f9dfc8099d3c79b988b0a2c5374c701fbe35abc6fad4922']
builddependencies = [('CMake', '3.18.4')]
dependencies = [
('Python', '3.8.6'),
('SciPy-bundle', '2020.11'), # for numpy, scipy
('h5py', '3.1.0'),
('qcint', '4.0.6', versionsuffix),
('libxc', '5.1.3'),
('XCFun', '2.1.1'),
]
start_dir = 'pyscf/lib'
separate_build_dir = True
configopts = "-DBUILD_LIBCINT=OFF -DBUILD_LIBXC=OFF
-DBUILD_XCFUN=OFF "
prebuildopts = "export
PYSCF_INC_DIR=$EBROOTQCINT/include:$EBROOTLIBXC/lib && "
files_to_copy = ['pyscf']
sanity_check_paths = {
'files': ['pyscf/__init__.py'],
'dirs': ['pyscf/data', 'pyscf/lib'],
}
sanity_check_commands = ["python -c 'import pyscf'"]
modextrapaths = {'PYTHONPATH': '', 'PYSCF_EXT_PATH': ''}
moduleclass = 'chem'
Even if the module is created, I am having troubles by running it
in a node different from master. In particular, when I load the
module and ran the code, it goes all OK:
module load chem/PySCF/2.0.0a-foss-2020b-Python-3.8.6
python
from pyscf import gto, scf
mol = gto.M(atom='H 0 0 0; H 0 0 1')
mf = scf.RHF(mol).run()
but when I try to run it on a node different from the master, I get:
Python 3.8.6 (default, Jun 1 2021, 16:43:49)
[GCC 10.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyscf import gto, scf
>>> mol = gto.M(atom='H 0 0 0; H 0 0 1')
>>> mf = scf.RHF(mol).run()
Illegal instruction (core dumped)
As far as I read in different places, it seems to be related to
the different architectures of our master and slaves nodes.
If I execute
grep flags -m1 /proc/cpuinfo | cut -d ":" -f 2 | tr '[:upper:]'
'[:lower:]' | { read FLAGS; OPT="-march=native"; for flag in
$FLAGS; do case "$flag" in "sse4_1" | "sse4_2" | "ssse3" | "fma" |
"cx16" | "popcnt" | "avx" | "avx2") OPT+=" -m$flag";; esac; done;
MODOPT=${OPT//_/\.}; echo "$MODOPT"; }
on the slaves I get: -march=native -mssse3 -mfma -mcx16 -msse4.1
-msse4.2 -mpopcnt -mavx -mavx2
whereas on the master node we have: -march=native -mcx16
I tried to compile PySCF by adding these lines to my *.eb file:
configopts += "-DBUILD_FLAGS='-march=native -mssse3 -mfma -mcx16
-msse4.1 -msse4.2 -mpopcnt -mavx -mavx2' "
configopts += "-DCMAKE_C_FLAGS='-march=native -mssse3 -mfma -mcx16
-msse4.1 -msse4.2 -mpopcnt -mavx -mavx2' "
configopts += "-DCMAKE_CXX_FLAGS='-march=native -mssse3 -mfma
-mcx16 -msse4.1 -msse4.2 -mpopcnt -mavx -mavx2' "
configopts += "-DCMAKE_FORTRAN_FLAGS='-march=native -mssse3 -mfma
-mcx16 -msse4.1 -msse4.2 -mpopcnt -mavx -mavx2'"
but in that case the code does not run on master and neither in
slaves.
I'm sorry if it is a stupid question. I am far from being a system
admin...
Thanks a lot for your help.
Dr. Agustín Aucar
Institute for Modeling and Innovative Technologies - Argentina