Skip to content

Latest commit

 

History

History
71 lines (61 loc) · 7.69 KB

comparison.rst

File metadata and controls

71 lines (61 loc) · 7.69 KB

Comparison with Other Frameworks

A table for quick comparison

This table compares Chainer with other popular deep learning frameworks. We hope it helps you to choose an appropriate framework for the demand.

Note

This chart may be out-dated, since the developers of Chainer do not perfectly follow the latest development status of each framework. Please report us if you find an out-dated cell. Requests for new comparison axes are also welcome.

Chainer Theano-based Torch7 Caffe
Specs

Scripting

-----------------------------+

Net definition language

-----------------------------+

Define-by-Run scheme

-----------------------------+

CPU Array backend

-----------------------------+

GPU Array backend

Python

-------------------+

Python

-------------------+

Y

-------------------+

NumPy

-------------------+

PyCUDA1

Python

------------------------+

Python

------------------------+

------------------------+

NumPy

------------------------+

CudaNdarray2

LuaJIT

-------------------+

LuaJIT

-------------------+

-------------------+

Tensor

-------------------+

CudaTensor

Python

----------------------------------------------------+

Protocol Buffers

----------------------------------------------------+

----------------------------------------------------+

----------------------------------------------------+

NNs

Reverse-mode AD

-----------------------------+

Basic RNN support

-----------------------------+

Variable-length loops

-----------------------------+

Stateful RNNs3

-----------------------------+

Per-batch architectures

Y

-------------------+

Y

-------------------+

Y

-------------------+

Y

-------------------+

Y

Y

------------------------+

Y

------------------------+

Y (scan)

------------------------+

------------------------+

Y

-------------------+

Y (nnx)

-------------------+

-------------------+

Y4

-------------------+

Y

----------------------------------------------------+

#2033

----------------------------------------------------+

----------------------------------------------------+

----------------------------------------------------+

Perf

CUDA support

-----------------------------+

cuDNN support

-----------------------------+

FFT-based convolution

-----------------------------+

CPU/GPU generic coding5

-----------------------------+

Multi GPU (data parallel)

-----------------------------+

Multi GPU (model parallel)

Y

-------------------+

Y

-------------------+

-------------------+

6

-------------------+

Y

-------------------+

Y

Y

------------------------+

Y

------------------------+

Y

------------------------+

7

------------------------+

------------------------+

Y

-------------------+

Y (cudnn.torch)

-------------------+

Y (fbcunn)

-------------------+

Y

-------------------+

Y (fbcunn)

-------------------+

Y (fbcunn)

Y

----------------------------------------------------+

Y

----------------------------------------------------+

#544

----------------------------------------------------+

----------------------------------------------------+

Y

----------------------------------------------------+

Misc

Type checking

-----------------------------+

Model serialization

-----------------------------+

Caffe reference model

Y

-------------------+

Y (pickle)

-------------------+

Y

Y

------------------------+

Y (pickle)

------------------------+

8

Y

-------------------+

Y

-------------------+

Y (loadcaffe)

N/A

----------------------------------------------------+

Y

----------------------------------------------------+

Y

Benchmarks

We are preparing for the benchmarks.


  1. We are preparing for changing the GPU array backend to CuPy. It enables us to write one code for both CPU and GPU arrays.

  2. They are also developing libgpuarray

  3. Stateful RNN is a type of RNN implementation that maintains states in the loops. It should enable us to use the states arbitrarily to update them.

  4. Also available in the Torch RNN package <https://github.com/Element-Research/rnn>

  5. This row shows whether each array API supports unified codes for CPU and GPU.

  6. We are preparing for changing the GPU array backend to CuPy. It enables us to write one code for both CPU and GPU arrays.

  7. The array backend of Theano does not have compatible interface with NumPy, though most users write code on theano variables, which is generic for CPU and GPU.

  8. Depending on the frameworks.