Updates to the LBANN software stack (#21733)

Set the minimun C++ standard for LBANN, Hydrogen, and DiHydrogen to
C++17.  The minumim C++ standard for Aluminum is C++14.  Add new
versions for Aluminum, Hydrogen, and DiHydrogen.  Added support for
high performance linkers in LBANN recipe (gold and lld).  Added
variants to LBANN for enabling embedded Python support independently
from the Python front end.
This commit is contained in:
Brian Van Essen 2021-02-19 00:32:17 -08:00 committed by GitHub
parent e772291df1
commit 23e22ae623
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 5 deletions

View File

@ -22,6 +22,7 @@ class Aluminum(CMakePackage, CudaPackage):
maintainers = ['bvanessen']
version('master', branch='master')
version('0.7.0', sha256='bbb73d2847c56efbe6f99e46b41d837763938483f2e2d1982ccf8350d1148caa')
version('0.6.0', sha256='6ca329951f4c7ea52670e46e5020e7e7879d9b56fed5ff8c5df6e624b313e925')
version('0.5.0', sha256='dc365a5849eaba925355a8efb27005c5f22bcd1dca94aaed8d0d29c265c064c1')
version('0.4.0', sha256='4d6fab5481cc7c994b32fb23a37e9ee44041a9f91acf78f981a97cb8ef57bb7d')
@ -51,10 +52,14 @@ class Aluminum(CMakePackage, CudaPackage):
def cmake_args(self):
spec = self.spec
args = [
'-DCMAKE_CXX_STANDARD=14',
'-DALUMINUM_ENABLE_CUDA:BOOL=%s' % ('+cuda' in spec),
'-DALUMINUM_ENABLE_NCCL:BOOL=%s' % ('+nccl' in spec)]
if '@0.5:':
if '+cuda' in spec:
args.append('-DCMAKE_CUDA_STANDARD=14')
if spec.satisfies('@0.5:'):
args.extend([
'-DALUMINUM_ENABLE_HOST_TRANSFER:BOOL=%s' % ('+ht' in spec),
'-DALUMINUM_ENABLE_MPI_CUDA:BOOL=%s' %

View File

@ -142,6 +142,7 @@ def cmake_args(self):
spec = self.spec
args = [
'-DCMAKE_CXX_STANDARD=17',
'-DCMAKE_INSTALL_MESSAGE:STRING=LAZY',
'-DBUILD_SHARED_LIBS:BOOL=%s' % ('+shared' in spec),
'-DH2_ENABLE_CUDA=%s' % ('+cuda' in spec),
@ -153,6 +154,11 @@ def cmake_args(self):
]
if '+cuda' in spec:
if spec.satisfies('^cuda@11.0:'):
args.append('-DCMAKE_CUDA_STANDARD=17')
else:
args.append('-DCMAKE_CUDA_STANDARD=14')
cuda_arch = spec.variants['cuda_arch'].value
if len(cuda_arch) == 1 and cuda_arch[0] == 'auto':
args.append('-DCMAKE_CUDA_FLAGS=-arch=sm_60')

View File

@ -18,6 +18,7 @@ class Hydrogen(CMakePackage, CudaPackage):
maintainers = ['bvanessen']
version('develop', branch='hydrogen')
version('1.5.1', sha256='447da564278f98366906d561d9c8bc4d31678c56d761679c2ff3e59ee7a2895c')
version('1.5.0', sha256='03dd487fb23b9fdbc715554a8ea48c3196a1021502e61b0172ef3fdfbee75180')
version('1.4.0', sha256='c13374ff4a6c4d1076e47ba8c8d91a7082588b9958d1ed89cffb12f1d2e1452e')
version('1.3.4', sha256='7979f6656f698f0bbad6798b39d4b569835b3013ff548d98089fce7c283c6741')
@ -90,7 +91,8 @@ class Hydrogen(CMakePackage, CudaPackage):
# Specify the correct version of Aluminum
depends_on('aluminum@:0.3.99', when='@:1.3.99 +al')
depends_on('aluminum@0.4:0.4.99', when='@1.4:1.4.99 +al')
depends_on('aluminum@0.5:', when='@:1.0,1.5.0: +al')
depends_on('aluminum@0.5:', when='@1.5.0:1.5.1 +al')
depends_on('aluminum@0.7:', when='@:1.0,1.5.2: +al')
# Add Aluminum variants
depends_on('aluminum +cuda +nccl +ht +cuda_rma', when='+al +cuda')
@ -131,6 +133,7 @@ def cmake_args(self):
enable_gpu_fp16 = ('+cuda' in spec and '+half' in spec)
args = [
'-DCMAKE_CXX_STANDARD=14',
'-DCMAKE_INSTALL_MESSAGE:STRING=LAZY',
'-DBUILD_SHARED_LIBS:BOOL=%s' % ('+shared' in spec),
'-DHydrogen_ENABLE_OPENMP:BOOL=%s' % ('+openmp' in spec),
@ -147,6 +150,9 @@ def cmake_args(self):
'-DHydrogen_ENABLE_GPU_FP16=%s' % enable_gpu_fp16,
]
if '+cuda' in spec:
args.append('-DCMAKE_CUDA_STANDARD=14')
# Add support for OS X to find OpenMP (LLVM installed via brew)
if self.spec.satisfies('%clang +openmp platform=darwin'):
clang = self.compiler.cc

View File

@ -64,6 +64,8 @@ class Lbann(CMakePackage, CudaPackage):
variant('vtune', default=False, description='Builds with support for Intel VTune')
variant('onednn', default=False, description='Support for OneDNN')
variant('nvshmem', default=False, description='Support for NVSHMEM')
variant('python_dr', default=False, description='Support for generic Python Data Reader')
variant('pfe', default=True, description='Python Frontend for generating and launching models')
# Variant Conflicts
conflicts('@:0.90,0.99:', when='~conduit')
@ -186,7 +188,7 @@ def common_config_args(self):
spec = self.spec
# Environment variables
cppflags = []
cppflags.append('-DLBANN_SET_EL_RNG -ldl')
cppflags.append('-DLBANN_SET_EL_RNG')
args = []
args.extend([
'-DCMAKE_CXX_FLAGS=%s' % ' '.join(cppflags),
@ -197,6 +199,15 @@ def common_config_args(self):
args.append(
'-DCNPY_DIR={0}'.format(spec['cnpy'].prefix),
)
# Use a high performance linker
if self.spec.satisfies('%clang'):
args.extend([
'-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld',
'-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld'])
elif self.spec.satisfies('%gcc'):
args.extend([
'-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=gold',
'-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=gold'])
return args
@ -213,13 +224,13 @@ def setup_build_environment(self, env):
# Get any recent versions or non-numeric version
# Note that develop > numeric and non-develop < numeric
@when('@:0.90,0.94:')
def cmake_args(self):
spec = self.spec
args = self.common_config_args
args.extend([
'-DCMAKE_CXX_STANDARD=14',
'-DCMAKE_CUDA_STANDARD=14',
'-DCMAKE_CXX_STANDARD=17',
'-DLBANN_WITH_CNPY=%s' % ('+numpy' in spec),
'-DLBANN_DETERMINISTIC:BOOL=%s' % ('+deterministic' in spec),
'-DLBANN_WITH_HWLOC=%s' % ('+hwloc' in spec),
@ -230,6 +241,8 @@ def cmake_args(self):
'-DLBANN_WITH_NVSHMEM:BOOL=%s' % ('+nvshmem' in spec),
'-DLBANN_WITH_FFT:BOOL=%s' % ('+fft' in spec),
'-DLBANN_WITH_ONEDNN:BOOL=%s' % ('+onednn' in spec),
'-DLBANN_WITH_EMBEDDED_PYTHON:BOOL=%s' % ('+python_dr' in spec),
'-DLBANN_WITH_PYTHON:BOOL=%s' % ('+pfe' in spec),
'-DLBANN_WITH_TBINF=OFF',
'-DLBANN_WITH_UNIT_TESTING:BOOL=%s' % (self.run_tests),
'-DLBANN_WITH_VISION:BOOL=%s' % ('+vision' in spec),
@ -240,6 +253,12 @@ def cmake_args(self):
'-DProtobuf_DIR={0}'.format(spec['protobuf'].prefix),
'-Dprotobuf_MODULE_COMPATIBLE=ON'])
if '+cuda' in spec:
if spec.satisfies('^cuda@11.0:'):
args.append('-DCMAKE_CUDA_STANDARD=17')
else:
args.append('-DCMAKE_CUDA_STANDARD=14')
if spec.satisfies('@:0.90') or spec.satisfies('@0.95:'):
args.append(
'-DHydrogen_DIR={0}/CMake/hydrogen'.format(