Shape and Type Inference Part1

Summary:
This is a bit large diff, sorry about it. It includes basic shape and type inference functionality, based on YQ's Schema scaffolding. I added some helper functions to make it easier to write simple translations.

Bigger refactoring was needed for ConvPoolBase so that we could use the shape inference already there in the schema.

I annotated enough operators to be able to infer forward-pass of shapes for basic convnet, and added test for that. I intend to bootcamp some annotations and annotate enough to handle Resnets fully. Need to think about gradients, if they could be annotated in an easier way.

Only shapes are now exposed to Python, types will follow later. Also the inference is not called yet anywhere but unit test.

Also I am not sure if everything is in the best location in the code, but shouldn't be hard to move stuff around.

Reviewed By: dzhulgakov

Differential Revision: D4436818

fbshipit-source-id: eebee5937ccc9ac09c245465302388a1fae6933c
46 files changed
tree: 848f5739d0570cd2ec50c1b784d412d4f88d9f4c
  1. .travis/
  2. caffe/
  3. caffe2/
  4. cmake/
  5. docs/
  6. scripts/
  7. third_party/
  8. .Doxyfile
  9. .gitignore
  10. .gitmodules
  11. .travis.yml
  12. CMakeLists.txt
  13. LICENSE
  14. Makefile
  15. README.md
README.md

Caffe2

Caffe2 is a deep learning framework made with expression, speed, and modularity in mind. It is an experimental refactoring of Caffe, and allows a more flexible way to organize computation.

License and Citation

Caffe2 is released under the BSD 2-Clause license.

Building Caffe2

Build Status

git clone --recursive https://github.com/bwasti/caffe2.git
cd caffe2

OS X

brew install automake protobuf
mkdir build && cd build
cmake ..
make

Ubuntu

sudo apt-get install libprotobuf-dev protobuf-compiler libatlas-base-dev libgoogle-glog-dev libgtest-dev liblmdb-dev libleveldb-dev libsnappy-dev python-dev python-pip libiomp-dev libopencv-dev libpthread-stubs0-dev cmake
sudo pip install numpy
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_8.0.44-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1404_8.0.44-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
sudo apt-get install git

CUDNN_URL="http://developer.download.nvidia.com/compute/redist/cudnn/v5.1/cudnn-8.0-linux-x64-v5.1.tgz" &&
curl -fsSL ${CUDNN_URL} -O &&
sudo tar -xzf cudnn-8.0-linux-x64-v5.1.tgz -C /usr/local &&
rm cudnn-8.0-linux-x64-v5.1.tgz &&
sudo ldconfig

mkdir build && cd build
cmake ..
make

Python support

To run the tutorials you'll need ipython-notebooks and matplotlib, which can be installed on OS X with:

brew install matplotlib --with-python3
pip install ipython notebook

Build status (known working)

Ubuntu 14.04 (GCC)

  • [x] Default CPU build
  • [x] Default GPU build

OS X (Clang)

  • [x] Default CPU build
  • [x] Default GPU build

Options (both Clang and GCC)

  • [ ] Nervana GPU
  • [ ] ZMQ
  • [ ] RocksDB
  • [ ] MPI
  • [ ] OpenMP
  • [x] No LMDB
  • [x] No LevelDB
  • [x] No OpenCV

BLAS

  • [x] OpenBLAS
  • [x] ATLAS
  • [ ] MKL

Other

  • [x] CMake 2.8 support
  • [x] List of dependencies for Ubuntu 14.04
  • [x] List of dependencies for OS X