Supplementary GitHub Repository containing code to reproduce results from Empirical Metal-Oxide RRAM Device Endurance and Retention Model for Deep Learning Simulations, published in IOP Semiconductor Science and Technology here.
An accepted version of the manuscript is openly-accessible here.
Memristive devices including Resistive Random Access Memory (RRAM) cells are promising nanoscale low-power components projected to achieve significant improvement in power and speed of Deep Learning (DL) accelerators, if structured in crossbar architectures. However, these devices possess non-ideal endurance and retention properties, which should be modeled efficiently. In this paper, we propose a novel generalized Metal-Oxide RRAM endurance and retention model for use in large-scale DL simulations. To the best of our knowledge, the proposed model is the first to unify retention-endurance modeling while taking into account time, energy, SET-RESET cycles, device size, and temperature. We compare the model to state-of-the-art, demonstrate its versatility by applying it to experimental data from fabricated devices. Furthermore, we use the model for CIFAR-10 dataset classification using a large-scale Deep Memristive Neural Network (DMNN) implementing the MobileNetV2 architecture. Our results show that, even when ignoring other device non-idealities, retention and endurance losses significantly affect the performance of DL networks. Our proposed model and its DL simulations are made publicly available.
We provide a set of Python and MATLAB scripts to reproduce results from Figures 2, 3, 4 and 5. A Python interpreter (⩾3.6), the pip package manager, and MATLAB are required. All other Python dependencies can be installed using pip install -r requirements.txt
.
- Results from Figure 2A can be reproduced using plot_2A.py.
- Results from Figure 2B can be reproduced using plot_2B.py.
- Results from Figure 2C can be reproduced using plot_2C.py.
- Results from Figure 2D can be reproduced using plot_2D.py.
- Results from Figure 3A can be reproduced using plot_3A.py.
- Results from Figure 3B can be reproduced using plot_3B.py.
- Results from Figure 3C can be reproduced using plot_3C.py.
- Results from Figure 3D can be reproduced using plot_3D.py.
- Results from Figure 4 can be reproduced using plot_4.py.
- Results from Figure 6A can be reproduced using train_mobilenetv2.py, simulate_6A.py, and plot_6A.m.
- Results from Figure 6B can be reproduced using train_mobilenetv2.py, simulate_6B.py, and plot_6B.m.
- Results from Figure 6C can be reproduced using train_mobilenetv2.py, simulate_6C.py, and plot_6C.m.
- Results from Figure 6D can be reproduced using train_mobilenetv2.py, simulate_6D.py, and plot_6D.m.
- Results from Figure 6E can be reproduced using train_mobilenetv2.py, simulate_6E.py, and plot_6E.m.
- Results from Figure 6F can be reproduced using train_mobilenetv2.py, simulate_6F.py, and plot_6F.m.
- Results from Figure 6G can be reproduced using train_mobilenetv2.py, simulate_6G.py, and plot_6G.m.
- Results from Figure 6H can be reproduced using train_mobilenetv2.py, simulate_6H.py, and plot_6H.m.
Experimental data from new devices can be fit using helper methods in GeneralModel
defined in GeneralModel.py.
All code is licensed under the GNU General Public License v3.0. Details pertaining to this are avaliable at: https://www.gnu.org/licenses/gpl-3.0.en.html