Merge pull request #272063 from SomeoneSerge/fix/cuda-upkeep
cudaPackages: drop some runfile dependencies and fix a few builds
This commit is contained in:
@@ -52,7 +52,10 @@ stdenv.mkDerivation (finalAttrs: rec {
|
||||
nativeBuildInputs =
|
||||
[ cmake makeWrapper python310Packages.wrapPython llvmPackages.llvm.dev
|
||||
]
|
||||
++ lib.optionals cudaSupport [ addOpenGLRunpath ]
|
||||
++ lib.optionals cudaSupport [
|
||||
addOpenGLRunpath
|
||||
cudaPackages.cuda_nvcc
|
||||
]
|
||||
++ lib.optionals waylandSupport [ pkg-config ];
|
||||
buildInputs =
|
||||
[ boost ffmpeg gettext glew ilmbase
|
||||
@@ -87,7 +90,7 @@ stdenv.mkDerivation (finalAttrs: rec {
|
||||
llvmPackages.openmp SDL Cocoa CoreGraphics ForceFeedback OpenAL OpenGL
|
||||
])
|
||||
++ lib.optional jackaudioSupport libjack2
|
||||
++ lib.optional cudaSupport cudaPackages.cudatoolkit
|
||||
++ lib.optionals cudaSupport [ cudaPackages.cuda_cudart ]
|
||||
++ lib.optional colladaSupport opencollada
|
||||
++ lib.optional spaceNavSupport libspnav;
|
||||
pythonPath = with python310Packages; [ numpy requests zstandard ];
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
{ lib, stdenv, fetchurl, cmake, hwloc, fftw, perl, blas, lapack, mpi, cudatoolkit
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
, cmake
|
||||
, hwloc
|
||||
, fftw
|
||||
, perl
|
||||
, blas
|
||||
, lapack
|
||||
, mpi
|
||||
, cudaPackages
|
||||
, plumed
|
||||
, singlePrec ? true
|
||||
, config
|
||||
@@ -9,6 +19,8 @@
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (cudaPackages.cudaFlags) cudaCapabilities dropDot;
|
||||
|
||||
# Select reasonable defaults for all major platforms
|
||||
# The possible values are defined in CMakeLists.txt:
|
||||
# AUTO None SSE2 SSE4.1 AVX_128_FMA AVX_256 AVX2_256
|
||||
@@ -52,7 +64,7 @@ in stdenv.mkDerivation rec {
|
||||
nativeBuildInputs =
|
||||
[ cmake ]
|
||||
++ lib.optional enablePlumed plumed
|
||||
;
|
||||
++ lib.optionals enableCuda [ cudaPackages.cuda_nvcc ];
|
||||
|
||||
buildInputs = [
|
||||
fftw
|
||||
@@ -61,13 +73,17 @@ in stdenv.mkDerivation rec {
|
||||
blas
|
||||
lapack
|
||||
] ++ lib.optional enableMpi mpi
|
||||
++ lib.optional enableCuda cudatoolkit
|
||||
;
|
||||
++ lib.optionals enableCuda [
|
||||
cudaPackages.cuda_cudart
|
||||
cudaPackages.libcufft
|
||||
cudaPackages.cuda_profiler_api
|
||||
];
|
||||
|
||||
propagatedBuildInputs = lib.optional enableMpi mpi;
|
||||
propagatedUserEnvPkgs = lib.optional enableMpi mpi;
|
||||
|
||||
cmakeFlags = [
|
||||
(lib.cmakeBool "GMX_HWLOC" true)
|
||||
"-DGMX_SIMD:STRING=${SIMD cpuAcceleration}"
|
||||
"-DGMX_OPENMP:BOOL=TRUE"
|
||||
"-DBUILD_SHARED_LIBS=ON"
|
||||
@@ -87,7 +103,13 @@ in stdenv.mkDerivation rec {
|
||||
else [
|
||||
"-DGMX_MPI:BOOL=FALSE"
|
||||
]
|
||||
) ++ lib.optional enableCuda "-DGMX_GPU=CUDA";
|
||||
) ++ lib.optionals enableCuda [
|
||||
"-DGMX_GPU=CUDA"
|
||||
(lib.cmakeFeature "CMAKE_CUDA_ARCHITECTURES" (builtins.concatStringsSep ";" (map dropDot cudaCapabilities)))
|
||||
|
||||
# Gromacs seems to ignore and override the normal variables, so we add this ad hoc:
|
||||
(lib.cmakeFeature "GMX_CUDA_TARGET_COMPUTE" (builtins.concatStringsSep ";" (map dropDot cudaCapabilities)))
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
moveToOutput share/cmake $dev
|
||||
|
||||
@@ -54,11 +54,28 @@ final: prev: let
|
||||
{
|
||||
name = "setup-cuda-hook";
|
||||
|
||||
# Point NVCC at a compatible compiler
|
||||
substitutions.ccRoot = "${backendStdenv.cc}";
|
||||
|
||||
# Required in addition to ccRoot as otherwise bin/gcc is looked up
|
||||
# when building CMakeCUDACompilerId.cu
|
||||
substitutions.ccFullPath = "${backendStdenv.cc}/bin/${backendStdenv.cc.targetPrefix}c++";
|
||||
|
||||
# Required by cmake's enable_language(CUDA) to build a test program
|
||||
# When implementing cross-compilation support: this is
|
||||
# final.pkgs.targetPackages.cudaPackages.cuda_cudart
|
||||
# Given the multiple-outputs each CUDA redist has, we can specify the exact components we
|
||||
# need from the package. CMake requires:
|
||||
# - the cuda_runtime.h header, which is in the dev output
|
||||
# - the dynamic library, which is in the lib output
|
||||
# - the static library, which is in the static output
|
||||
substitutions.cudartFlags = let cudart = final.cuda_cudart; in
|
||||
builtins.concatStringsSep " " (final.lib.optionals (final ? cuda_cudart) ([
|
||||
"-I${final.lib.getDev cudart}/include"
|
||||
"-L${final.lib.getLib cudart}/lib"
|
||||
] ++ final.lib.optionals (builtins.elem "static" cudart.outputs) [
|
||||
"-L${cudart.static}/lib"
|
||||
]));
|
||||
}
|
||||
./hooks/setup-cuda-hook.sh)
|
||||
{ });
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
# Only run the hook from nativeBuildInputs
|
||||
(( "$hostOffset" == -1 && "$targetOffset" == 0)) || return 0
|
||||
|
||||
echo Sourcing setup-cuda-hook >&2
|
||||
|
||||
extendCUDAToolkit_ROOT() {
|
||||
@@ -55,8 +58,9 @@ setupCUDAToolkitCompilers() {
|
||||
|
||||
# CMake's enable_language(CUDA) runs a compiler test and it doesn't account for
|
||||
# CUDAToolkit_ROOT. We have to help it locate libcudart
|
||||
if [[ -z "${nvccDontPrependCudartFlags-}" ]] ; then
|
||||
export NVCC_APPEND_FLAGS+=" -L@cudartLib@/lib -L@cudartStatic@/lib -I@cudartInclude@/include"
|
||||
local cudartFlags="@cudartFlags@"
|
||||
if [[ -z "${nvccDontPrependCudartFlags-}" ]] && [[ -n "${cudartFlags:-}" ]] ; then
|
||||
export NVCC_APPEND_FLAGS+=" $cudartFlags"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -51,37 +51,14 @@ in
|
||||
]
|
||||
);
|
||||
|
||||
cuda_nvcc = prev.cuda_nvcc.overrideAttrs (_: {
|
||||
# Required by cmake's enable_language(CUDA) to build a test program
|
||||
# When implementing cross-compilation support: this is
|
||||
# final.pkgs.targetPackages.cudaPackages.cuda_cudart
|
||||
env = {
|
||||
# Given the multiple-outputs each CUDA redist has, we can specify the exact components we
|
||||
# need from the package. CMake requires:
|
||||
# - the cuda_runtime.h header, which is in the dev output
|
||||
# - the dynamic library, which is in the lib output
|
||||
# - the static library, which is in the static output
|
||||
cudartInclude = "${final.cuda_cudart.dev}";
|
||||
cudartLib = "${final.cuda_cudart.lib}";
|
||||
cudartStatic = "${final.cuda_cudart.static}";
|
||||
};
|
||||
|
||||
# Point NVCC at a compatible compiler
|
||||
|
||||
# Desiredata: whenever a package (e.g. magma) adds cuda_nvcc to
|
||||
# nativeBuildInputs (offsets `(-1, 0)`), magma should also source the
|
||||
# setupCudaHook, i.e. we want it the hook to be propagated into the
|
||||
# same nativeBuildInputs.
|
||||
#
|
||||
# Logically, cuda_nvcc should include the hook in depsHostHostPropagated,
|
||||
# so that the final offsets for the propagated hook would be `(-1, 0) +
|
||||
# (0, 0) = (-1, 0)`.
|
||||
#
|
||||
# In practice, TargetTarget appears to work:
|
||||
# https://gist.github.com/fd80ff142cd25e64603618a3700e7f82
|
||||
depsTargetTargetPropagated = [
|
||||
cuda_nvcc = prev.cuda_nvcc.overrideAttrs (oldAttrs: {
|
||||
propagatedBuildInputs = [
|
||||
final.setupCudaHook
|
||||
];
|
||||
|
||||
meta = (oldAttrs.meta or { }) // {
|
||||
mainProgram = "nvcc";
|
||||
};
|
||||
});
|
||||
|
||||
cuda_nvprof = prev.cuda_nvprof.overrideAttrs (oldAttrs: {
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
{ autoAddOpenGLRunpathHook
|
||||
, backendStdenv
|
||||
, cmake
|
||||
, cuda_cccl
|
||||
, cuda_cudart
|
||||
, cuda_cccl ? null
|
||||
, cuda_cudart ? null
|
||||
, cudaFlags
|
||||
, cuda_nvcc
|
||||
, cuda_nvcc ? null
|
||||
, cudatoolkit ? null
|
||||
, lib
|
||||
, libcublas
|
||||
, libcublas ? null
|
||||
, setupCudaHook
|
||||
, stdenv
|
||||
}:
|
||||
@@ -17,23 +18,24 @@ backendStdenv.mkDerivation {
|
||||
|
||||
src = ./.;
|
||||
|
||||
buildInputs = [
|
||||
buildInputs = lib.optionals (cuda_cudart != null) [
|
||||
libcublas
|
||||
cuda_cudart
|
||||
cuda_cccl
|
||||
] ++ lib.optionals (cuda_cudart == null) [
|
||||
cudatoolkit
|
||||
];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
|
||||
# NOTE: this needs to be pkgs.buildPackages.cudaPackages_XX_Y.cuda_nvcc for
|
||||
# cross-compilation to work. This should work automatically once we move to
|
||||
# spliced scopes. Delete this comment once that happens
|
||||
cuda_nvcc
|
||||
|
||||
# Alternatively, we could remove the propagated hook from cuda_nvcc and add
|
||||
# directly:
|
||||
# setupCudaHook
|
||||
autoAddOpenGLRunpathHook
|
||||
] ++ lib.optionals (cuda_nvcc != null) [
|
||||
cuda_nvcc
|
||||
] ++ lib.optionals (cuda_nvcc == null) [
|
||||
cudatoolkit
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
|
||||
@@ -57,6 +57,7 @@ stdenv.mkDerivation rec {
|
||||
buildInputs = lib.optionals withMkl [
|
||||
mkl
|
||||
] ++ lib.optionals withCUDA [
|
||||
cudaPackages.cuda_cccl # <nv/target> required by the fp16 headers in cudart
|
||||
cudaPackages.cuda_cudart
|
||||
cudaPackages.libcublas
|
||||
cudaPackages.libcurand
|
||||
|
||||
@@ -22,12 +22,13 @@ stdenv.mkDerivation rec {
|
||||
];
|
||||
|
||||
# XXX: libX11 is not directly needed, but needed as a propagated dep of Cairo.
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
nativeBuildInputs = [ pkg-config ]
|
||||
++ lib.optionals enableCuda [ cudaPackages.cuda_nvcc ];
|
||||
|
||||
buildInputs = [ expat ncurses ]
|
||||
++ lib.optionals x11Support [ cairo libX11 ]
|
||||
++ lib.optionals stdenv.isLinux [ numactl ]
|
||||
++ lib.optional enableCuda cudaPackages.cudatoolkit;
|
||||
++ lib.optionals enableCuda [ cudaPackages.cuda_cudart ];
|
||||
|
||||
# Since `libpci' appears in `hwloc.pc', it must be propagated.
|
||||
propagatedBuildInputs = lib.optional stdenv.isLinux pciutils;
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
{ lib
|
||||
, config
|
||||
, fetchFromGitHub
|
||||
, stdenv
|
||||
, cmake
|
||||
, pkg-config
|
||||
, cudaPackages ? { }
|
||||
, symlinkJoin
|
||||
, tbb
|
||||
, hostSystem ? "CPP"
|
||||
, deviceSystem ? if config.cudaSupport then "CUDA" else "OMP"
|
||||
}:
|
||||
|
||||
# Policy for device_vector<T>
|
||||
assert builtins.elem deviceSystem [
|
||||
"CPP" # Serial on CPU
|
||||
"OMP" # Parallel with OpenMP
|
||||
"TBB" # Parallel with Intel TBB
|
||||
"CUDA" # Parallel on GPU
|
||||
];
|
||||
|
||||
# Policy for host_vector<T>
|
||||
# Always lives on CPU, but execution can be made parallel
|
||||
assert builtins.elem hostSystem [ "CPP" "OMP" "TBB" ];
|
||||
|
||||
let
|
||||
pname = "nvidia-thrust";
|
||||
version = "1.16.0";
|
||||
|
||||
inherit (cudaPackages) backendStdenv cudaFlags;
|
||||
cudaCapabilities = map cudaFlags.dropDot cudaFlags.cudaCapabilities;
|
||||
|
||||
tbbSupport = builtins.elem "TBB" [ deviceSystem hostSystem ];
|
||||
cudaSupport = deviceSystem == "CUDA";
|
||||
|
||||
# TODO: Would like to use this:
|
||||
cudaJoined = symlinkJoin {
|
||||
name = "cuda-packages-unsplit";
|
||||
paths = with cudaPackages; [
|
||||
cuda_nvcc
|
||||
cuda_nvrtc # symbols: cudaLaunchDevice, &c; notice postBuild
|
||||
cuda_cudart # cuda_runtime.h
|
||||
libcublas
|
||||
];
|
||||
postBuild = ''
|
||||
ln -s $out/lib $out/lib64
|
||||
'';
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
inherit pname version;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "NVIDIA";
|
||||
repo = "thrust";
|
||||
rev = version;
|
||||
fetchSubmodules = true;
|
||||
hash = "sha256-/EyznxWKuHuvHNjq+SQg27IaRbtkjXR2zlo2YgCWmUQ=";
|
||||
};
|
||||
|
||||
# NVIDIA's "compiler hacks" seem like work-arounds for legacy toolchains and
|
||||
# cause us errors such as:
|
||||
# > Thrust's test harness uses CMAKE_CXX_COMPILER for the CUDA host compiler.
|
||||
# > Refusing to overwrite specified CMAKE_CUDA_HOST_COMPILER
|
||||
# So we un-fix cmake after them:
|
||||
postPatch = ''
|
||||
echo > cmake/ThrustCompilerHacks.cmake
|
||||
'';
|
||||
|
||||
buildInputs = lib.optionals tbbSupport [ tbb ];
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkg-config
|
||||
] ++ lib.optionals cudaSupport [
|
||||
# Goes in native build inputs because thrust looks for headers
|
||||
# in a path relative to nvcc...
|
||||
cudaJoined
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DTHRUST_INCLUDE_CUB_CMAKE=${if cudaSupport then "ON" else "OFF"}"
|
||||
"-DTHRUST_DEVICE_SYSTEM=${deviceSystem}"
|
||||
"-DTHRUST_HOST_SYSTEM=${hostSystem}"
|
||||
"-DTHRUST_AUTO_DETECT_COMPUTE_ARCHS=OFF"
|
||||
"-DTHRUST_DISABLE_ARCH_BY_DEFAULT=ON"
|
||||
] ++ lib.optionals cudaFlags.enableForwardCompat [
|
||||
"-DTHRUST_ENABLE_COMPUTE_FUTURE=ON"
|
||||
] ++ map (sm: "THRUST_ENABLE_COMPUTE_${sm}") cudaCapabilities;
|
||||
|
||||
passthru = {
|
||||
inherit cudaSupport cudaPackages cudaJoined;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "A high-level C++ parallel algorithms library that builds on top of CUDA, TBB, OpenMP, etc";
|
||||
homepage = "https://github.com/NVIDIA/thrust";
|
||||
license = licenses.asl20;
|
||||
platforms = platforms.unix;
|
||||
maintainers = with maintainers; [ SomeoneSerge ];
|
||||
};
|
||||
}
|
||||
@@ -476,6 +476,8 @@ effectiveStdenv.mkDerivation {
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
cudaSupport = enableCuda;
|
||||
|
||||
tests = {
|
||||
inherit (gst_all_1) gst-plugins-bad;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
, libpsm2, libfabric, pmix, ucx, ucc
|
||||
, config
|
||||
# Enable CUDA support
|
||||
, cudaSupport ? config.cudaSupport, cudatoolkit
|
||||
, cudaSupport ? config.cudaSupport, cudaPackages
|
||||
|
||||
# Enable the Sun Grid Engine bindings
|
||||
, enableSGE ? false
|
||||
@@ -18,12 +18,7 @@
|
||||
, fortranSupport ? true
|
||||
}:
|
||||
|
||||
let
|
||||
cudatoolkit_joined = symlinkJoin {
|
||||
name = "${cudatoolkit.name}-unsplit";
|
||||
paths = [ cudatoolkit.out cudatoolkit.lib ];
|
||||
};
|
||||
in stdenv.mkDerivation rec {
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "openmpi";
|
||||
version = "4.1.6";
|
||||
|
||||
@@ -47,12 +42,13 @@ in stdenv.mkDerivation rec {
|
||||
|
||||
buildInputs = [ zlib ]
|
||||
++ lib.optionals stdenv.isLinux [ libnl numactl pmix ucx ucc ]
|
||||
++ lib.optionals cudaSupport [ cudatoolkit ]
|
||||
++ lib.optionals cudaSupport [ cudaPackages.cuda_cudart ]
|
||||
++ [ libevent hwloc ]
|
||||
++ lib.optional (stdenv.isLinux || stdenv.isFreeBSD) rdma-core
|
||||
++ lib.optionals fabricSupport [ libpsm2 libfabric ];
|
||||
|
||||
nativeBuildInputs = [ perl ]
|
||||
++ lib.optionals cudaSupport [ cudaPackages.cuda_nvcc ]
|
||||
++ lib.optionals fortranSupport [ gfortran ];
|
||||
|
||||
configureFlags = lib.optional (!cudaSupport) "--disable-mca-dso"
|
||||
@@ -67,7 +63,7 @@ in stdenv.mkDerivation rec {
|
||||
# TODO: add UCX support, which is recommended to use with cuda for the most robust OpenMPI build
|
||||
# https://github.com/openucx/ucx
|
||||
# https://www.open-mpi.org/faq/?category=buildcuda
|
||||
++ lib.optionals cudaSupport [ "--with-cuda=${cudatoolkit_joined}" "--enable-dlopen" ]
|
||||
++ lib.optionals cudaSupport [ "--with-cuda=${cudaPackages.cuda_cudart}" "--enable-dlopen" ]
|
||||
++ lib.optionals fabricSupport [ "--with-psm2=${lib.getDev libpsm2}" "--with-libfabric=${lib.getDev libfabric}" ]
|
||||
;
|
||||
|
||||
@@ -98,7 +94,8 @@ in stdenv.mkDerivation rec {
|
||||
doCheck = true;
|
||||
|
||||
passthru = {
|
||||
inherit cudaSupport cudatoolkit;
|
||||
inherit cudaSupport;
|
||||
cudatoolkit = cudaPackages.cudatoolkit; # For backward compatibility only
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
{ config, lib, stdenv, fetchFromGitHub, cmake, pkg-config, xorg, libGLU
|
||||
, libGL, glew, ocl-icd, python3
|
||||
, cudaSupport ? config.cudaSupport, cudatoolkit
|
||||
# For visibility mostly. The whole approach to cuda architectures and capabilities
|
||||
# will be reworked soon.
|
||||
, cudaArch ? "compute_37"
|
||||
, cudaSupport ? config.cudaSupport
|
||||
, cudaPackages
|
||||
, openclSupport ? !cudaSupport
|
||||
, darwin
|
||||
}:
|
||||
@@ -21,7 +19,11 @@ stdenv.mkDerivation rec {
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
nativeBuildInputs = [ cmake pkg-config ];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkg-config
|
||||
cudaPackages.cuda_nvcc
|
||||
];
|
||||
buildInputs =
|
||||
[ libGLU libGL python3
|
||||
# FIXME: these are not actually needed, but the configure script wants them.
|
||||
@@ -30,21 +32,31 @@ stdenv.mkDerivation rec {
|
||||
]
|
||||
++ lib.optional (openclSupport && !stdenv.isDarwin) ocl-icd
|
||||
++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [OpenCL Cocoa CoreVideo IOKit AppKit AGL ])
|
||||
++ lib.optional cudaSupport cudatoolkit;
|
||||
++ lib.optional cudaSupport [
|
||||
cudaPackages.cuda_cudart
|
||||
];
|
||||
|
||||
# It's important to set OSD_CUDA_NVCC_FLAGS,
|
||||
# because otherwise OSD might piggyback unwanted architectures:
|
||||
# https://github.com/PixarAnimationStudios/OpenSubdiv/blob/7d0ab5530feef693ac0a920585b5c663b80773b3/CMakeLists.txt#L602
|
||||
preConfigure = lib.optionalString cudaSupport ''
|
||||
cmakeFlagsArray+=(
|
||||
-DOSD_CUDA_NVCC_FLAGS="${lib.concatStringsSep " " cudaPackages.cudaFlags.gencode}"
|
||||
)
|
||||
'';
|
||||
|
||||
cmakeFlags =
|
||||
[ "-DNO_TUTORIALS=1"
|
||||
"-DNO_REGRESSION=1"
|
||||
"-DNO_EXAMPLES=1"
|
||||
"-DNO_METAL=1" # don’t have metal in apple sdk
|
||||
(lib.cmakeBool "NO_OPENCL" (!openclSupport))
|
||||
(lib.cmakeBool "NO_CUDA" (!cudaSupport))
|
||||
] ++ lib.optionals (!stdenv.isDarwin) [
|
||||
"-DGLEW_INCLUDE_DIR=${glew.dev}/include"
|
||||
"-DGLEW_LIBRARY=${glew.dev}/lib"
|
||||
] ++ lib.optionals cudaSupport [
|
||||
"-DOSD_CUDA_NVCC_FLAGS=--gpu-architecture=${cudaArch}"
|
||||
"-DCUDA_HOST_COMPILER=${cudatoolkit.cc}/bin/cc"
|
||||
] ++ lib.optionals (!openclSupport) [
|
||||
"-DNO_OPENCL=1"
|
||||
];
|
||||
|
||||
preBuild = let maxBuildCores = 16; in lib.optionalString cudaSupport ''
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
, fetchFromGitHub
|
||||
, fetchurl
|
||||
, substituteAll
|
||||
, cudaSupport ? opencv.cudaSupport or false
|
||||
|
||||
# build
|
||||
, addOpenGLRunpath
|
||||
@@ -21,6 +22,7 @@
|
||||
, protobuf
|
||||
, pugixml
|
||||
, tbb
|
||||
, cudaPackages
|
||||
}:
|
||||
|
||||
let
|
||||
@@ -68,6 +70,8 @@ stdenv.mkDerivation rec {
|
||||
setuptools
|
||||
]))
|
||||
shellcheck
|
||||
] ++ lib.optionals cudaSupport [
|
||||
cudaPackages.cuda_nvcc
|
||||
];
|
||||
|
||||
patches = [
|
||||
@@ -133,6 +137,8 @@ stdenv.mkDerivation rec {
|
||||
protobuf
|
||||
pugixml
|
||||
tbb
|
||||
] ++ lib.optionals cudaSupport [
|
||||
cudaPackages.cuda_cudart
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
{ stdenv
|
||||
, lib
|
||||
, libPath
|
||||
, cuda_cudart
|
||||
, cudaMajorVersion
|
||||
, cuda_nvcc
|
||||
, cudatoolkit
|
||||
, libcublas
|
||||
, fetchurl
|
||||
, autoPatchelfHook
|
||||
, addOpenGLRunpath
|
||||
@@ -17,7 +21,7 @@ let
|
||||
in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "cudatoolkit-${cudatoolkit.majorVersion}-cutensor";
|
||||
pname = "cutensor-cu${cudaMajorVersion}";
|
||||
inherit version;
|
||||
|
||||
src = fetchurl {
|
||||
@@ -32,20 +36,27 @@ stdenv.mkDerivation {
|
||||
nativeBuildInputs = [
|
||||
autoPatchelfHook
|
||||
addOpenGLRunpath
|
||||
cuda_nvcc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
stdenv.cc.cc.lib
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
cudatoolkit
|
||||
cuda_cudart
|
||||
libcublas
|
||||
];
|
||||
|
||||
# Set RUNPATH so that libcuda in /run/opengl-driver(-32)/lib can be found.
|
||||
# See the explanation in addOpenGLRunpath.
|
||||
installPhase = ''
|
||||
mkdir -p "$out" "$dev"
|
||||
|
||||
if [[ ! -d "${libPath}" ]] ; then
|
||||
echo "Cutensor: ${libPath} does not exist, only found:" >&2
|
||||
find "$(dirname ${libPath})"/ -maxdepth 1 >&2
|
||||
echo "This cutensor release might not support your cudatoolkit version" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mv include "$dev"
|
||||
mv ${libPath} "$out/lib"
|
||||
|
||||
@@ -58,7 +69,7 @@ stdenv.mkDerivation {
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
inherit cudatoolkit;
|
||||
cudatoolkit = lib.warn "cutensor.passthru: cudaPackages.cudatoolkit is deprecated" cudatoolkit;
|
||||
majorVersion = lib.versions.major version;
|
||||
};
|
||||
|
||||
@@ -66,7 +77,11 @@ stdenv.mkDerivation {
|
||||
description = "cuTENSOR: A High-Performance CUDA Library For Tensor Primitives";
|
||||
homepage = "https://developer.nvidia.com/cutensor";
|
||||
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||
license = licenses.unfree;
|
||||
license = licenses.unfreeRedistributable // {
|
||||
shortName = "cuTENSOR EULA";
|
||||
name = "cuTENSOR SUPPLEMENT TO SOFTWARE LICENSE AGREEMENT FOR NVIDIA SOFTWARE DEVELOPMENT KITS";
|
||||
url = "https://docs.nvidia.com/cuda/cutensor/license.html";
|
||||
};
|
||||
platforms = [ "x86_64-linux" ];
|
||||
maintainers = with maintainers; [ obsidian-systems-maintenance ];
|
||||
};
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
, cmake
|
||||
, cudaPackages ? { }
|
||||
, cudaSupport ? config.cudaSupport
|
||||
, nvidia-thrust
|
||||
, useThrustSourceBuild ? true
|
||||
, pythonSupport ? true
|
||||
, pythonPackages
|
||||
, llvmPackages
|
||||
@@ -27,8 +25,6 @@
|
||||
, runCommand
|
||||
}@inputs:
|
||||
|
||||
assert cudaSupport -> nvidia-thrust.cudaSupport;
|
||||
|
||||
let
|
||||
pname = "faiss";
|
||||
version = "1.7.4";
|
||||
@@ -44,9 +40,6 @@ let
|
||||
cuda_cudart # cuda_runtime.h
|
||||
libcublas
|
||||
libcurand
|
||||
] ++ lib.optionals useThrustSourceBuild [
|
||||
nvidia-thrust
|
||||
] ++ lib.optionals (!useThrustSourceBuild) [
|
||||
cuda_cccl
|
||||
] ++ lib.optionals (cudaPackages ? cuda_profiler_api) [
|
||||
cuda_profiler_api # cuda_profiler_api.h
|
||||
|
||||
@@ -17,16 +17,32 @@ final: prev: let
|
||||
isSupported = fileData: elem cudaVersion fileData.supportedCudaVersions;
|
||||
# Return the first file that is supported. In practice there should only ever be one anyway.
|
||||
supportedFile = files: findFirst isSupported null files;
|
||||
# Supported versions with versions as keys and file as value
|
||||
supportedVersions = filterAttrs (version: file: file !=null ) (mapAttrs (version: files: supportedFile files) tensorRTVersions);
|
||||
|
||||
# Compute versioned attribute name to be used in this package set
|
||||
computeName = version: "tensorrt_${toUnderscore version}";
|
||||
|
||||
# Supported versions with versions as keys and file as value
|
||||
supportedVersions = lib.recursiveUpdate
|
||||
{
|
||||
tensorrt = {
|
||||
enable = false;
|
||||
fileVersionCuda = null;
|
||||
fileVersionCudnn = null;
|
||||
fullVersion = "0.0.0";
|
||||
sha256 = null;
|
||||
tarball = null;
|
||||
supportedCudaVersions = [ ];
|
||||
};
|
||||
}
|
||||
(mapAttrs' (version: attrs: nameValuePair (computeName version) attrs)
|
||||
(filterAttrs (version: file: file != null) (mapAttrs (version: files: supportedFile files) tensorRTVersions)));
|
||||
|
||||
# Add all supported builds as attributes
|
||||
allBuilds = mapAttrs' (version: file: nameValuePair (computeName version) (buildTensorRTPackage (removeAttrs file ["fileVersionCuda"]))) supportedVersions;
|
||||
allBuilds = mapAttrs (name: file: buildTensorRTPackage (removeAttrs file ["fileVersionCuda"])) supportedVersions;
|
||||
|
||||
# Set the default attributes, e.g. tensorrt = tensorrt_8_4;
|
||||
defaultBuild = { "tensorrt" = if allBuilds ? ${computeName tensorRTDefaultVersion}
|
||||
then allBuilds.${computeName tensorRTDefaultVersion}
|
||||
else throw "tensorrt-${tensorRTDefaultVersion} does not support your cuda version ${cudaVersion}"; };
|
||||
defaultName = computeName tensorRTDefaultVersion;
|
||||
defaultBuild = lib.optionalAttrs (allBuilds ? ${defaultName}) { tensorrt = allBuilds.${computeName tensorRTDefaultVersion}; };
|
||||
in {
|
||||
inherit buildTensorRTPackage;
|
||||
} // allBuilds // defaultBuild;
|
||||
|
||||
@@ -8,20 +8,22 @@
|
||||
, cudnn
|
||||
}:
|
||||
|
||||
{ fullVersion
|
||||
{ enable ? true
|
||||
, fullVersion
|
||||
, fileVersionCudnn ? null
|
||||
, tarball
|
||||
, sha256
|
||||
, supportedCudaVersions ? [ ]
|
||||
}:
|
||||
|
||||
assert fileVersionCudnn == null || lib.assertMsg (lib.strings.versionAtLeast cudnn.version fileVersionCudnn)
|
||||
assert !enable || fileVersionCudnn == null || lib.assertMsg (lib.strings.versionAtLeast cudnn.version fileVersionCudnn)
|
||||
"This version of TensorRT requires at least cuDNN ${fileVersionCudnn} (current version is ${cudnn.version})";
|
||||
|
||||
backendStdenv.mkDerivation rec {
|
||||
pname = "cudatoolkit-${cudatoolkit.majorVersion}-tensorrt";
|
||||
version = fullVersion;
|
||||
src = requireFile rec {
|
||||
src = if !enable then null else
|
||||
requireFile rec {
|
||||
name = tarball;
|
||||
inherit sha256;
|
||||
message = ''
|
||||
@@ -38,13 +40,13 @@ backendStdenv.mkDerivation rec {
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
nativeBuildInputs = [
|
||||
nativeBuildInputs = lib.optionals enable [
|
||||
autoPatchelfHook
|
||||
autoAddOpenGLRunpathHook
|
||||
];
|
||||
|
||||
# Used by autoPatchelfHook
|
||||
buildInputs = [
|
||||
buildInputs = lib.optionals enable [
|
||||
backendStdenv.cc.cc.lib # libstdc++
|
||||
cudatoolkit
|
||||
cudnn
|
||||
@@ -75,6 +77,7 @@ backendStdenv.mkDerivation rec {
|
||||
'';
|
||||
|
||||
passthru.stdenv = backendStdenv;
|
||||
passthru.enable = enable;
|
||||
|
||||
meta = with lib; {
|
||||
# Check that the cudatoolkit version satisfies our min/max constraints (both
|
||||
@@ -82,7 +85,7 @@ backendStdenv.mkDerivation rec {
|
||||
# official version constraints (as recorded in default.nix). In some cases
|
||||
# you _may_ be able to smudge version constraints, just know that you're
|
||||
# embarking into unknown and unsupported territory when doing so.
|
||||
broken = !(elem cudaVersion supportedCudaVersions);
|
||||
broken = !enable || !(elem cudaVersion supportedCudaVersions);
|
||||
description = "TensorRT: a high-performance deep learning interface";
|
||||
homepage = "https://developer.nvidia.com/tensorrt";
|
||||
license = licenses.unfree;
|
||||
|
||||
@@ -14,10 +14,15 @@
|
||||
inherit (cudaPackages) backendStdenv cudaFlags;
|
||||
|
||||
cuda-common-redist = with cudaPackages; [
|
||||
cuda_cudart # cuda_runtime.h
|
||||
libcublas # cublas_v2.h
|
||||
libcusolver # cusolverDn.h
|
||||
libcusparse # cusparse.h
|
||||
cuda_cudart.dev # cuda_runtime.h
|
||||
cuda_cudart.lib
|
||||
cuda_cccl.dev # <nv/target>
|
||||
libcublas.dev # cublas_v2.h
|
||||
libcublas.lib
|
||||
libcusolver.dev # cusolverDn.h
|
||||
libcusolver.lib
|
||||
libcusparse.dev # cusparse.h
|
||||
libcusparse.lib
|
||||
];
|
||||
|
||||
cuda-native-redist = symlinkJoin {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ stdenv, lib, fetchFromGitHub, libtool, automake, autoconf, ucx
|
||||
, config
|
||||
, enableCuda ? config.cudaSupport
|
||||
, cudatoolkit
|
||||
, cudaPackages
|
||||
, enableAvx ? stdenv.hostPlatform.avxSupport
|
||||
, enableSse41 ? stdenv.hostPlatform.sse4_1Support
|
||||
, enableSse42 ? stdenv.hostPlatform.sse4_2Support
|
||||
@@ -30,19 +30,25 @@ stdenv.mkDerivation rec {
|
||||
done
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ libtool automake autoconf ]
|
||||
++ lib.optionals enableCuda [ cudaPackages.cuda_nvcc ];
|
||||
buildInputs = [ ucx ]
|
||||
++ lib.optionals enableCuda [
|
||||
cudaPackages.cuda_cccl
|
||||
cudaPackages.cuda_cudart
|
||||
];
|
||||
|
||||
|
||||
preConfigure = ''
|
||||
./autogen.sh
|
||||
'' + lib.optionalString enableCuda ''
|
||||
configureFlagsArray+=( "--with-nvcc-gencode=${builtins.concatStringsSep " " cudaPackages.cudaFlags.gencode}" )
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ libtool automake autoconf ];
|
||||
buildInputs = [ ucx ]
|
||||
++ lib.optional enableCuda cudatoolkit;
|
||||
|
||||
configureFlags = [ ]
|
||||
++ lib.optional enableSse41 "--with-sse41"
|
||||
++ lib.optional enableSse42 "--with-sse42"
|
||||
++ lib.optional enableAvx "--with-avx"
|
||||
++ lib.optional enableCuda "--with-cuda=${cudatoolkit}";
|
||||
++ lib.optional enableCuda "--with-cuda=${cudaPackages.cuda_cudart}";
|
||||
|
||||
postInstall = ''
|
||||
find $out/lib/ -name "*.la" -exec rm -f \{} \;
|
||||
|
||||
@@ -2,18 +2,12 @@
|
||||
, rdma-core, libbfd, libiberty, perl, zlib, symlinkJoin, pkg-config
|
||||
, config
|
||||
, enableCuda ? config.cudaSupport
|
||||
, cudatoolkit
|
||||
, cudaPackages
|
||||
, enableRocm ? config.rocmSupport
|
||||
, rocmPackages
|
||||
}:
|
||||
|
||||
let
|
||||
# Needed for configure to find all libraries
|
||||
cudatoolkit' = symlinkJoin {
|
||||
inherit (cudatoolkit) name meta;
|
||||
paths = [ cudatoolkit cudatoolkit.lib ];
|
||||
};
|
||||
|
||||
rocmList = with rocmPackages; [ rocm-core rocm-runtime rocm-device-libs clr ];
|
||||
|
||||
rocm = symlinkJoin {
|
||||
@@ -35,7 +29,15 @@ stdenv.mkDerivation rec {
|
||||
|
||||
outputs = [ "out" "doc" "dev" ];
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook doxygen pkg-config ];
|
||||
nativeBuildInputs = [
|
||||
autoreconfHook
|
||||
doxygen
|
||||
pkg-config
|
||||
]
|
||||
++ lib.optionals enableCuda [
|
||||
cudaPackages.cuda_nvcc
|
||||
cudaPackages.autoAddOpenGLRunpathHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
libbfd
|
||||
@@ -44,8 +46,16 @@ stdenv.mkDerivation rec {
|
||||
perl
|
||||
rdma-core
|
||||
zlib
|
||||
] ++ lib.optional enableCuda cudatoolkit
|
||||
++ lib.optionals enableRocm rocmList;
|
||||
] ++ lib.optionals enableCuda [
|
||||
cudaPackages.cuda_cudart
|
||||
cudaPackages.cuda_nvml_dev
|
||||
|
||||
] ++ lib.optionals enableRocm rocmList;
|
||||
|
||||
LDFLAGS = lib.optionals enableCuda [
|
||||
# Fake libnvidia-ml.so (the real one is deployed impurely)
|
||||
"-L${cudaPackages.cuda_nvml_dev}/lib/stubs"
|
||||
];
|
||||
|
||||
configureFlags = [
|
||||
"--with-rdmacm=${lib.getDev rdma-core}"
|
||||
@@ -53,7 +63,7 @@ stdenv.mkDerivation rec {
|
||||
"--with-rc"
|
||||
"--with-dm"
|
||||
"--with-verbs=${lib.getDev rdma-core}"
|
||||
] ++ lib.optional enableCuda "--with-cuda=${cudatoolkit'}"
|
||||
] ++ lib.optionals enableCuda [ "--with-cuda=${cudaPackages.cuda_cudart}" ]
|
||||
++ lib.optional enableRocm "--with-rocm=${rocm}";
|
||||
|
||||
postInstall = ''
|
||||
|
||||
@@ -11,11 +11,34 @@
|
||||
, cudaPackages
|
||||
, addOpenGLRunpath
|
||||
, pythonOlder
|
||||
, symlinkJoin
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (cudaPackages) cudatoolkit cudnn cutensor nccl;
|
||||
in buildPythonPackage rec {
|
||||
inherit (cudaPackages) cudnn cutensor nccl;
|
||||
cudatoolkit-joined = symlinkJoin {
|
||||
name = "cudatoolkit-joined-${cudaPackages.cudaVersion}";
|
||||
paths = with cudaPackages; [
|
||||
cuda_cccl # <nv/target>
|
||||
cuda_cccl.dev
|
||||
cuda_cudart
|
||||
cuda_nvcc.dev # <crt/host_defines.h>
|
||||
cuda_nvprof
|
||||
cuda_nvrtc
|
||||
cuda_nvtx
|
||||
cuda_profiler_api
|
||||
libcublas
|
||||
libcufft
|
||||
libcurand
|
||||
libcusolver
|
||||
libcusparse
|
||||
|
||||
# Missing:
|
||||
# cusparselt
|
||||
];
|
||||
};
|
||||
in
|
||||
buildPythonPackage rec {
|
||||
pname = "cupy";
|
||||
version = "12.2.0";
|
||||
|
||||
@@ -32,27 +55,32 @@ in buildPythonPackage rec {
|
||||
# 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 = [
|
||||
setuptools
|
||||
wheel
|
||||
addOpenGLRunpath
|
||||
cython
|
||||
cudaPackages.cuda_nvcc
|
||||
];
|
||||
|
||||
LDFLAGS = "-L${cudatoolkit}/lib/stubs";
|
||||
|
||||
propagatedBuildInputs = [
|
||||
cudatoolkit
|
||||
buildInputs = [
|
||||
cudatoolkit-joined
|
||||
cudnn
|
||||
cutensor
|
||||
nccl
|
||||
];
|
||||
|
||||
NVCC = "${lib.getExe cudaPackages.cuda_nvcc}"; # FIXME: splicing/buildPackages
|
||||
CUDA_PATH = "${cudatoolkit-joined}";
|
||||
LDFLAGS = "-L${cudaPackages.cuda_cudart}/lib/stubs";
|
||||
|
||||
propagatedBuildInputs = [
|
||||
fastrlock
|
||||
numpy
|
||||
setuptools
|
||||
wheel
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
|
||||
@@ -29,11 +29,11 @@
|
||||
, stdenv
|
||||
# Options:
|
||||
, cudaSupport ? config.cudaSupport
|
||||
, cudaPackages ? {}
|
||||
, cudaPackagesGoogle
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (cudaPackages) cudatoolkit cudnn;
|
||||
inherit (cudaPackagesGoogle) cudatoolkit cudnn;
|
||||
|
||||
version = "0.4.20";
|
||||
|
||||
@@ -210,8 +210,8 @@ buildPythonPackage {
|
||||
maintainers = with maintainers; [ samuela ];
|
||||
platforms = [ "aarch64-darwin" "x86_64-linux" "x86_64-darwin" ];
|
||||
broken =
|
||||
!(cudaSupport -> (cudaPackages ? cudatoolkit) && lib.versionAtLeast cudatoolkit.version "11.1")
|
||||
|| !(cudaSupport -> (cudaPackages ? cudnn) && lib.versionAtLeast cudnn.version "8.2")
|
||||
!(cudaSupport -> (cudaPackagesGoogle ? cudatoolkit) && lib.versionAtLeast cudatoolkit.version "11.1")
|
||||
|| !(cudaSupport -> (cudaPackagesGoogle ? cudnn) && lib.versionAtLeast cudnn.version "8.2")
|
||||
|| !(cudaSupport -> stdenv.isLinux);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -44,14 +44,14 @@
|
||||
, config
|
||||
# CUDA flags:
|
||||
, cudaSupport ? config.cudaSupport
|
||||
, cudaPackages ? {}
|
||||
, cudaPackagesGoogle
|
||||
|
||||
# MKL:
|
||||
, mklSupport ? true
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (cudaPackages) backendStdenv cudatoolkit cudaFlags cudnn nccl;
|
||||
inherit (cudaPackagesGoogle) backendStdenv cudatoolkit cudaFlags cudnn nccl;
|
||||
|
||||
pname = "jaxlib";
|
||||
version = "0.4.20";
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
, tensorboard
|
||||
, config
|
||||
, cudaSupport ? config.cudaSupport
|
||||
, cudaPackages ? {}
|
||||
, cudaPackagesGoogle
|
||||
, zlib
|
||||
, python
|
||||
, keras-applications
|
||||
@@ -43,7 +43,7 @@ assert ! (stdenv.isDarwin && cudaSupport);
|
||||
|
||||
let
|
||||
packages = import ./binary-hashes.nix;
|
||||
inherit (cudaPackages) cudatoolkit cudnn;
|
||||
inherit (cudaPackagesGoogle) cudatoolkit cudnn;
|
||||
in buildPythonPackage {
|
||||
pname = "tensorflow" + lib.optionalString cudaSupport "-gpu";
|
||||
inherit (packages) version;
|
||||
@@ -200,7 +200,7 @@ in buildPythonPackage {
|
||||
];
|
||||
|
||||
passthru = {
|
||||
inherit cudaPackages;
|
||||
cudaPackages = cudaPackagesGoogle;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
# https://groups.google.com/a/tensorflow.org/forum/#!topic/developers/iRCt5m4qUz0
|
||||
, config
|
||||
, cudaSupport ? config.cudaSupport
|
||||
, cudaPackages ? { }
|
||||
, cudaCapabilities ? cudaPackages.cudaFlags.cudaCapabilities
|
||||
, cudaPackagesGoogle
|
||||
, cudaCapabilities ? cudaPackagesGoogle.cudaFlags.cudaCapabilities
|
||||
, mklSupport ? false, mkl
|
||||
, tensorboardSupport ? true
|
||||
# XLA without CUDA is broken
|
||||
@@ -50,15 +50,15 @@ let
|
||||
# __ZN4llvm11SmallPtrSetIPKNS_10AllocaInstELj8EED1Ev in any of the
|
||||
# translation units, so the build fails at link time
|
||||
stdenv =
|
||||
if cudaSupport then cudaPackages.backendStdenv
|
||||
if cudaSupport then cudaPackagesGoogle.backendStdenv
|
||||
else if originalStdenv.isDarwin then llvmPackages_11.stdenv
|
||||
else originalStdenv;
|
||||
inherit (cudaPackages) cudatoolkit nccl;
|
||||
inherit (cudaPackagesGoogle) cudatoolkit nccl;
|
||||
# use compatible cuDNN (https://www.tensorflow.org/install/source#gpu)
|
||||
# cudaPackages.cudnn led to this:
|
||||
# https://github.com/tensorflow/tensorflow/issues/60398
|
||||
cudnnAttribute = "cudnn_8_6";
|
||||
cudnn = cudaPackages.${cudnnAttribute};
|
||||
cudnn = cudaPackagesGoogle.${cudnnAttribute};
|
||||
gentoo-patches = fetchzip {
|
||||
url = "https://dev.gentoo.org/~perfinion/patches/tensorflow-patches-2.12.0.tar.bz2";
|
||||
hash = "sha256-SCRX/5/zML7LmKEPJkcM5Tebez9vv/gmE4xhT/jyqWs=";
|
||||
@@ -486,8 +486,8 @@ let
|
||||
broken =
|
||||
stdenv.isDarwin
|
||||
|| !(xlaSupport -> cudaSupport)
|
||||
|| !(cudaSupport -> builtins.hasAttr cudnnAttribute cudaPackages)
|
||||
|| !(cudaSupport -> cudaPackages ? cudatoolkit);
|
||||
|| !(cudaSupport -> builtins.hasAttr cudnnAttribute cudaPackagesGoogle)
|
||||
|| !(cudaSupport -> cudaPackagesGoogle ? cudatoolkit);
|
||||
} // lib.optionalAttrs stdenv.isDarwin {
|
||||
timeout = 86400; # 24 hours
|
||||
maxSilent = 14400; # 4h, double the default of 7200s
|
||||
@@ -590,7 +590,7 @@ in buildPythonPackage {
|
||||
# Regression test for #77626 removed because not more `tensorflow.contrib`.
|
||||
|
||||
passthru = {
|
||||
inherit cudaPackages;
|
||||
cudaPackages = cudaPackagesGoogle;
|
||||
deps = bazel-build.deps;
|
||||
libtensorflow = bazel-build.out;
|
||||
};
|
||||
|
||||
@@ -337,7 +337,8 @@ in buildPythonPackage rec {
|
||||
buildInputs = [ blas blas.provider ]
|
||||
++ lib.optionals cudaSupport (with cudaPackages; [
|
||||
cuda_cccl.dev # <thrust/*>
|
||||
cuda_cudart # cuda_runtime.h and libraries
|
||||
cuda_cudart.dev # cuda_runtime.h and libraries
|
||||
cuda_cudart.lib
|
||||
cuda_cupti.dev # For kineto
|
||||
cuda_cupti.lib # For kineto
|
||||
cuda_nvcc.dev # crt/host_config.h; even though we include this in nativeBuildinputs, it's needed here too
|
||||
|
||||
@@ -652,6 +652,7 @@ mapAliases ({
|
||||
noto-fonts-cjk = noto-fonts-cjk-sans; # Added 2021-12-16
|
||||
noto-fonts-emoji = noto-fonts-color-emoji; # Added 2023-09-09
|
||||
noto-fonts-extra = noto-fonts; # Added 2023-04-08
|
||||
nvidia-thrust = throw "nvidia-thrust has been removed because the project was deprecated; use cudaPackages.cuda_cccl";
|
||||
|
||||
### O ###
|
||||
|
||||
|
||||
@@ -7322,6 +7322,10 @@ with pkgs;
|
||||
cudaPackages_12_2 = callPackage ./cuda-packages.nix { cudaVersion = "12.2"; };
|
||||
cudaPackages_12 = cudaPackages_12_0;
|
||||
|
||||
# Use the older cudaPackages for tensorflow and jax, as determined by cudnn
|
||||
# compatibility: https://www.tensorflow.org/install/source#gpu
|
||||
cudaPackagesGoogle = cudaPackages_11;
|
||||
|
||||
# TODO: try upgrading once there is a cuDNN release supporting CUDA 12. No
|
||||
# such cuDNN release as of 2023-01-10.
|
||||
cudaPackages = recurseIntoAttrs cudaPackages_11;
|
||||
@@ -11278,16 +11282,6 @@ with pkgs;
|
||||
|
||||
nvfetcher = haskell.lib.compose.justStaticExecutables haskellPackages.nvfetcher;
|
||||
|
||||
nvidia-thrust = callPackage ../development/libraries/nvidia-thrust { };
|
||||
|
||||
nvidia-thrust-intel = callPackage ../development/libraries/nvidia-thrust {
|
||||
hostSystem = "TBB";
|
||||
deviceSystem = if config.cudaSupport then "CUDA" else "TBB";
|
||||
};
|
||||
|
||||
nvidia-thrust-cuda = callPackage ../development/libraries/nvidia-thrust {
|
||||
deviceSystem = "CUDA";
|
||||
};
|
||||
|
||||
miller = callPackage ../tools/text/miller { };
|
||||
|
||||
@@ -20763,6 +20757,9 @@ with pkgs;
|
||||
# catboost requires clang 12+ for build
|
||||
# after bumping the default version of llvm, check for compatibility with the cuda backend and pin it.
|
||||
inherit (llvmPackages_12) stdenv;
|
||||
|
||||
# https://github.com/catboost/catboost/issues/2540
|
||||
cudaPackages = cudaPackages_11;
|
||||
};
|
||||
|
||||
ndn-cxx = callPackage ../development/libraries/ndn-cxx { };
|
||||
@@ -39431,7 +39428,6 @@ with pkgs;
|
||||
singlePrec = true;
|
||||
enableMpi = true;
|
||||
enableCuda = true;
|
||||
cudatoolkit = cudatoolkit_11;
|
||||
fftw = fftwSinglePrec;
|
||||
});
|
||||
|
||||
@@ -39973,7 +39969,6 @@ with pkgs;
|
||||
|
||||
faissWithCuda = faiss.override {
|
||||
cudaSupport = true;
|
||||
nvidia-thrust = nvidia-thrust-cuda;
|
||||
};
|
||||
|
||||
fityk = callPackage ../applications/science/misc/fityk { };
|
||||
|
||||
@@ -24,6 +24,7 @@ let
|
||||
|
||||
buildCuTensorPackage = final.callPackage ../development/libraries/science/math/cutensor/generic.nix;
|
||||
|
||||
# FIXME: Include non-x86_64 platforms
|
||||
cuTensorVersions = {
|
||||
"1.2.2.5" = {
|
||||
hash = "sha256-lU7iK4DWuC/U3s1Ct/rq2Gr3w4F2U7RYYgpmF05bibY=";
|
||||
@@ -31,12 +32,24 @@ let
|
||||
"1.5.0.3" = {
|
||||
hash = "sha256-T96+lPC6OTOkIs/z3QWg73oYVSyidN0SVkBWmT9VRx0=";
|
||||
};
|
||||
"2.0.0.7" = {
|
||||
hash = "sha256-32M4rtGOW2rgxJUhBT0WBtKkHhh9f17M+RgK9rvE72g=";
|
||||
};
|
||||
};
|
||||
|
||||
inherit (final) cudaMajorMinorVersion cudaMajorVersion;
|
||||
|
||||
cudaToCutensor = {
|
||||
"10" = "1.2.25";
|
||||
"11" = "1.5.0.3";
|
||||
"12" = "2.0.0.7";
|
||||
};
|
||||
|
||||
versionNewer = lib.flip lib.versionOlder;
|
||||
latestVersion = (builtins.head (lib.sort versionNewer (builtins.attrNames cuTensorVersions)));
|
||||
|
||||
cutensor = buildCuTensorPackage rec {
|
||||
version = if cudaMajorMinorVersion == "10.1" then "1.2.2.5" else "1.5.0.3";
|
||||
version = cudaToCutensor.${cudaMajorVersion} or latestVersion;
|
||||
inherit (cuTensorVersions.${version}) hash;
|
||||
# This can go into generic.nix
|
||||
libPath = "lib/${if cudaMajorVersion == "10" then cudaMajorMinorVersion else cudaMajorVersion}";
|
||||
|
||||
@@ -2467,7 +2467,8 @@ self: super: with self; {
|
||||
|
||||
cufflinks = callPackage ../development/python-modules/cufflinks { };
|
||||
|
||||
cupy = callPackage ../development/python-modules/cupy { };
|
||||
# cupy 12.2.0 possibly incompatible with cutensor 2.0 that comes with cudaPackages_12
|
||||
cupy = callPackage ../development/python-modules/cupy { cudaPackages = pkgs.cudaPackages_11; };
|
||||
|
||||
curio = callPackage ../development/python-modules/curio { };
|
||||
|
||||
@@ -13942,7 +13943,6 @@ self: super: with self; {
|
||||
callPackage ../development/python-modules/tensorflow {
|
||||
inherit (pkgs.darwin) cctools;
|
||||
inherit (pkgs.config) cudaSupport;
|
||||
inherit (self.tensorflow-bin) cudaPackages;
|
||||
inherit (pkgs.darwin.apple_sdk.frameworks) Foundation Security;
|
||||
flatbuffers-core = pkgs.flatbuffers;
|
||||
flatbuffers-python = self.flatbuffers;
|
||||
@@ -13975,7 +13975,7 @@ self: super: with self; {
|
||||
|
||||
tensorly = callPackage ../development/python-modules/tensorly { };
|
||||
|
||||
tensorrt = callPackage ../development/python-modules/tensorrt { };
|
||||
tensorrt = callPackage ../development/python-modules/tensorrt { cudaPackages = pkgs.cudaPackages_11; };
|
||||
|
||||
tensorstore = callPackage ../development/python-modules/tensorstore { };
|
||||
|
||||
|
||||
Reference in New Issue
Block a user