Theano: Backport master as this one can't find libnvrtc.so
This commit is contained in:
@@ -16,4 +16,29 @@ pkgs: self: super: with self; {
|
|||||||
cudnn = pkgs.cudnn_cudatoolkit90;
|
cudnn = pkgs.cudnn_cudatoolkit90;
|
||||||
inherit (pkgs.linuxPackages) nvidia_x11;
|
inherit (pkgs.linuxPackages) nvidia_x11;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# https://github.com/NixOS/nixpkgs/pull/26580 (Cuda definitions are backwards too)
|
||||||
|
libgpuarray = callPackage ./theano-libgpuarray.nix {
|
||||||
|
clblas = pkgs.clblas.override { inherit boost; };
|
||||||
|
cudaSupport = pkgs.config.cudaSupport or false;
|
||||||
|
inherit (pkgs.linuxPackages) nvidia_x11;
|
||||||
|
};
|
||||||
|
|
||||||
|
Theano = callPackage ./theano.nix rec {
|
||||||
|
cudaSupport = pkgs.config.cudaSupport or false;
|
||||||
|
cudnnSupport = cudaSupport;
|
||||||
|
cudatoolkit = pkgs.cudatoolkit8;
|
||||||
|
cudnn = pkgs.cudnn_cudatoolkit8;
|
||||||
|
inherit (pkgs.linuxPackages) nvidia_x11;
|
||||||
|
};
|
||||||
|
|
||||||
|
TheanoWithoutCuda = super.TheanoWithoutCuda.override {
|
||||||
|
cudaSupport = false;
|
||||||
|
cudnnSupport = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
TheanoWithCuda = super.TheanoWithCuda.override {
|
||||||
|
cudaSupport = true;
|
||||||
|
cudnnSupport = true;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
83
temporary/theano-libgpuarray.nix
Normal file
83
temporary/theano-libgpuarray.nix
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
{ stdenv
|
||||||
|
, lib
|
||||||
|
, buildPythonPackage
|
||||||
|
, fetchFromGitHub
|
||||||
|
, cmake
|
||||||
|
, cython
|
||||||
|
, numpy
|
||||||
|
, six
|
||||||
|
, nose
|
||||||
|
, Mako
|
||||||
|
, cudaSupport ? false, cudatoolkit , nvidia_x11
|
||||||
|
, openclSupport ? true, ocl-icd, clblas
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert cudaSupport -> nvidia_x11 != null
|
||||||
|
&& cudatoolkit != null;
|
||||||
|
|
||||||
|
buildPythonPackage rec {
|
||||||
|
pname = "libgpuarray";
|
||||||
|
version = "0.7.5";
|
||||||
|
name = pname + "-" + version;
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "Theano";
|
||||||
|
repo = "libgpuarray";
|
||||||
|
rev = "v${version}";
|
||||||
|
sha256 = "0zkdwjq3k6ciiyf8y5w663fbsnmzhgy27yvpxfhkpxazw9vg3l5v";
|
||||||
|
};
|
||||||
|
|
||||||
|
# requires a GPU
|
||||||
|
doCheck = false;
|
||||||
|
|
||||||
|
configurePhase = "cmakeConfigurePhase";
|
||||||
|
|
||||||
|
libraryPath = lib.makeLibraryPath (
|
||||||
|
[]
|
||||||
|
++ lib.optionals cudaSupport [ cudatoolkit.lib cudatoolkit.out nvidia_x11 ]
|
||||||
|
++ lib.optionals openclSupport ([ clblas ] ++ lib.optional (!stdenv.isDarwin) ocl-icd)
|
||||||
|
);
|
||||||
|
|
||||||
|
preBuild = ''
|
||||||
|
make -j$NIX_BUILD_CORES
|
||||||
|
make install
|
||||||
|
|
||||||
|
export NIX_CFLAGS_COMPILE="-L $out/lib -I $out/include $NIX_CFLAGS_COMPILE"
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
'';
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
rm $out/lib/libgpuarray-static.a
|
||||||
|
'' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
|
||||||
|
function fixRunPath {
|
||||||
|
p=$(patchelf --print-rpath $1)
|
||||||
|
patchelf --set-rpath "$p:$libraryPath" $1
|
||||||
|
}
|
||||||
|
|
||||||
|
fixRunPath $out/lib/libgpuarray.so
|
||||||
|
'';
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
numpy
|
||||||
|
six
|
||||||
|
Mako
|
||||||
|
];
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
cmake
|
||||||
|
cython
|
||||||
|
nose
|
||||||
|
];
|
||||||
|
|
||||||
|
meta = with stdenv.lib; {
|
||||||
|
homepage = "https://github.com/Theano/libgpuarray";
|
||||||
|
description = "Library to manipulate tensors on GPU.";
|
||||||
|
license = licenses.free;
|
||||||
|
maintainers = with maintainers; [ artuuge ];
|
||||||
|
platforms = platforms.unix;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
88
temporary/theano.nix
Normal file
88
temporary/theano.nix
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
{ stdenv
|
||||||
|
, runCommandCC
|
||||||
|
, lib
|
||||||
|
, fetchPypi
|
||||||
|
, gcc
|
||||||
|
, buildPythonPackage
|
||||||
|
, isPyPy
|
||||||
|
, pythonOlder
|
||||||
|
, isPy3k
|
||||||
|
, nose
|
||||||
|
, numpy
|
||||||
|
, scipy
|
||||||
|
, six
|
||||||
|
, libgpuarray
|
||||||
|
, cudaSupport ? false, cudatoolkit
|
||||||
|
, cudnnSupport ? false, cudnn
|
||||||
|
, nvidia_x11
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert cudnnSupport -> cudaSupport;
|
||||||
|
|
||||||
|
assert cudaSupport -> nvidia_x11 != null
|
||||||
|
&& cudatoolkit != null
|
||||||
|
&& cudnn != null;
|
||||||
|
|
||||||
|
let
|
||||||
|
wrapped = command: buildTop: buildInputs:
|
||||||
|
runCommandCC "${command}-wrapped" { inherit buildInputs; } ''
|
||||||
|
type -P '${command}' || { echo '${command}: not found'; exit 1; }
|
||||||
|
cat > "$out" <<EOF
|
||||||
|
#!$(type -P bash)
|
||||||
|
$(declare -xp | sed -e '/^[^=]\+="\('"''${NIX_STORE//\//\\/}"'\|[^\/]\)/!d')
|
||||||
|
declare -x NIX_BUILD_TOP="${buildTop}"
|
||||||
|
$(type -P '${command}') "\$@"
|
||||||
|
EOF
|
||||||
|
chmod +x "$out"
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Theano spews warnings and disabled flags if the compiler isn't named g++
|
||||||
|
cxx_compiler = wrapped "g++" "\\$HOME/.theano"
|
||||||
|
( stdenv.lib.optional cudaSupport libgpuarray_
|
||||||
|
++ stdenv.lib.optional cudnnSupport cudnn );
|
||||||
|
|
||||||
|
libgpuarray_ = libgpuarray.override { inherit cudaSupport cudatoolkit; };
|
||||||
|
|
||||||
|
in buildPythonPackage rec {
|
||||||
|
pname = "Theano";
|
||||||
|
version = "1.0.2";
|
||||||
|
|
||||||
|
disabled = isPyPy || pythonOlder "2.6" || (isPy3k && pythonOlder "3.3");
|
||||||
|
|
||||||
|
src = fetchPypi {
|
||||||
|
inherit pname version;
|
||||||
|
sha256 = "6768e003d328a17011e6fca9126fbb8a6ffd3bb13cb21c450f3e724cca29abde";
|
||||||
|
};
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
substituteInPlace theano/configdefaults.py \
|
||||||
|
--replace 'StrParam(param, is_valid=warn_cxx)' 'StrParam('\'''${cxx_compiler}'\''', is_valid=warn_cxx)' \
|
||||||
|
--replace 'rc == 0 and config.cxx != ""' 'config.cxx != ""'
|
||||||
|
'' + stdenv.lib.optionalString cudaSupport ''
|
||||||
|
substituteInPlace theano/configdefaults.py \
|
||||||
|
--replace 'StrParam(get_cuda_root)' 'StrParam('\'''${cudatoolkit}'\''')'
|
||||||
|
'' + stdenv.lib.optionalString cudnnSupport ''
|
||||||
|
substituteInPlace theano/configdefaults.py \
|
||||||
|
--replace 'StrParam(default_dnn_base_path)' 'StrParam('\'''${cudnn}'\''')'
|
||||||
|
'';
|
||||||
|
|
||||||
|
preCheck = ''
|
||||||
|
mkdir -p check-phase
|
||||||
|
export HOME=$(pwd)/check-phase
|
||||||
|
'';
|
||||||
|
doCheck = false;
|
||||||
|
# takes far too long, also throws "TypeError: sort() missing 1 required positional argument: 'a'"
|
||||||
|
# when run from the installer, and testing with Python 3.5 hits github.com/Theano/Theano/issues/4276,
|
||||||
|
# the fix for which hasn't been merged yet.
|
||||||
|
|
||||||
|
# keep Nose around since running the tests by hand is possible from Python or bash
|
||||||
|
checkInputs = [ nose ];
|
||||||
|
propagatedBuildInputs = [ numpy numpy.blas scipy six libgpuarray_ ];
|
||||||
|
|
||||||
|
meta = with stdenv.lib; {
|
||||||
|
homepage = http://deeplearning.net/software/theano/;
|
||||||
|
description = "A Python library for large-scale array computation";
|
||||||
|
license = licenses.bsd3;
|
||||||
|
maintainers = with maintainers; [ maintainers.bcdarwin ];
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user