/goldeneye

GoldenEye is a functional simulator with fault injection capabilities for common and emerging numerical formats, implemented for the PyTorch deep learning framework.

Primary LanguagePythonMIT LicenseMIT

Goldeneye

BackgroundUsageCodeAcknowledgementsCitationLicense

Background

GoldenEye is a functional simulator with fault injection capabilities for common and emerging numerical formats, implemented for the PyTorch deep learning framework. GoldenEye provides a unified framework for numerical format evaluation of DNNs, including traditional number systems such as fixed and floating point, as well as recent DNN-inspired formats such as block floating point and AdaptivFloat. Additionally, GoldenEye enables single- and multi- bit flips at various logical and functional points during a value’s lifetime for resiliency analysis, including for the first time attention to numerical values’ hardware metadata. GoldenEye is an easy-to-use, extensible, versatile, and fast tool for dependability research and future DNN accelerator design.

Usage

Take a look at our documentation here.

Installing

Ubuntu with Sudo Privileges

  1. Recursively clone the goldeneye repository.
git clone --recurse-submodules git@github.com:ma3mool/goldeneye.git
  1. Download ninja-build which is needed for qtorch.
sudo apt install ninja-build
  1. Download the other project dependencies. Please make sure you are inside the goldeneye folder when applying this command.
pip install -r requirements.txt
  1. Setup environment variable (replace with the directory where the imagenet dataset is downloaded).
ML_DATASETS=/dir/to/imagenet/

Docker

  1. Recursively clone the goldeneye repository.
git clone --recurse-submodules git@github.com:ma3mool/goldeneye.git
  1. Pull the goldeneye docker image and rename it to simply the next steps
docker pull goldeneyetool/goldeneye:latest
docker image tag goldeneyetool/goldeneye goldeneye
  1. Within the goldeneye folder, run the shell on the pulled docker image. Make sure to replace [/path/to/imagenet] with the actual path to your downloaded imagenet dataset.
cd goldeneye
docker run -ti 
    --mount type=bind,source=`pwd`/src/,target=/src 
    --mount type=bind,source=`pwd`/val/,target=/val 
    --mount type=bind,source=`pwd`/scripts/,target=/scripts 
    --mount type=bind,source=[/path/to/imagenet],target=/datasets/imagenet 
    goldeneye

Testing

pytest val/test_num_sys.py

Code

Structure

The scripts folder includes wrappers around the goldeneye framework to simplify its use. The src folder contains all of the goldeneye core logic such as number system implementation and error injection routines. The val folder is used for unit-testing the code. You can run it using pytest to check that the installation process was successful.

Acknowledgements

  • Tarek Aloui (Harvard)
  • David Brooks (Harvard)
  • Abdulrahman Mahmoud (Harvard)
  • Joshua Park (Harvard)
  • Thierry Tambe (Harvard)
  • Gu-Yeon Wei (Harvard)

Citation

If you use or reference Goldeneye, please cite:

@INPROCEEDINGS{GoldeneyeMahmoudTambeDSN2022,
author={A. {Mahmoud} and T. {Tambe} and T. {Aloui} and D. {Brooks} and G. {Wei}},
booktitle={2022 52nd Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN)},
title={GoldenEye:  A Platform for Evaluating Emerging Data Formats in DNN Accelerators},
year={2022},
}

License

MIT License