Chainer

Chainer – це DL фреймворк, написаний на python, який націлений на гнучкість [Chainer] [Tokui 2015]. Він надає API-інтерфейси автоматичного диференціювання, засновані на підході “define-by-run”, тобто динамічні обчислювальні графи, а також об’єктно-орієнтовані високорівневі API для побудови і навчання NN.

Відмінність від інших відомих DL-фреймворків, таких як Tensorflow або Caffe, полягає в тому, що Chainer створює NN динамічно. Він також підтримує CUDA/cuDNN з використанням CuPy (NumPy + CUDA = CuPy) для високопродуктивних тренувань і інференсу. Основна команда розробників Chainer працює в “Preferred Networks, Inc.” – стартапі ML з інженерами в основному з Токійського університету. 

Chainer підтримує архітектури CNN, RNN DL. DL фреймворки зазвичай будуються на основі схеми “Define-and-Run”, тобто на початку будується обчислювальний граф, а мережа статично визначається і фіксується. Конструкція Chainer заснована на принципі “Define-by-Run”, тобто мережа не визначена на початку, а визначається динамічно на льоту (тобто динамічний обчислювальний граф або DCG). Chainer містить бібліотеки для промислового застосування, наприклад ChainerCV (бібліотека для DL в Computer Vision), ChainerRL (бібліотека для глибокого навчання, побудована на основі Chainer), ChainerMN (масштабований багатовузловий розподілений DL з Chainer, де лінійна швидкість масштабується до 128 графічних процесорів) і т. д. Intel Chainer з MKL-DNN бекендом приблизно В 8.35 рази швидше, ніж NumPy бекенд (згідно з тестами Chainer).

Сильні сторони:

  • Динамічний обчислювальний граф (Define-by-Run).
  • Надає бібліотеки для промислових додатків.
  • Сильні інвестори, такі як Toyota, FANUC, NTT та ін.

Слабкі сторони:

  • Немає підтримки для градієнтів вищого порядку.
  • DCG генерується кожен раз також для фіксованих мереж, але не має оптимізації навіть для статичної частини графіків.