From 9b98da3e66fb17362e5a626283ac48ef292aff8e Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Thu, 24 Mar 2022 13:15:07 +0100 Subject: [PATCH 1/5] Back to CUDNN 8.3.2. --- C/CUDNN/build_10.2.jl | 12 ++++-------- C/CUDNN/build_11.jl | 16 ++++++++-------- C/CUDNN/build_tarballs.jl | 34 ++++++++-------------------------- 3 files changed, 20 insertions(+), 42 deletions(-) diff --git a/C/CUDNN/build_10.2.jl b/C/CUDNN/build_10.2.jl index 9be249b3cea..3ff8093c32b 100644 --- a/C/CUDNN/build_10.2.jl +++ b/C/CUDNN/build_10.2.jl @@ -1,12 +1,8 @@ platforms_and_sources = Dict( Platform("x86_64", "linux") => [ - ArchiveSource("https://developer.nvidia.com/compute/machine-learning/cudnn/secure/8.2.4/10.2_20210831/cudnn-10.2-linux-x64-v8.2.4.15.tgz", - "d23c94a3115a1c77116a6c127d9175fbf59f723364374f26a34699075f3222f1")], + ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/10.2/cudnn-linux-x86_64-8.3.2.44_cuda10.2-archive.tar.xz", + "d6f56ef9ca8cf8f91eb73210ba6c3dca49ba4446c1661bfafe55c1ec40b669ac")], Platform("x86_64", "windows") => [ - ArchiveSource("https://developer.nvidia.com/compute/machine-learning/cudnn/secure/8.2.4/10.2_20210831/cudnn-10.2-windows10-x64-v8.2.4.15.zip", - "a13eb10cfd7e6b7b8f39d8593038855b911012c29f03990878622bdae873c4a8")], - Platform("aarch64", "linux") => [ - FileSource("https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/arm64/libcudnn8_8.2.4.15-1+cuda10.2_arm64.deb", "3f08dbe14c3becb9fa1ed85cd4a080efb30edb0c4beb2fc1a2e14da3f2eefb79"), - FileSource("https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/arm64/libcudnn8-dev_8.2.4.15-1+cuda10.2_arm64.deb", "4816575e8a14baf3fc1619cb01c6dc2afd4f1b39210079d271208088ecc48702") - ] + ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/10.2/cudnn-windows-x86_64-8.3.2.44_cuda10.2-archive.zip", + "3810b7a4313614aedd28260785f0ebaa69204bb38fa61e439f75c75a4ba07b3d")], ) diff --git a/C/CUDNN/build_11.jl b/C/CUDNN/build_11.jl index e35218bb47b..b2310b44151 100644 --- a/C/CUDNN/build_11.jl +++ b/C/CUDNN/build_11.jl @@ -1,14 +1,14 @@ platforms_and_sources = Dict( Platform("x86_64", "linux") => [ - ArchiveSource("https://developer.nvidia.com/compute/machine-learning/cudnn/secure/8.2.4/11.4_20210831/cudnn-11.4-linux-x64-v8.2.4.15.tgz", - "0e5d2df890b9967efa6619da421310d97323565a79f05a1a8cb9b7165baad0d7")], + ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-linux-x86_64-8.3.2.44_cuda11.5-archive.tar.xz", + "5500953c08c5e5d1dddcfda234f9efbddcdbe43a53b26dc0a82c723fa170c457")], Platform("powerpc64le", "linux") => [ - ArchiveSource("https://developer.nvidia.com/compute/machine-learning/cudnn/secure/8.2.4/11.4_20210831/cudnn-11.4-linux-ppc64le-v8.2.4.15.tgz", - "af8749ca83fd6bba117c8bee31b787b7f204946e864294030ee0091eb7d3577e")], + ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-linux-ppc64le-8.3.2.44_cuda11.5-archive.tar.xz", + "0581bce48023a3ee71c3a819aaefcabe693eca18b61e2521dc5f8e6e71567b1b")], Platform("aarch64", "linux") => [ - ArchiveSource("https://developer.nvidia.com/compute/machine-learning/cudnn/secure/8.2.4/11.4_20210831/cudnn-11.4-linux-aarch64sbsa-v8.2.4.15.tgz", - "48b11f19e9cd3414ec3c6c357ad228aebbd43282aae372d42cab2af67c32a08b")], + ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-linux-sbsa-8.3.2.44_cuda11.5-archive.tar.xz", + "7eb8c96bfeec98e8aa7cea1e95633d2a9481fc99040eb0311d31bf137a7aa6ea")], Platform("x86_64", "windows") => [ - ArchiveSource("https://developer.nvidia.com/compute/machine-learning/cudnn/secure/8.2.4/11.4_20210831/cudnn-11.4-windows-x64-v8.2.4.15.zip", - "f01594639de35c380b4e360673ccaf04cdb238578e4b284935ee3d5a45f51f3c")], + ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-windows-x86_64-8.3.2.44_cuda11.5-archive.zip", + "9e36eef803f1cf9ab24846dc133a3014fdc548775ee29073e8466d415957a1c0")], ) diff --git a/C/CUDNN/build_tarballs.jl b/C/CUDNN/build_tarballs.jl index da91b18e628..ca5777f7ed9 100644 --- a/C/CUDNN/build_tarballs.jl +++ b/C/CUDNN/build_tarballs.jl @@ -1,44 +1,26 @@ using BinaryBuilder, Pkg -using Base.BinaryPlatforms: arch, os -include("../../fancy_toys.jl") +const YGGDRASIL_DIR = "../.." +include(joinpath(YGGDRASIL_DIR, "fancy_toys.jl")) +include(joinpath(YGGDRASIL_DIR, "platforms", "cuda.jl")) name = "CUDNN" -version = v"8.2.4" +version = v"8.3.2" script = raw""" mkdir -p ${libdir} ${prefix}/include -cd ${WORKSPACE}/srcdir -if [[ ${target} == powerpc64le-linux-gnu ]]; then - cd cuda/targets/ppc64le-linux - find . +cd ${WORKSPACE}/srcdir/cudnn* - install_license NVIDIA_SLA_cuDNN_Support.txt +install_license LICENSE +if [[ ${target} == powerpc64le-linux-gnu ]]; then mv lib/libcudnn*.so* ${libdir} mv include/* ${prefix}/include -elif [[ ${target} == aarch64-linux-gnu && ${bb_full_target} == aarch64-linux-gnu-*-cuda+10.2 ]]; then - apk add dpkg - dpkg-deb -x libcudnn8_*.deb . - dpkg-deb -x libcudnn8-dev_*.deb . - mv -nv ./usr/include/aarch64-linux-gnu/* ${includedir} - mv -nv ./usr/lib/aarch64-linux-gnu/libcudnn*.so* ${libdir} - install_license ./usr/src/cudnn_samples_v8/NVIDIA_SLA_cuDNN_Support.txt elif [[ ${target} == *-linux-gnu ]]; then - cd cuda - find . - - install_license NVIDIA_SLA_cuDNN_Support.txt - - mv lib64/libcudnn*.so* ${libdir} + mv lib/libcudnn*.so* ${libdir} mv include/* ${prefix}/include elif [[ ${target} == x86_64-w64-mingw32 ]]; then - cd cuda - find . - - install_license NVIDIA_SLA_cuDNN_Support.txt - mv bin/cudnn*64_*.dll ${libdir} mv include/* ${prefix}/include From 035bb8e37ec166f18fbb03f446ef255449d233f7 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Thu, 24 Mar 2022 13:15:54 +0100 Subject: [PATCH 2/5] Make CUDNN_jll use platform tags, depend on CUDA_Runtime_jll. --- C/CUDNN/build_11.0.jl | 1 - C/CUDNN/build_11.1.jl | 1 - C/CUDNN/build_11.2.jl | 1 - C/CUDNN/build_11.3.jl | 1 - C/CUDNN/build_11.4.jl | 1 - C/CUDNN/build_11.5.jl | 15 +++++++++++- C/CUDNN/build_11.6.jl | 1 - C/CUDNN/build_11.jl | 14 ----------- C/CUDNN/build_tarballs.jl | 50 +++++++++++++++++++++++++++++++-------- 9 files changed, 54 insertions(+), 31 deletions(-) delete mode 120000 C/CUDNN/build_11.0.jl delete mode 120000 C/CUDNN/build_11.1.jl delete mode 120000 C/CUDNN/build_11.2.jl delete mode 120000 C/CUDNN/build_11.3.jl delete mode 120000 C/CUDNN/build_11.4.jl mode change 120000 => 100644 C/CUDNN/build_11.5.jl delete mode 120000 C/CUDNN/build_11.6.jl delete mode 100644 C/CUDNN/build_11.jl diff --git a/C/CUDNN/build_11.0.jl b/C/CUDNN/build_11.0.jl deleted file mode 120000 index 98bc2197004..00000000000 --- a/C/CUDNN/build_11.0.jl +++ /dev/null @@ -1 +0,0 @@ -build_11.jl \ No newline at end of file diff --git a/C/CUDNN/build_11.1.jl b/C/CUDNN/build_11.1.jl deleted file mode 120000 index 98bc2197004..00000000000 --- a/C/CUDNN/build_11.1.jl +++ /dev/null @@ -1 +0,0 @@ -build_11.jl \ No newline at end of file diff --git a/C/CUDNN/build_11.2.jl b/C/CUDNN/build_11.2.jl deleted file mode 120000 index 98bc2197004..00000000000 --- a/C/CUDNN/build_11.2.jl +++ /dev/null @@ -1 +0,0 @@ -build_11.jl \ No newline at end of file diff --git a/C/CUDNN/build_11.3.jl b/C/CUDNN/build_11.3.jl deleted file mode 120000 index 98bc2197004..00000000000 --- a/C/CUDNN/build_11.3.jl +++ /dev/null @@ -1 +0,0 @@ -build_11.jl \ No newline at end of file diff --git a/C/CUDNN/build_11.4.jl b/C/CUDNN/build_11.4.jl deleted file mode 120000 index 98bc2197004..00000000000 --- a/C/CUDNN/build_11.4.jl +++ /dev/null @@ -1 +0,0 @@ -build_11.jl \ No newline at end of file diff --git a/C/CUDNN/build_11.5.jl b/C/CUDNN/build_11.5.jl deleted file mode 120000 index 98bc2197004..00000000000 --- a/C/CUDNN/build_11.5.jl +++ /dev/null @@ -1 +0,0 @@ -build_11.jl \ No newline at end of file diff --git a/C/CUDNN/build_11.5.jl b/C/CUDNN/build_11.5.jl new file mode 100644 index 00000000000..b2310b44151 --- /dev/null +++ b/C/CUDNN/build_11.5.jl @@ -0,0 +1,14 @@ +platforms_and_sources = Dict( + Platform("x86_64", "linux") => [ + ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-linux-x86_64-8.3.2.44_cuda11.5-archive.tar.xz", + "5500953c08c5e5d1dddcfda234f9efbddcdbe43a53b26dc0a82c723fa170c457")], + Platform("powerpc64le", "linux") => [ + ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-linux-ppc64le-8.3.2.44_cuda11.5-archive.tar.xz", + "0581bce48023a3ee71c3a819aaefcabe693eca18b61e2521dc5f8e6e71567b1b")], + Platform("aarch64", "linux") => [ + ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-linux-sbsa-8.3.2.44_cuda11.5-archive.tar.xz", + "7eb8c96bfeec98e8aa7cea1e95633d2a9481fc99040eb0311d31bf137a7aa6ea")], + Platform("x86_64", "windows") => [ + ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-windows-x86_64-8.3.2.44_cuda11.5-archive.zip", + "9e36eef803f1cf9ab24846dc133a3014fdc548775ee29073e8466d415957a1c0")], +) diff --git a/C/CUDNN/build_11.6.jl b/C/CUDNN/build_11.6.jl deleted file mode 120000 index 98bc2197004..00000000000 --- a/C/CUDNN/build_11.6.jl +++ /dev/null @@ -1 +0,0 @@ -build_11.jl \ No newline at end of file diff --git a/C/CUDNN/build_11.jl b/C/CUDNN/build_11.jl deleted file mode 100644 index b2310b44151..00000000000 --- a/C/CUDNN/build_11.jl +++ /dev/null @@ -1,14 +0,0 @@ -platforms_and_sources = Dict( - Platform("x86_64", "linux") => [ - ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-linux-x86_64-8.3.2.44_cuda11.5-archive.tar.xz", - "5500953c08c5e5d1dddcfda234f9efbddcdbe43a53b26dc0a82c723fa170c457")], - Platform("powerpc64le", "linux") => [ - ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-linux-ppc64le-8.3.2.44_cuda11.5-archive.tar.xz", - "0581bce48023a3ee71c3a819aaefcabe693eca18b61e2521dc5f8e6e71567b1b")], - Platform("aarch64", "linux") => [ - ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-linux-sbsa-8.3.2.44_cuda11.5-archive.tar.xz", - "7eb8c96bfeec98e8aa7cea1e95633d2a9481fc99040eb0311d31bf137a7aa6ea")], - Platform("x86_64", "windows") => [ - ArchiveSource("https://developer.nvidia.com/compute/cudnn/secure/8.3.2/local_installers/11.5/cudnn-windows-x86_64-8.3.2.44_cuda11.5-archive.zip", - "9e36eef803f1cf9ab24846dc133a3014fdc548775ee29073e8466d415957a1c0")], -) diff --git a/C/CUDNN/build_tarballs.jl b/C/CUDNN/build_tarballs.jl index ca5777f7ed9..44c957c4441 100644 --- a/C/CUDNN/build_tarballs.jl +++ b/C/CUDNN/build_tarballs.jl @@ -31,29 +31,59 @@ elif [[ ${target} == x86_64-w64-mingw32 ]]; then fi """ -products = [ - LibraryProduct(["libcudnn", "cudnn64_$(version.major)"], :libcudnn, dont_dlopen = true), -] +augment_platform_block = """ + using Base.BinaryPlatforms -# XXX: CUDA_loader_jll's CUDA tag should match the library's CUDA version compatibility. -# lacking that, we can't currently dlopen the library + using CUDA_Runtime_jll + $(CUDA.augment) -dependencies = [Dependency(PackageSpec(name="CUDA_loader_jll"))] + function augment_platform!(platform::Platform) + augment_cuda_dependent!(platform) + end""" -cuda_versions = [v"10.2", v"11.0", v"11.1", v"11.2", v"11.3", v"11.4"] +products = [ + LibraryProduct(["libcudnn", "cudnn64_$(version.major)"], :libcudnn), +] + +# determine exactly which tarballs we should build +builds = [] +cuda_versions = [v"10.2", v"11.5"] for cuda_version in cuda_versions cuda_tag = "$(cuda_version.major).$(cuda_version.minor)" include("build_$(cuda_tag).jl") for (platform, sources) in platforms_and_sources - augmented_platform = Platform(arch(platform), os(platform); cuda=cuda_tag) + augmented_platform = deepcopy(platform) + augmented_platform[CUDA.platform_name] = CUDA.platform(cuda_version) should_build_platform(triplet(augmented_platform)) || continue + if platform == Platform("x86_64", "windows") push!(sources, ArchiveSource("http://www.winimage.com/zLibDll/zlib123dllx64.zip", "fd324c6923aa4f45a60413665e0b68bb34a7779d0861849e02d2711ff8efb9a4")) end - build_tarballs(ARGS, name, version, sources, script, [augmented_platform], - products, dependencies; lazy_artifacts=true) + + dependencies = [Dependency(PackageSpec(name="CUDA_Runtime_jll"); + platforms=[augmented_platform])] + + push!(builds, (; + sources, dependencies, platforms=[augmented_platform], + )) end end + +# don't allow `build_tarballs` to override platform selection based on ARGS. +# we handle that ourselves by calling `should_build_platform` +non_platform_ARGS = filter(arg -> startswith(arg, "--"), ARGS) + +# `--register` should only be passed to the latest `build_tarballs` invocation +non_reg_ARGS = filter(arg -> arg != "--register", non_platform_ARGS) + +for (i,build) in enumerate(builds) + build_tarballs(i == lastindex(builds) ? non_platform_ARGS : non_reg_ARGS, + name, version, build.sources, script, + build.platforms, products, build.dependencies; + julia_compat="1.6", lazy_artifacts=true, + augment_platform_block) +end + From 3f2a5552f7e77ea7e806769c4081e808fbab4cd2 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Thu, 24 Mar 2022 13:16:05 +0100 Subject: [PATCH 3/5] Fixes for CUDA platform augmentation. --- platforms/cuda.jl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/platforms/cuda.jl b/platforms/cuda.jl index 061d3bf924a..a5be546baba 100644 --- a/platforms/cuda.jl +++ b/platforms/cuda.jl @@ -4,6 +4,7 @@ const platform_name = "cuda" const augment = """ using Libdl using Base: thisminor + using Base.BinaryPlatforms: set_compare_strategy! # @@ -126,9 +127,11 @@ const augment = """ end function augment_cuda_dependent!(platform::Platform) + if !haskey(platform, "cuda") + platform = CUDA_Runtime_jll.augment_cuda_toolkit!(platform) + end set_compare_strategy!(platform, "cuda", cuda_comparison_strategy) - haskey(platform, "cuda") && return platform - CUDA_Runtime_jll.augment_cuda_toolkit!(platform) + return platform end""" function platform(cuda::VersionNumber) From dc5fc6ca2c6e936a018b3cda4ba1c586a8ada26c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= Date: Thu, 24 Mar 2022 12:28:53 +0000 Subject: [PATCH 4/5] Update C/CUDNN/build_tarballs.jl --- C/CUDNN/build_tarballs.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C/CUDNN/build_tarballs.jl b/C/CUDNN/build_tarballs.jl index 44c957c4441..af88e1670b0 100644 --- a/C/CUDNN/build_tarballs.jl +++ b/C/CUDNN/build_tarballs.jl @@ -63,7 +63,7 @@ for cuda_version in cuda_versions "fd324c6923aa4f45a60413665e0b68bb34a7779d0861849e02d2711ff8efb9a4")) end - dependencies = [Dependency(PackageSpec(name="CUDA_Runtime_jll"); + dependencies = [Dependency(PackageSpec(name="CUDA_Runtime_jll", uuid="76a88914-d11a-5bdc-97e0-2f5a05c973a2"); platforms=[augmented_platform])] push!(builds, (; From 7279cef87824b0eca991a92d74b31fd7b68dd052 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Thu, 24 Mar 2022 13:46:26 +0100 Subject: [PATCH 5/5] Fixes. --- platforms/cuda.jl | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/platforms/cuda.jl b/platforms/cuda.jl index a5be546baba..3cadc6bd7c2 100644 --- a/platforms/cuda.jl +++ b/platforms/cuda.jl @@ -54,6 +54,7 @@ const augment = """ cuda_version_override = get(ENV, "JULIA_CUDA_VERSION", nothing) # TODO: support for Preferences.jl-based override? + # XXX: this doesn't work, because it doesn't trigger re-compilation # "[...] applications built against any of the older CUDA Toolkits always continued # to function on newer drivers due to binary backward compatibility" @@ -100,7 +101,13 @@ const augment = """ # imported by caller: CUDA_Runtime_jll - function cuda_comparison_strategy(a::String, b::String, a_requested::Bool, b_requested::Bool) + function cuda_comparison_strategy(a::String, b::String, + a_requested::Bool, b_requested::Bool) + if a == "none" || b == "none" + # FIXME: does this need to respec assymetry? + # can it happen we request cuda=none on a platform with CUDA? + return false + end a = VersionNumber(a) b = VersionNumber(b)