Deep-learning Python environment with Nix

Getting the deep learning environment with all NVidia libaries set up is a bit fiddly. Thankfully I can lean on Nix for that as well.

I have a package definition like this (dl.nix):

{ python, pythonPackages, gcc, cudatoolkit75, cudnn5_cudatoolkit75 }:

python.buildEnv.override {
  extraLibs = with pythonPackages; [
    (Keras.override { propagatedBuildInputs = [ Theano-cuda six pyyaml future ];  })
    ipython
    notebook
  ];
  extraPaths = [ gcc cudatoolkit75 cudnn5_cudatoolkit75 ];
  ignoreCollisions = true;
}

(Note that this needs this branch in your nixpkgs. I’m hoping it’ll be merged soon.)

With that in place it’s trivial to drop into a nix-shell that then has a python to run your nix code:

$ nix-shell -p "callPackage ./dl.nix {}"

I’m also still on Theano rather than Tensorflow because I find it easier to debug. Tensorflow available in nixpkgs though if you prefer that.