Skip to content

Reverse-mode Automatic Differentiation for Artificial Neural Networks

Notifications You must be signed in to change notification settings

kirillov-n-s/radann

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Radann

Radann is (hopefully going to be, some day) a modern C++ library for multidimentional array handling and automatic differentiation, implemented using smart expression templates with GPU parallelism and calls to optimized CUDA libraries.

As for now, it is a university coursework with a lot of unfinished and "just working" stuff that is subject to change.

Possible improvements:

  • Engine
    • variadic argument tuples instead of unary & binary
    • memory pooling (minimize alocations)
    • plans and delayed execution (minimize kernel launches)
  • Autodiff
    • tape context management (start, stop, pause, multiple tapes)
    • differentiated batch operations (like: matrix + column-vector)
    • differentiable/non-differentiable marker on operations
  • Array
    • comparison, boolean specialization and operations
    • conditional access, dimension skip and slicing
    • concatenation
    • format choice (row-/column-major)
  • Operations
    • cuBLAS transpose (possibly lazy w.r.t. matmul)
    • reduce by dimension
    • custom reduce kernel instead of thrust::reduce_by_key (shared memory block reduce)
    • cuRAND state caching
    • cuDNN convolution, attention, etc.
    • cuSOLVER matrix inverse

The library is contained in radann folder and only needs radann.h to be included to use. Requires C++17 and CUDA Toolkit (developed on 11.6). The repository also contains a neural network example for MNIST digit recognition in main.cu.

About

Reverse-mode Automatic Differentiation for Artificial Neural Networks

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages