Hi,
In a similar situation we ended up just building the software on the
"older" cpu (i.e. the "slave" in your case)
G.
George Tsouloupas, PhD
HPC Facility Technical Director
The Cyprus Institute
tel: +357 22208688
On 6/2/21 4:22 PM, Agustín Aucar wrote:
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