From 9d42381d38fff23e9ef2c2d4de5a48efe937eb7a Mon Sep 17 00:00:00 2001 From: Brian Van Essen Date: Mon, 29 Mar 2021 19:25:56 -0700 Subject: Bugfixes in LBANN software stack identified by clingo (#22554) * Fixed a bug in the DiHydrogen package where the variant legacy was changed to distconv and wasn't fully propagated. Cleaned up the openmp variants on the blas library packages in DiHydrogen and Elemental. Extended support for Aluminum v1.0 in LBANN, Hydrogen, and DiHydrogen. Fixed a when clause in the LBANN dependencies. * Removed the upper range limit for the Aluminum library dependence * Update var/spack/repos/builtin/packages/dihydrogen/package.py Co-authored-by: Adam J. Stewart Co-authored-by: Adam J. Stewart --- .../repos/builtin/packages/dihydrogen/package.py | 52 +++++++++------------- .../repos/builtin/packages/elemental/package.py | 10 ++--- .../repos/builtin/packages/hydrogen/package.py | 1 - var/spack/repos/builtin/packages/lbann/package.py | 2 +- 4 files changed, 26 insertions(+), 39 deletions(-) diff --git a/var/spack/repos/builtin/packages/dihydrogen/package.py b/var/spack/repos/builtin/packages/dihydrogen/package.py index 94bc622e98..eef17a0258 100644 --- a/var/spack/repos/builtin/packages/dihydrogen/package.py +++ b/var/spack/repos/builtin/packages/dihydrogen/package.py @@ -55,19 +55,6 @@ class Dihydrogen(CMakePackage, CudaPackage, ROCmPackage): variant('blas', default='openblas', values=('openblas', 'mkl', 'accelerate', 'essl'), description='Enable the use of OpenBlas/MKL/Accelerate/ESSL') - # Override the default set of CUDA architectures with the relevant - # subset from lib/spack/spack/build_systems/cuda.py - cuda_arch_values = [ - '30', '32', '35', '37', - '50', '52', '53', - '60', '61', '62', - '70', '72', '75', - '80' - ] - variant('cuda_arch', - description='CUDA architecture', - values=spack.variant.auto_or_any_combination_of(*cuda_arch_values)) - conflicts('~cuda', when='+nvshmem') depends_on('mpi') @@ -75,7 +62,8 @@ class Dihydrogen(CMakePackage, CudaPackage, ROCmPackage): # Specify the correct version of Aluminum depends_on('aluminum@0.4:0.4.99', when='@0.1:0.1.99 +al') - depends_on('aluminum@0.5.0:', when='@:0.0,0.2: +al') + depends_on('aluminum@0.5.0:0.7.99', when='@0.2.0:0.2.1 +al') + depends_on('aluminum@0.5.0:', when='@:0.0,0.2.1: +al') # Add Aluminum variants depends_on('aluminum +cuda +nccl +ht +cuda_rma', when='+al +cuda') @@ -89,32 +77,30 @@ class Dihydrogen(CMakePackage, CudaPackage, ROCmPackage): for val in ROCmPackage.amdgpu_targets: depends_on('aluminum amdgpu_target=%s' % val, when='amdgpu_target=%s' % val) - depends_on('cuda', when=('+cuda' or '+legacy')) - depends_on('cudnn', when=('+cuda' or '+legacy')) + for when in ['+cuda', '+distconv']: + depends_on('cuda', when=when) + depends_on('cudnn', when=when) depends_on('cub', when='^cuda@:10.99') # Note that #1712 forces us to enumerate the different blas variants - depends_on('openblas', when='blas=openblas ~openmp_blas ~int64_blas') - depends_on('openblas +ilp64', when='blas=openblas ~openmp_blas +int64_blas') - depends_on('openblas threads=openmp', when='blas=openblas +openmp_blas ~int64_blas') - depends_on('openblas threads=openmp +lip64', when='blas=openblas +openmp_blas +int64_blas') + depends_on('openblas', when='blas=openblas') + depends_on('openblas +ilp64', when='blas=openblas +int64_blas') + depends_on('openblas threads=openmp', when='blas=openblas +openmp_blas') - depends_on('intel-mkl', when="blas=mkl ~openmp_blas ~int64_blas") - depends_on('intel-mkl +ilp64', when="blas=mkl ~openmp_blas +int64_blas") - depends_on('intel-mkl threads=openmp', when='blas=mkl +openmp_blas ~int64_blas') - depends_on('intel-mkl@2017.1 +openmp +ilp64', when='blas=mkl +openmp_blas +int64_blas') + depends_on('intel-mkl', when="blas=mkl") + depends_on('intel-mkl +ilp64', when="blas=mkl +int64_blas") + depends_on('intel-mkl threads=openmp', when='blas=mkl +openmp_blas') depends_on('veclibfort', when='blas=accelerate') conflicts('blas=accelerate +openmp_blas') - depends_on('essl -cuda', when='blas=essl -openmp_blas ~int64_blas') - depends_on('essl -cuda +ilp64', when='blas=essl -openmp_blas +int64_blas') - depends_on('essl threads=openmp', when='blas=essl +openmp_blas ~int64_blas') - depends_on('essl threads=openmp +ilp64', when='blas=essl +openmp_blas +int64_blas') + depends_on('essl', when='blas=essl') + depends_on('essl +ilp64', when='blas=essl +int64_blas') + depends_on('essl threads=openmp', when='blas=essl +openmp_blas') depends_on('netlib-lapack +external-blas', when='blas=essl') - # Legacy builds require cuda - conflicts('~cuda', when='+legacy') + # Distconv builds require cuda + conflicts('~cuda', when='+distconv') conflicts('+distconv', when='+half') conflicts('+rocm', when='+half') @@ -132,6 +118,8 @@ class Dihydrogen(CMakePackage, CudaPackage, ROCmPackage): depends_on('nvshmem', when='+nvshmem') + # Idenfity versions of cuda_arch that are too old + # from lib/spack/spack/build_systems/cuda.py illegal_cuda_arch_values = [ '10', '11', '12', '13', '20', '21', @@ -179,12 +167,12 @@ class Dihydrogen(CMakePackage, CudaPackage, ROCmPackage): ' '.join(self.cuda_flags(cuda_arch)) )) - if '+cuda' in spec or '+legacy' in spec: + if '+cuda' in spec or '+distconv' in spec: args.append('-DcuDNN_DIR={0}'.format( spec['cudnn'].prefix)) if spec.satisfies('^cuda@:10.99'): - if '+cuda' in spec or '+legacy' in spec: + if '+cuda' in spec or '+distconv' in spec: args.append('-DCUB_DIR={0}'.format( spec['cub'].prefix)) diff --git a/var/spack/repos/builtin/packages/elemental/package.py b/var/spack/repos/builtin/packages/elemental/package.py index 4431dab782..5dea8f1421 100644 --- a/var/spack/repos/builtin/packages/elemental/package.py +++ b/var/spack/repos/builtin/packages/elemental/package.py @@ -61,14 +61,14 @@ class Elemental(CMakePackage): # Allow Elemental to build internally when using 8-byte ints depends_on('openblas threads=openmp', when='blas=openblas +openmp_blas ~int64_blas') - depends_on('intel-mkl', when="blas=mkl ~openmp_blas ~int64_blas") - depends_on('intel-mkl threads=openmp', when='blas=mkl +openmp_blas ~int64_blas') - depends_on('intel-mkl@2017.1 +openmp +ilp64', when='blas=mkl +openmp_blas +int64_blas') + depends_on('intel-mkl', when="blas=mkl") + depends_on('intel-mkl threads=openmp', when='blas=mkl +openmp_blas') + depends_on('intel-mkl@2017.1 +ilp64', when='blas=mkl +int64_blas') depends_on('veclibfort', when='blas=accelerate') - depends_on('essl ~cuda', when='blas=essl ~openmp_blas ~int64_blas') - depends_on('essl threads=openmp', when='blas=essl +openmp_blas ~int64_blas') + depends_on('essl', when='blas=essl') + depends_on('essl threads=openmp', when='blas=essl +openmp_blas') # Note that this forces us to use OpenBLAS until #1712 is fixed depends_on('lapack', when='blas=openblas ~openmp_blas') diff --git a/var/spack/repos/builtin/packages/hydrogen/package.py b/var/spack/repos/builtin/packages/hydrogen/package.py index 339f1370be..00b30c4d6b 100644 --- a/var/spack/repos/builtin/packages/hydrogen/package.py +++ b/var/spack/repos/builtin/packages/hydrogen/package.py @@ -85,7 +85,6 @@ class Hydrogen(CMakePackage, CudaPackage, ROCmPackage): conflicts('blas=accelerate +openmp_blas') depends_on('essl', when='blas=essl') - depends_on('essl -cuda', when='blas=essl -openmp_blas') depends_on('essl +ilp64', when='blas=essl +int64_blas') depends_on('essl threads=openmp', when='blas=essl +openmp_blas') depends_on('netlib-lapack +external-blas', when='blas=essl') diff --git a/var/spack/repos/builtin/packages/lbann/package.py b/var/spack/repos/builtin/packages/lbann/package.py index 1023cc91b8..cca38f266e 100644 --- a/var/spack/repos/builtin/packages/lbann/package.py +++ b/var/spack/repos/builtin/packages/lbann/package.py @@ -182,7 +182,7 @@ class Lbann(CMakePackage, CudaPackage, ROCmPackage): depends_on('python@3: +shared', type=('build', 'run'), when='@:0.90,0.99: +pfe') extends("python", when='+pfe') depends_on('py-setuptools', type='build', when='+pfe') - depends_on('py-argparse', type='run', when='@:0.90,0.99: ^python@:2.6 +pfe') + depends_on('py-argparse', type='run', when='@:0.90,0.99: +pfe ^python@:2.6') depends_on('py-configparser', type='run', when='@:0.90,0.99: +pfe +extras') depends_on('py-graphviz@0.10.1:', type='run', when='@:0.90,0.99: +pfe +extras') depends_on('py-matplotlib@3.0.0:', type='run', when='@:0.90,0.99: +pfe +extras') -- cgit v1.2.3-70-g09d2