summaryrefslogtreecommitdiff
path: root/pkgs/top-level/cuda-packages.nix
blob: 190fbc3a82a61d0fea7c31bfeedf3245d02e6ba4 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
{
  _cuda,
  callPackage,
  config,
  lib,
}:
let
  mkCudaPackages =
    manifestVersions:
    callPackage ../development/cuda-modules {
      manifests = _cuda.lib.selectManifests manifestVersions;
    };

  # NOTE:
  # The manifests are largely the same except for TensorRT:
  # - linux-x86_64 is generally the best supported and can use the latest release
  # - linux-sbsa (post-Orin Jetson and ARM) comes in second; NVIDIA dropped support for CUDA 12 with 10.13.2 (there is no
  #   10.13.1), so we use 10.13.0 for all CUDA 12 releases.
  # - linux-aarch64 (pre-Thor Jetson) is historically least supported; we use the latest release available.

  cudaPackages_12_6 =
    let
      inherit (cudaPackages_12_6.backendStdenv) hasJetsonCudaCapability hostPlatform;
    in
    mkCudaPackages {
      cublasmp = "0.6.0";
      cuda = "12.6.3";
      cudnn = "9.13.0";
      cudss = "0.6.0";
      cuquantum = "25.09.0";
      cusolvermp = "0.7.0";
      cusparselt = "0.6.3";
      cutensor = "2.3.1";
      nppplus = "0.10.0";
      nvcomp = "5.0.0.6";
      nvjpeg2000 = "0.9.0";
      nvpl = "25.5";
      nvtiff = "0.5.1";
      tensorrt =
        if hasJetsonCudaCapability then
          "10.7.0"
        else if hostPlatform.isAarch64 then
          "10.13.0"
        else
          "10.14.1";
    };

  cudaPackages_12_8 =
    let
      inherit (cudaPackages_12_8.backendStdenv) hasJetsonCudaCapability hostPlatform;
    in
    mkCudaPackages {
      cublasmp = "0.6.0";
      cuda = "12.8.1";
      cudnn = "9.13.0";
      cudss = "0.6.0";
      cuquantum = "25.09.0";
      cusolvermp = "0.7.0";
      cusparselt = "0.8.1";
      cutensor = "2.3.1";
      nppplus = "0.10.0";
      nvcomp = "5.0.0.6";
      nvjpeg2000 = "0.9.0";
      nvpl = "25.5";
      nvtiff = "0.5.1";
      tensorrt =
        if hasJetsonCudaCapability then
          "10.7.0"
        else if hostPlatform.isAarch64 then
          "10.13.0"
        else
          "10.14.1";
    };

  cudaPackages_12_9 =
    let
      inherit (cudaPackages_12_9.backendStdenv) hasJetsonCudaCapability hostPlatform;
    in
    mkCudaPackages {
      cublasmp = "0.6.0";
      cuda = "12.9.1";
      cudnn = "9.13.0";
      cudss = "0.6.0";
      cuquantum = "25.09.0";
      cusolvermp = "0.7.0";
      cusparselt = "0.8.1";
      cutensor = "2.3.1";
      nppplus = "0.10.0";
      nvcomp = "5.0.0.6";
      nvjpeg2000 = "0.9.0";
      nvpl = "25.5";
      nvtiff = "0.5.1";
      tensorrt =
        if hasJetsonCudaCapability then
          "10.7.0"
        else if hostPlatform.isAarch64 then
          "10.13.0"
        else
          "10.14.1";
    };

  # NOTE: Thor is supported from CUDA 13.0, so our check needs to capture whether pre-Thor devices were selected.
  hasPreThorJetsonCudaCapability = lib.any (lib.flip lib.versionOlder "10.1");

  cudaPackages_13_0 =
    let
      inherit (cudaPackages_13_0.backendStdenv) requestedJetsonCudaCapabilities;
    in
    mkCudaPackages {
      cublasmp = "0.6.0";
      cuda = "13.0.2";
      cudnn = "9.13.0";
      cudss = "0.6.0";
      cuquantum = "25.09.0";
      cusolvermp = "0.7.0";
      cusparselt = "0.8.1";
      cutensor = "2.3.1";
      nppplus = "0.10.0";
      nvcomp = "5.0.0.6";
      nvjpeg2000 = "0.9.0";
      nvpl = "25.5";
      nvtiff = "0.5.1";
      tensorrt =
        if hasPreThorJetsonCudaCapability requestedJetsonCudaCapabilities then "10.7.0" else "10.14.1";
    };
in
{
  inherit
    cudaPackages_12_6
    cudaPackages_12_8
    cudaPackages_12_9
    cudaPackages_13_0
    ;
}