# MXNet Architecture

This design document contains notes that are relevant to the MXNet system design and deep learning libraries in general. We believe that open sourcing this system design note can help general audiences understand the  motivations, benefits and drawbacks of our design choices. This will help deep learning practitioners as well as builders of other deep learning systems.

## Deep Learning System Design Concepts

In this section, we will describe general design concepts of Deep Learning systems. We will mainly focus on following 3 areas influencing the design and architecture of a Deep Learning System.
1. Abstraction
2. Optimization
3. Trade offs


&nbsp;


&nbsp;

Refer below sections for more details
* [Programming Models for Deep Learning](http://mxnet.io/architecture/program_model.html)
* [Dependency Engine for Deep Learning](http://mxnet.io/architecture/note_engine.html)
* [Optimizing the Memory Consumption in Deep Learning](http://mxnet.io/architecture/note_memory.html)
* [Efficient Data Loading Module for Deep Learning](http://mxnet.io/architecture/note_data_loading.html)
* [Survey of RNN Interface](http://mxnet.io/architecture/rnn_interface.html)

## MXNet System Design and Architecture

In this section, we will describe MXNet System architecture and various components.
* [MXNet System Overview](http://mxnet.io/architecture/overview.html)
* [How to read the code](http://mxnet.io/architecture/read_code.html)
* [Develop and hack MXNet](http://mxnet.io/how_to/develop_and_hack.html)
* [How to contribute to MXNet](http://mxnet.io/community/contribute.html)
