Skip to content

Commit

Permalink
caffe2: init at 0.8.1 (#34956)
Browse files Browse the repository at this point in the history
  • Loading branch information
yuriaisaka authored and joachifm committed Feb 16, 2018
1 parent a5ebf4a commit f8c4890
Show file tree
Hide file tree
Showing 3 changed files with 202 additions and 0 deletions.
140 changes: 140 additions & 0 deletions pkgs/development/libraries/science/math/caffe2/default.nix
@@ -0,0 +1,140 @@
{ stdenv, lib, config, fetchFromGitHub
, cmake
, glog, google-gflags, gtest
, protobuf, snappy
, python, future, six, python-protobuf, numpy, pydot
, eigen3
, doxygen
, useCuda ? (config.cudaSupport or false), cudatoolkit ? null
, useCudnn ? (config.cudnnSupport or false), cudnn ? null
, useOpenmp ? false, openmp ? null
, useOpencv3 ? true, opencv3 ? null
, useLeveldb ? false, leveldb ? null
, useLmdb ? true, lmdb ? null
, useRocksdb ? false, rocksdb ? null
, useZeromq ? false, zeromq ? null
, useMpi ? false, mpi ? null
# TODO: distributed computations
#, useGloo ? false
#, useNccl ? false
#, useNnpack ? false
}:

assert useCuda -> cudatoolkit != null;
assert useCudnn -> (useCuda && cudnn != null);
assert useOpencv3 -> opencv3 != null;
assert useLeveldb -> leveldb != null;
assert useLmdb -> lmdb != null;
assert useRocksdb -> rocksdb != null;
assert useZeromq -> zeromq != null;
assert useMpi -> mpi != null;

let
# Third party modules that caffe2 holds as git submodules.
# Download them and create symlinks from caffe2/third_party.
installExtraSrc = extra: ''
rmdir "third_party/${extra.dst}"
ln -s "${extra.src}" "third_party/${extra.dst}"
'';

cub = {
src = fetchFromGitHub rec {
owner = "NVlabs";
repo = "cub";
rev = "v1.7.4";
sha256 = "0ksd5n1lxqhm5l5cd2lps4cszhjkf6gmzahaycs7nxb06qci8c66";
};
dst = "cub";
};

pybind11 = {
src = fetchFromGitHub {
owner = "pybind";
repo = "pybind11";
rev = "86e2ad4f77442c3350f9a2476650da6bee253c52";
sha256 = "05gi58dirvc8fgm0avpydvidzsbh2zrzgfaq671ym09f6dz0bcgz";
};
dst = "pybind11";
};
in

stdenv.mkDerivation rec {
name = "caffe2-${version}";
version = "0.8.1";
src = fetchFromGitHub {
owner = "caffe2";
repo = "caffe2";
rev = "v${version}";
sha256 = "18y7zjc69j6n5642l9caddl641b0djf3pjn4wacdsc1wk1jiyqk8";
};

nativeBuildInputs = [ cmake doxygen gtest ];
outputs = [ "bin" "out" ];
propagatedBuildOutputs = [ ]; # otherwise propagates out -> bin cycle

buildInputs = [ glog google-gflags protobuf snappy eigen3 ]
++ lib.optional useCuda cudatoolkit
++ lib.optional useCudnn cudnn
++ lib.optional useOpenmp openmp
++ lib.optional useOpencv3 opencv3
++ lib.optional useLeveldb leveldb
++ lib.optional useLmdb lmdb
++ lib.optional useRocksdb rocksdb
++ lib.optional useZeromq zeromq
;
propagatedBuildInputs = [ numpy future six python-protobuf pydot ];

patches = lib.optional stdenv.cc.isClang [ ./update_clang_cvtsh_bugfix.patch ];

cmakeFlags = [ ''-DBUILD_TEST=OFF''
''-DBUILD_PYTHON=ON''
''-DUSE_CUDA=${if useCuda then ''ON''else ''OFF''}''
''-DUSE_OPENMP=${if useOpenmp then ''ON''else ''OFF''}''
''-DUSE_OPENCV=${if useOpencv3 then ''ON''else ''OFF''}''
''-DUSE_MPI=${if useMpi then ''ON''else ''OFF''}''
''-DUSE_LEVELDB=${if useLeveldb then ''ON''else ''OFF''}''
''-DUSE_LMDB=${if useLmdb then ''ON''else ''OFF''}''
''-DUSE_ROCKSDB=${if useRocksdb then ''ON''else ''OFF''}''
''-DUSE_ZMQ=${if useZeromq then ''ON''else ''OFF''}''
''-DUSE_GLOO=OFF''
''-DUSE_NNPACK=OFF''
''-DUSE_NCCL=OFF''
''-DUSE_REDIS=OFF''
''-DUSE_FFMPEG=OFF''
]
++ lib.optional useCuda [
''-DCUDA_TOOLKIT_ROOT_DIR=${cudatoolkit}''
''-DCUDA_FAST_MATH=ON''
''-DCUDA_HOST_COMPILER=${cudatoolkit.cc}/bin/gcc''
];

preConfigure = ''
${installExtraSrc cub}
${installExtraSrc pybind11}
# XXX hack
export NIX_CFLAGS_COMPILE="-I ${eigen3}/include/eigen3/ $NIX_CFLAGS_COMPILE"
'';

postInstall = ''
moveToOutput "bin" "$bin"
mkdir -p $out/lib/${python.libPrefix}
ln -s $out/ $out/${python.sitePackages}
'';

doCheck = false;
enableParallelBuilding = true;

meta = {
homepage = https://caffe2.ai/;
description = "A new lightweight, modular, and scalable deep learning framework";
longDescription = ''
Caffe2 aims to provide an easy and straightforward way for you to experiment
with deep learning and leverage community contributions of new models and
algorithms. You can bring your creations to scale using the power of GPUs in the
cloud or to the masses on mobile with Caffe2's cross-platform libraries.
'';
platforms = with stdenv.lib.platforms; linux ++ darwin;
license = stdenv.lib.licenses.asl20;
maintainers = with stdenv.lib.maintainers; [ yuriaisaka ];
};
}
@@ -0,0 +1,55 @@
diff --git a/caffe2/perfkernels/cvtsh_ss_bugfix.h b/caffe2/perfkernels/cvtsh_ss_bugfix.h
index bd06681..00172b7 100644
--- a/caffe2/perfkernels/cvtsh_ss_bugfix.h
+++ b/caffe2/perfkernels/cvtsh_ss_bugfix.h
@@ -1,10 +1,36 @@
+/**
+ * Copyright (c) 2016-present, Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
#pragma once

-#if defined(__APPLE__) && (__clang_major__ < 8)
+// Apple clang was fixed in 8.1
+#if defined(__apple_build_version__) && ((__clang_major__ < 8) || ((__clang_major__ == 8) && (__clang_minor__ < 1)))
+#define __APPLE_NEED_FIX 1
+#endif
+
+// Regular clang was fixed in 3.9
+#if defined(__clang__) && (__clang_major__ < 4) && (__clang_minor__ < 9)
+#define __CLANG_NEED_FIX 1
+#endif
+
+#if __APPLE_NEED_FIX || __CLANG_NEED_FIX

#include <emmintrin.h>

-// This version of apple clang has a bug that _cvtsh_ss is not defined, see
+// This version of clang has a bug that _cvtsh_ss is not defined, see
// https://reviews.llvm.org/D16177
static __inline float
__attribute__((__always_inline__, __nodebug__, __target__("f16c")))
@@ -15,7 +41,10 @@ _cvtsh_ss(unsigned short a)
return r[0];
}

-#endif // defined(__APPLE__) && (__clang_major__ < 8)
+#endif // __APPLE_NEED_FIX || __CLANG_NEED_FIX
+
+#undef __APPLE_NEED_FIX
+#undef __CLANG_NEED_FIX

#ifdef _MSC_VER

7 changes: 7 additions & 0 deletions pkgs/top-level/all-packages.nix
Expand Up @@ -19553,6 +19553,13 @@ with pkgs;
cudnnSupport = cudaSupport;
};

caffe2 = callPackage ../development/libraries/science/math/caffe2 {
eigen3 = eigen3_3;
inherit (python3Packages) python future six numpy pydot;
protobuf = protobuf3_1;
python-protobuf = python3Packages.protobuf3_1;
};

cntk = callPackage ../applications/science/math/cntk rec {
cudaSupport = pkgs.config.cudaSupport or false;
cudnnSupport = cudaSupport;
Expand Down

0 comments on commit f8c4890

Please sign in to comment.