From 11d9ef189fb674fce66d1097922cfddeff967651 Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Fri, 1 Apr 2022 01:56:16 +0000 Subject: [PATCH 01/13] python3Packages.pytorchWithCuda: fix build --- pkgs/top-level/python-packages.nix | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index a8fa9c95307c..ed68190015b4 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8362,6 +8362,24 @@ in { pytorch = callPackage ../development/python-modules/pytorch { cudaSupport = pkgs.config.cudaSupport or false; + + # TODO: next time pytorch is updated (to 1.11.0, currently in staging as of + # 2022-03-31), make the following changes: + + # -> cudatoolk_11 + cudatoolkit = pkgs.cudatoolkit_10; + + # -> cudnn_8_3_cudatoolkit_11 + cudnn = pkgs.cudnn_8_1_cudatoolkit_10; + + # -> cutensor_cudatoolkit_11 (cutensor is a new dependency in v1.11.0) + # cutensor = pkgs.cutensor_cudatoolkit_11; + + # -> setting a custom magma should be unnecessary with v1.11.0 + magma = pkgs.magma.override { cudatoolkit = pkgs.cudatoolkit_10; }; + + # -> nccl_cudatoolkit_11 + nccl = pkgs.nccl.override { cudatoolkit = pkgs.cudatoolkit_10; }; }; pytorch-bin = callPackage ../development/python-modules/pytorch/bin.nix { }; From e1b9a525366aedf15068adac4f7de190205499ce Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Fri, 1 Apr 2022 01:59:02 +0000 Subject: [PATCH 02/13] cudatoolkit: add note about alias upgrades --- pkgs/development/compilers/cudatoolkit/default.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/development/compilers/cudatoolkit/default.nix b/pkgs/development/compilers/cudatoolkit/default.nix index 65e9eb827605..4fa99f80c8e3 100644 --- a/pkgs/development/compilers/cudatoolkit/default.nix +++ b/pkgs/development/compilers/cudatoolkit/default.nix @@ -86,5 +86,9 @@ rec { gcc = gcc10; # can bump to 11 along with stdenv.cc }; + # Make sure to only ever update this to a version that is compatible with the + # latest cudnn, nccl, cutensor, etc! It sometimes happens that CUDA versions + # are released prior to compatibility with the rest of the ecosystem. And + # don't forget to request a review from @NixOS/cuda-maintainers! cudatoolkit_11 = cudatoolkit_11_5; } From 9d9138cf20dcc61906056d973369e50acd954551 Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Fri, 1 Apr 2022 01:59:10 +0000 Subject: [PATCH 03/13] cudnn: formatting --- .../libraries/science/math/cudnn/default.nix | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/pkgs/development/libraries/science/math/cudnn/default.nix b/pkgs/development/libraries/science/math/cudnn/default.nix index d05cc3f90ec0..cccd3d169b64 100644 --- a/pkgs/development/libraries/science/math/cudnn/default.nix +++ b/pkgs/development/libraries/science/math/cudnn/default.nix @@ -85,27 +85,24 @@ rec { # cuDNN 8.3 is necessary for the latest jaxlib, esp. jaxlib-bin. See # https://github.com/google/jax/discussions/9455 for more info. - cudnn_8_3_cudatoolkit_10_2 = - generic - rec { - version = "8.3.2"; - cudatoolkit = cudatoolkit_10_2; - # See https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-832/support-matrix/index.html#cudnn-cuda-hardware-versions. - minCudaVersion = "10.2.00000"; - maxCudaVersion = "11.5.99999"; - mkSrc = cudatoolkit: - let v = if lib.versions.majorMinor cudatoolkit.version == "10.2" then "10.2" else "11.5"; in - fetchurl { - # Starting at version 8.3.1 there's a new directory layout including - # a subdirectory `local_installers`. - url = "https://developer.download.nvidia.com/compute/redist/cudnn/v${version}/local_installers/${v}/cudnn-linux-x86_64-8.3.2.44_cuda${v}-archive.tar.xz"; - hash = { - "10.2" = "sha256-1vVu+cqM+PketzIQumw9ykm6REbBZhv6/lXB7EC2aaw="; - "11.5" = "sha256-VQCVPAjF5dHd3P2iNPnvvdzb5DpTsm3AqCxyP6FwxFc="; - }."${v}"; - }; - } - ; + cudnn_8_3_cudatoolkit_10_2 = generic rec { + version = "8.3.2"; + cudatoolkit = cudatoolkit_10_2; + # See https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-832/support-matrix/index.html#cudnn-cuda-hardware-versions. + minCudaVersion = "10.2.00000"; + maxCudaVersion = "11.5.99999"; + mkSrc = cudatoolkit: + let v = if lib.versions.majorMinor cudatoolkit.version == "10.2" then "10.2" else "11.5"; in + fetchurl { + # Starting at version 8.3.1 there's a new directory layout including + # a subdirectory `local_installers`. + url = "https://developer.download.nvidia.com/compute/redist/cudnn/v${version}/local_installers/${v}/cudnn-linux-x86_64-8.3.2.44_cuda${v}-archive.tar.xz"; + hash = { + "10.2" = "sha256-1vVu+cqM+PketzIQumw9ykm6REbBZhv6/lXB7EC2aaw="; + "11.5" = "sha256-VQCVPAjF5dHd3P2iNPnvvdzb5DpTsm3AqCxyP6FwxFc="; + }."${v}"; + }; + }; cudnn_8_3_cudatoolkit_11_0 = cudnn_8_3_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_11_0; }; cudnn_8_3_cudatoolkit_11_1 = cudnn_8_3_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_11_1; }; cudnn_8_3_cudatoolkit_11_2 = cudnn_8_3_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_11_2; }; From 3db04d2653d50b7561c6edf3f79804749d64d44f Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Fri, 1 Apr 2022 02:00:17 +0000 Subject: [PATCH 04/13] cudnn_8_1_cudatoolkit_11: remove --- pkgs/development/libraries/science/math/cudnn/default.nix | 1 - pkgs/top-level/all-packages.nix | 1 - 2 files changed, 2 deletions(-) diff --git a/pkgs/development/libraries/science/math/cudnn/default.nix b/pkgs/development/libraries/science/math/cudnn/default.nix index cccd3d169b64..a3f785c5b38f 100644 --- a/pkgs/development/libraries/science/math/cudnn/default.nix +++ b/pkgs/development/libraries/science/math/cudnn/default.nix @@ -81,7 +81,6 @@ rec { cudnn_8_1_cudatoolkit_11_2 = cudnn_8_1_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_11_2; }; cudnn_8_1_cudatoolkit_10 = cudnn_8_1_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_10; }; - cudnn_8_1_cudatoolkit_11 = cudnn_8_1_cudatoolkit_10_2.override { cudatoolkit = cudatoolkit_11; }; # cuDNN 8.3 is necessary for the latest jaxlib, esp. jaxlib-bin. See # https://github.com/google/jax/discussions/9455 for more info. diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3a88b23b73b5..ed7188e968e1 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4647,7 +4647,6 @@ with pkgs; cudnn_8_1_cudatoolkit_11_1 cudnn_8_1_cudatoolkit_11_2 cudnn_8_1_cudatoolkit_10 - cudnn_8_1_cudatoolkit_11 cudnn_8_3_cudatoolkit_10_2 cudnn_8_3_cudatoolkit_11_0 cudnn_8_3_cudatoolkit_11_1 From 089dafd1708fe2c5b89e9802d90cd5f669a92efc Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Fri, 1 Apr 2022 07:57:56 +0000 Subject: [PATCH 05/13] cutensor: fix cutensor_cudatoolkit_{10,11} --- .../science/math/cutensor/default.nix | 47 +++++++++---------- .../science/math/cutensor/generic.nix | 4 +- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/pkgs/development/libraries/science/math/cutensor/default.nix b/pkgs/development/libraries/science/math/cutensor/default.nix index 25633ca63e6b..d0d24bd1adbe 100644 --- a/pkgs/development/libraries/science/math/cutensor/default.nix +++ b/pkgs/development/libraries/science/math/cutensor/default.nix @@ -1,6 +1,14 @@ { callPackage -, cudatoolkit_10_1, cudatoolkit_10_2 -, cudatoolkit_11_0, cudatoolkit_11_1, cudatoolkit_11_2, cudatoolkit_11_3, cudatoolkit_11_4 +, cudatoolkit_10_1 +, cudatoolkit_10_2 +, cudatoolkit_11 +, cudatoolkit_11_0 +, cudatoolkit_11_1 +, cudatoolkit_11_2 +, cudatoolkit_11_3 +, cudatoolkit_11_4 +, cudatoolkit_11_5 +, cudatoolkit_11_6 }: rec { @@ -8,18 +16,18 @@ rec { version = "1.2.2.5"; libPath = "lib/10.1"; cudatoolkit = cudatoolkit_10_1; - # 1.2.2 is compatible with CUDA 11.0, 11.1, and 11.2: - # ephemeral doc at https://developer.nvidia.com/cutensor/downloads - sha256 = "1dl9bd71frhac9cb8lvnh71zfsnqxbxbfhndvva2zf6nh0my4klm"; + # 1.2.2 is compatible with CUDA 10.1, 10.2, and 11.x. + # See https://docs.nvidia.com/cuda/cutensor/release_notes.html#cutensor-v1-2-2. + hash = "sha256-lU7iK4DWuC/U3s1Ct/rq2Gr3w4F2U7RYYgpmF05bibY="; }; cutensor_cudatoolkit_10_2 = cutensor_cudatoolkit_10_1.override { version = "1.3.1.3"; libPath = "lib/10.2"; cudatoolkit = cudatoolkit_10_2; - # 1.3.1 is compatible with CUDA 11.0, 11.1, and 11.2: - # ephemeral doc at https://developer.nvidia.com/cutensor/downloads - sha256 = "sha256-mNlVnabB2IC3HnYY0mb06RLqQzDxN9ePGVeBy3hkBC8="; + # 1.3.1 is compatible with CUDA 10.2 and 11.x. + # See https://docs.nvidia.com/cuda/cutensor/release_notes.html#cutensor-v1-3-1. + hash = "sha256-mNlVnabB2IC3HnYY0mb06RLqQzDxN9ePGVeBy3hkBC8="; }; cutensor_cudatoolkit_10 = cutensor_cudatoolkit_10_2; @@ -29,21 +37,12 @@ rec { cudatoolkit = cudatoolkit_11_0; }; - cutensor_cudatoolkit_11_1 = cutensor_cudatoolkit_11_0.override { - cudatoolkit = cudatoolkit_11_1; - }; + cutensor_cudatoolkit_11_1 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_1; }; + cutensor_cudatoolkit_11_2 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_2; }; + cutensor_cudatoolkit_11_3 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_3; }; + cutensor_cudatoolkit_11_4 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_4; }; + cutensor_cudatoolkit_11_5 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_5; }; + cutensor_cudatoolkit_11_6 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11_6; }; - cutensor_cudatoolkit_11_2 = cutensor_cudatoolkit_11_0.override { - cudatoolkit = cudatoolkit_11_2; - }; - - cutensor_cudatoolkit_11_3 = cutensor_cudatoolkit_11_0.override { - cudatoolkit = cudatoolkit_11_3; - }; - - cutensor_cudatoolkit_11_4 = cutensor_cudatoolkit_11_0.override { - cudatoolkit = cudatoolkit_11_4; - }; - - cutensor_cudatoolkit_11 = cutensor_cudatoolkit_11_4; + cutensor_cudatoolkit_11 = cutensor_cudatoolkit_11_0.override { cudatoolkit = cudatoolkit_11; }; } diff --git a/pkgs/development/libraries/science/math/cutensor/generic.nix b/pkgs/development/libraries/science/math/cutensor/generic.nix index 0b2bd31b2c30..e7c5e0b298c0 100644 --- a/pkgs/development/libraries/science/math/cutensor/generic.nix +++ b/pkgs/development/libraries/science/math/cutensor/generic.nix @@ -7,7 +7,7 @@ , addOpenGLRunpath , version -, sha256 +, hash }: let @@ -21,7 +21,7 @@ stdenv.mkDerivation { src = fetchurl { url = "https://developer.download.nvidia.com/compute/cutensor/${mostOfVersion}/local_installers/libcutensor-${stdenv.hostPlatform.parsed.kernel.name}-${stdenv.hostPlatform.parsed.cpu.name}-${version}.tar.gz"; - inherit sha256; + inherit hash; }; outputs = [ "out" "dev" ]; From 147606d8e3e8422c5f9090974d451a527af1bdf7 Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Fri, 1 Apr 2022 08:00:14 +0000 Subject: [PATCH 06/13] cudnn: 7.6.5 -> 8.3.2 --- pkgs/top-level/all-packages.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ed7188e968e1..f9d6b6cc76f6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4657,8 +4657,8 @@ with pkgs; cudnn_8_3_cudatoolkit_10 cudnn_8_3_cudatoolkit_11; - # TODO(samuela): This is old and should be upgraded to 8.3 at some point. - cudnn = cudnn_7_6_cudatoolkit_10_1; + # Make sure to keep this in sync with the `cudatoolkit` version! + cudnn = cudnn_8_3_cudatoolkit_10; cutensorPackages = callPackages ../development/libraries/science/math/cutensor { }; inherit (cutensorPackages) From 03dd3f66fb1e773fa21ac7145ab9f27f0b6e09e1 Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Fri, 1 Apr 2022 08:01:09 +0000 Subject: [PATCH 07/13] nccl: expose cudatoolkit in passthru --- pkgs/development/libraries/science/math/nccl/default.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/development/libraries/science/math/nccl/default.nix b/pkgs/development/libraries/science/math/nccl/default.nix index 5036ad890799..c08b5aa5851d 100644 --- a/pkgs/development/libraries/science/math/nccl/default.nix +++ b/pkgs/development/libraries/science/math/nccl/default.nix @@ -38,6 +38,10 @@ stdenv.mkDerivation rec { enableParallelBuilding = true; + passthru = { + inherit cudatoolkit; + }; + meta = with lib; { description = "Multi-GPU and multi-node collective communication primitives for NVIDIA GPUs"; homepage = "https://developer.nvidia.com/nccl"; From 2133acc806f08f138b0eadd80e17555786e23365 Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Fri, 1 Apr 2022 08:02:07 +0000 Subject: [PATCH 08/13] python3Packages.cupy: cudatoolkit consistency --- pkgs/development/python-modules/cupy/default.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/development/python-modules/cupy/default.nix b/pkgs/development/python-modules/cupy/default.nix index 2ae38e50513a..661645a7ceb9 100644 --- a/pkgs/development/python-modules/cupy/default.nix +++ b/pkgs/development/python-modules/cupy/default.nix @@ -5,6 +5,10 @@ , addOpenGLRunpath }: +assert cudnn.cudatoolkit == cudatoolkit; +assert cutensor.cudatoolkit == cudatoolkit; +assert nccl.cudatoolkit == cudatoolkit; + buildPythonPackage rec { pname = "cupy"; version = "10.2.0"; From e51d84a97f6006f3e43ed3963202fa70a32ffbe2 Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Fri, 1 Apr 2022 08:02:18 +0000 Subject: [PATCH 09/13] python3Packages.cupy: parallel build --- pkgs/development/python-modules/cupy/default.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pkgs/development/python-modules/cupy/default.nix b/pkgs/development/python-modules/cupy/default.nix index 661645a7ceb9..a798920ef7a8 100644 --- a/pkgs/development/python-modules/cupy/default.nix +++ b/pkgs/development/python-modules/cupy/default.nix @@ -19,8 +19,15 @@ buildPythonPackage rec { sha256 = "sha256-5ovvA76QGOsOnVztMfDgLerks5nJrKR08rLc+ArmWA8="; }; + # See https://docs.cupy.dev/en/v10.2.0/reference/environment.html. Seting both + # CUPY_NUM_BUILD_JOBS and CUPY_NUM_NVCC_THREADS to NIX_BUILD_CORES results in + # a small amount of thrashing but it turns out there are a large number of + # very short builds and a few extremely long ones, so setting both ends up + # working nicely in practice. preConfigure = '' export CUDA_PATH=${cudatoolkit} + export CUPY_NUM_BUILD_JOBS="$NIX_BUILD_CORES" + export CUPY_NUM_NVCC_THREADS="$NIX_BUILD_CORES" ''; nativeBuildInputs = [ From 2a0acdbe9f36e3dbf4e4cbcf867f2c1e990f781f Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Fri, 1 Apr 2022 08:02:47 +0000 Subject: [PATCH 10/13] python3Packages.cupy: use the latest cudnn --- pkgs/top-level/python-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index ed68190015b4..6f2a347a6e01 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -1961,7 +1961,7 @@ in { cupy = callPackage ../development/python-modules/cupy { cudatoolkit = pkgs.cudatoolkit_11; - cudnn = pkgs.cudnn_8_1_cudatoolkit_11; + cudnn = pkgs.cudnn_8_3_cudatoolkit_11; nccl = pkgs.nccl_cudatoolkit_11; cutensor = pkgs.cutensor_cudatoolkit_11; }; From 1ef351f4afa35309c6c1b70ab234bbbd74a83cbb Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Sun, 3 Apr 2022 03:07:59 +0000 Subject: [PATCH 11/13] caffe: use CUDA 10.1, cuDNN 7.6 The current version of caffe, v1.0, does not build with any later versions of cuDNN and CUDA 10.1 is the latest CUDA that is supported by cuDNN 7.6. --- pkgs/top-level/all-packages.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f9d6b6cc76f6..7779533060d4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -33021,6 +33021,9 @@ with pkgs; ### SCIENCE / MATH caffe = callPackage ../applications/science/math/caffe ({ + cudaSupport = config.cudaSupport or false; + cudatoolkit = cudatoolkit_10_1; + cudnn = cudnn_7_6_cudatoolkit_10_1; opencv3 = opencv3WithoutCuda; # Used only for image loading. blas = openblas; inherit (darwin.apple_sdk.frameworks) Accelerate CoreGraphics CoreVideo; From a60ab2a1c73453828f81d52a6a3fa3d4586c6fdf Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Sun, 3 Apr 2022 03:08:24 +0000 Subject: [PATCH 12/13] caffeWithCuda: init at 1.0 --- pkgs/top-level/all-packages.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7779533060d4..59442957931a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -33029,6 +33029,8 @@ with pkgs; inherit (darwin.apple_sdk.frameworks) Accelerate CoreGraphics CoreVideo; } // (config.caffe or {})); + caffeWithCuda = caffe.override { cudaSupport = true; }; + caffe2 = callPackage ../development/libraries/science/math/caffe2 (rec { inherit (python3Packages) python future six numpy pydot; protobuf = protobuf3_1; From 8b9bbbc97994958969c8ff137b1e15d675679992 Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Sun, 3 Apr 2022 03:09:52 +0000 Subject: [PATCH 13/13] python3Packages.caffeWithCuda: init at 1.0 --- pkgs/top-level/python-packages.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 6f2a347a6e01..8acdbdd14b8d 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -1459,6 +1459,11 @@ in { inherit (self) python numpy boost; }); + caffeWithCuda = toPythonModule (pkgs.caffeWithCuda.override { + pythonSupport = true; + inherit (self) python numpy boost; + }); + cairocffi = callPackage ../development/python-modules/cairocffi { }; cairosvg = callPackage ../development/python-modules/cairosvg { };