Repository files navigation

Deep Learning Library Testing via Effective Model Generation

This is the implementation repository of our ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Description

LEMON is a novel approach to testing DL libraries by generating effective DL models via guided mutation. The goal is to test DL libraries as sufficiently as possible by exploring unused library code or different usage ways of library code. We further propose a heuristic strategy in LEMON to guide the process of model generation so as to generate models that can amplify the inconsistent degrees for real bugs. In this way, it is clearer to distinguish real bugs and uncertain impacts in DL libraries. We conducted an empirical study to evaluate the effectiveness of LEMON based on 20 release versions of TensorFlow,Theano,CNTK, and MXNet. LEMON detected 24 new bugs in the latest release versions of these libraries. The results also demonstrate that the models generated by LEMON outperform existing models and the models generated without guidance in terms of the number of unique bugs/inconsistencies and the achieved inconsistent degrees.

Datasets/Models/Libraries

Datasets/Models

We used 12 popular DL models based on 6datasets including both images and sequential data, as the initial seed models in LEMON, which have been widely used in many existing studies.

ModelDatasetRelated link1
AlexNetCIFAR-10alexnet-cifar-10-keras-jupyter
LeNet5Fashion-MNISTfashion_mnist_keras
LeNet5MNISTlenet5-mnist
LSTM-1Sine-WaveLSTM-Neural-Network-for-Time-Series-Prediction
LSTM-2Stock-PriceStockPricesPredictionProject
ResNet50ImageNet2Keras applications tutorial3
MobileNetV1ImageNet2Keras applications tutorial3
InceptionV3ImageNet2Keras applications tutorial3
DenseNet121ImageNet2Keras applications tutorial3
VGG16ImageNet2Keras applications tutorial3
VGG19ImageNet2Keras applications tutorial3
XceptionImageNet2Keras applications tutorial3

1: The first 5 models are trained using existing repositories while the last 7 models in ImageNet are obtained directly using the API provided by Keras.

2: We sampled 1500 images from ImageNet and you could obtain them from sampled_imagenet-1500.npz. You can also sample your own images from the ImageNet validation dataset.

3: Keras applications tutorial can be found in: https://keras.io/api/applications/

4: All model files and two regression dataset and ImageNet dataset we sampled can be access in OneDrive

NOTE: LEMON use 6 dataset, and 3 of them could be directly obtained from their homepages ( CIFAR-10, Fashion-MNIST, MNIST ) or accessed by Keras API. We only upload the ImageNet dataset sampled by LEMON and two datasets collected from GitHub.

In dataset.zip, there are 3 files:

sinewave.csv: dataset of LSTM-1 DIS.csv : dataset of LSTM-2 sampled_imagenet-1500.npz: dataset samples by LEMON from ImageNet

In origin_model.zip, there are 12 models used in LEMON.

Libraries

We used 20 release versions of 4 widely-used DL libraries, i.e., TensorFlow, CNTK,Theano, and MXNet, as subjects to constructed five experiments (indexed E1 to E5 in Table) to conduct differential testing.

We share the link of each library and docker image used in LEMON.

Experiment IDTensorflowTheanoCNTKMXNetCUDA
E11.14.01.0.42.7.01.5.110.1
E21.13.11.0.32.6.01.4.110.0
E31.12.01.0.22.5.11.3.19.0
E41.11.01.0.12.4.01.2.19.0
E51.10.01.0.02.3.11.1.09.0

* All libraries should be GPU-supported version

Reproducibility

Environment

We conducted 5 experiments in LEMON of which the library and CUDA version information are as described above. In order to facilitate other researchers to reproduce LEMON, we provide a docker image for the E1 experiment. It can be easily obtained by the following command. (Note: nvidia-docker2 is required!)

Step 0: Please Install nvidia-docker2. You can use this instruction to install it.

Step 1: Clone the repository. Download the dataset and models from OneDrive. Save the code and unzip datasets and models to /your/local/path/ , e.g. /your/local/path/origin_model and /your/local/path/dataset. (/your/local/path/ should be the absolute path on your server, e.g. /home/user_xxx/)

Step 2: Using the following command to pull the docker image we released for E1 and create a container for it.

docker pull yenming1227/lemon:latest
docker run --runtime=nvidia -it -v /your/local/path/:/data yenming1227/lemon:latest /bin/bash

Then you will enter a container.(Remember to change /your/local/path/ to the real path! ^_^)

Note: If your server is using http proxy, you should configure proxy in the container just as you did in your server before

Step 3: Create five virtual environments as shown below in your docker container.

Note: Please copy the installation command line by line to prevent some commands from being skipped.

# tensorflow
conda create -n tensorflow python=3.6
source activate tensorflow
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate
# theano
conda create -n theano python=3.6
source activate theano
pip install -r lemon_requirements.txt
conda install pygpu=0.7.6
pip install keras==2.2.4
pip install theano==1.0.4
source deactivate
# cntk
conda create -n cntk python=3.6
source activate cntk
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install cntk-gpu==2.7
source deactivate
# mxnet
conda create -n mxnet python=3.6
source activate mxnet
pip install -r lemon_requirements.txt
pip install keras-mxnet==2.2.4.2
pip install mxnet-cu101==1.5.1.post0
source deactivate
# default lemon python
conda create -n lemon python=3.6
source activate lemon
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate

Redis Startup

LEMON uses redis to store intermediate outputs and exchange data between different processes. We have installed redis in our docker image, you can start it with the following command:

cd /root/redis-4.0.8/src
./redis-server ../redis.conf

Running LEMON

The LEMON artifacts are well organized, and researchers can simply run LEMON with the following command.

Note: We conducted five large scale experiments (generating 100 mutants for each of the 12 initial models and analyzing inconsistencies on 1500 inputs and locating bugs) and you can reproduce the bugs reported in LEMON by running tool with experiments.conf. However, it could not be completed within 48 hours. Therefore, we provide a demo run, which can be completed within 1 hour if you running the tool with demo.conf.

cd /LEMON
git pull source activate lemon

We really recommend you use git pull to update LEMON to the latest version.

Mutation:

python -u -m run.mutation_executor demo.conf

The above command shows how to generate mutants and calculating inconsistencies in LEMON. demo.conf is the configuration file we provided for demo run.

Localization:

python -u -m run.localization_executor demo.conf

This command shows the way to perform localization in LEMON. The final bug reports will be stored in path /data/lemon_outputs/bug_list.txt

Extension

LEMON also supports researchers to switch to other models and datasets. You only need to focus on the code snippets of the data processing part in DataUtils.get_data_by_exp in scripts/tools/utils.py.

# TODO: Add your own data preprocessing here
# Note: The returned inputs should be preprocessed and labels should decoded as one-hot vectors which could be directly feed in model. Both of them should be returned in batch, e.g. shape like (1500,28,28,1) and (1500,10)
# # elif 'xxx' in exp:
# x_test, y_test = get_your_data(dataset_dir)

Besides, you should name your model file in format NetworkName-DatasetName_origin.h5, e.g. mobilenet.1.00.224-imagenet_origin.h5.

Note: _ and - can't be shown in NetworkName. You can replace them with .

For example , changing mobilenet_1.00_224-imagenet_origin.h5 to mobilenet.1.00.224-imagenet_origin.h5.

Citation

Please cite our paper if this work is helpful to you.

@inproceedings{DBLP:conf/sigsoft/WangYCLZ20,
author = {Zan Wang and
Ming Yan and
Junjie Chen and
Shuang Liu and
Dongdi Zhang},
title = {Deep learning library testing via effective model generation},
booktitle = {{ESEC/SIGSOFT} {FSE}},
pages = {788--799},
publisher = {{ACM}},
year = {2020}
}

Contact

Authors information:

NameEmail AddressGithub id
Zan Wangwangzan@tju.edu.cntjuwangzan
Ming Yanyanming@tju.edu.cnJacob-yen
Junjie Chen *junjiechen@tju.edu.cnJunjieChen
Shuang Liushuang.liu@tju.edu.cnAbigailLiu
Dongdi Zhangzhangdongdi@tju.edu.cnDandy-John

* corresponding author

About

This is the implement repository of our upcoming ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Resources

Stars

56 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Deep Learning Library Testing via Effective Model Generation

This is the implementation repository of our ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Description

LEMON is a novel approach to testing DL libraries by generating effective DL models via guided mutation. The goal is to test DL libraries as sufficiently as possible by exploring unused library code or different usage ways of library code. We further propose a heuristic strategy in LEMON to guide the process of model generation so as to generate models that can amplify the inconsistent degrees for real bugs. In this way, it is clearer to distinguish real bugs and uncertain impacts in DL libraries. We conducted an empirical study to evaluate the effectiveness of LEMON based on 20 release versions of TensorFlow,Theano,CNTK, and MXNet. LEMON detected 24 new bugs in the latest release versions of these libraries. The results also demonstrate that the models generated by LEMON outperform existing models and the models generated without guidance in terms of the number of unique bugs/inconsistencies and the achieved inconsistent degrees.

Datasets/Models/Libraries

Datasets/Models

We used 12 popular DL models based on 6datasets including both images and sequential data, as the initial seed models in LEMON, which have been widely used in many existing studies.

ModelDatasetRelated link1
AlexNetCIFAR-10alexnet-cifar-10-keras-jupyter
LeNet5Fashion-MNISTfashion_mnist_keras
LeNet5MNISTlenet5-mnist
LSTM-1Sine-WaveLSTM-Neural-Network-for-Time-Series-Prediction
LSTM-2Stock-PriceStockPricesPredictionProject
ResNet50ImageNet2Keras applications tutorial3
MobileNetV1ImageNet2Keras applications tutorial3
InceptionV3ImageNet2Keras applications tutorial3
DenseNet121ImageNet2Keras applications tutorial3
VGG16ImageNet2Keras applications tutorial3
VGG19ImageNet2Keras applications tutorial3
XceptionImageNet2Keras applications tutorial3

1: The first 5 models are trained using existing repositories while the last 7 models in ImageNet are obtained directly using the API provided by Keras.

2: We sampled 1500 images from ImageNet and you could obtain them from sampled_imagenet-1500.npz. You can also sample your own images from the ImageNet validation dataset.

3: Keras applications tutorial can be found in: https://keras.io/api/applications/

4: All model files and two regression dataset and ImageNet dataset we sampled can be access in OneDrive

NOTE: LEMON use 6 dataset, and 3 of them could be directly obtained from their homepages ( CIFAR-10, Fashion-MNIST, MNIST ) or accessed by Keras API. We only upload the ImageNet dataset sampled by LEMON and two datasets collected from GitHub.

In dataset.zip, there are 3 files:

sinewave.csv: dataset of LSTM-1 DIS.csv : dataset of LSTM-2 sampled_imagenet-1500.npz: dataset samples by LEMON from ImageNet

In origin_model.zip, there are 12 models used in LEMON.

Libraries

We used 20 release versions of 4 widely-used DL libraries, i.e., TensorFlow, CNTK,Theano, and MXNet, as subjects to constructed five experiments (indexed E1 to E5 in Table) to conduct differential testing.

We share the link of each library and docker image used in LEMON.

Experiment IDTensorflowTheanoCNTKMXNetCUDA
E11.14.01.0.42.7.01.5.110.1
E21.13.11.0.32.6.01.4.110.0
E31.12.01.0.22.5.11.3.19.0
E41.11.01.0.12.4.01.2.19.0
E51.10.01.0.02.3.11.1.09.0

* All libraries should be GPU-supported version

Reproducibility

Environment

We conducted 5 experiments in LEMON of which the library and CUDA version information are as described above. In order to facilitate other researchers to reproduce LEMON, we provide a docker image for the E1 experiment. It can be easily obtained by the following command. (Note: nvidia-docker2 is required!)

Step 0: Please Install nvidia-docker2. You can use this instruction to install it.

Step 1: Clone the repository. Download the dataset and models from OneDrive. Save the code and unzip datasets and models to /your/local/path/ , e.g. /your/local/path/origin_model and /your/local/path/dataset. (/your/local/path/ should be the absolute path on your server, e.g. /home/user_xxx/)

Step 2: Using the following command to pull the docker image we released for E1 and create a container for it.

docker pull yenming1227/lemon:latest
docker run --runtime=nvidia -it -v /your/local/path/:/data yenming1227/lemon:latest /bin/bash

Then you will enter a container.(Remember to change /your/local/path/ to the real path! ^_^)

Note: If your server is using http proxy, you should configure proxy in the container just as you did in your server before

Step 3: Create five virtual environments as shown below in your docker container.

Note: Please copy the installation command line by line to prevent some commands from being skipped.

# tensorflow
conda create -n tensorflow python=3.6
source activate tensorflow
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate
# theano
conda create -n theano python=3.6
source activate theano
pip install -r lemon_requirements.txt
conda install pygpu=0.7.6
pip install keras==2.2.4
pip install theano==1.0.4
source deactivate
# cntk
conda create -n cntk python=3.6
source activate cntk
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install cntk-gpu==2.7
source deactivate
# mxnet
conda create -n mxnet python=3.6
source activate mxnet
pip install -r lemon_requirements.txt
pip install keras-mxnet==2.2.4.2
pip install mxnet-cu101==1.5.1.post0
source deactivate
# default lemon python
conda create -n lemon python=3.6
source activate lemon
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate

Redis Startup

LEMON uses redis to store intermediate outputs and exchange data between different processes. We have installed redis in our docker image, you can start it with the following command:

cd /root/redis-4.0.8/src
./redis-server ../redis.conf

Running LEMON

The LEMON artifacts are well organized, and researchers can simply run LEMON with the following command.

Note: We conducted five large scale experiments (generating 100 mutants for each of the 12 initial models and analyzing inconsistencies on 1500 inputs and locating bugs) and you can reproduce the bugs reported in LEMON by running tool with experiments.conf. However, it could not be completed within 48 hours. Therefore, we provide a demo run, which can be completed within 1 hour if you running the tool with demo.conf.

cd /LEMON
git pull source activate lemon

We really recommend you use git pull to update LEMON to the latest version.

Mutation:

python -u -m run.mutation_executor demo.conf

The above command shows how to generate mutants and calculating inconsistencies in LEMON. demo.conf is the configuration file we provided for demo run.

Localization:

python -u -m run.localization_executor demo.conf

This command shows the way to perform localization in LEMON. The final bug reports will be stored in path /data/lemon_outputs/bug_list.txt

Extension

LEMON also supports researchers to switch to other models and datasets. You only need to focus on the code snippets of the data processing part in DataUtils.get_data_by_exp in scripts/tools/utils.py.

# TODO: Add your own data preprocessing here
# Note: The returned inputs should be preprocessed and labels should decoded as one-hot vectors which could be directly feed in model. Both of them should be returned in batch, e.g. shape like (1500,28,28,1) and (1500,10)
# # elif 'xxx' in exp:
# x_test, y_test = get_your_data(dataset_dir)

Besides, you should name your model file in format NetworkName-DatasetName_origin.h5, e.g. mobilenet.1.00.224-imagenet_origin.h5.

Note: _ and - can't be shown in NetworkName. You can replace them with .

For example , changing mobilenet_1.00_224-imagenet_origin.h5 to mobilenet.1.00.224-imagenet_origin.h5.

Citation

Please cite our paper if this work is helpful to you.

@inproceedings{DBLP:conf/sigsoft/WangYCLZ20,
author = {Zan Wang and
Ming Yan and
Junjie Chen and
Shuang Liu and
Dongdi Zhang},
title = {Deep learning library testing via effective model generation},
booktitle = {{ESEC/SIGSOFT} {FSE}},
pages = {788--799},
publisher = {{ACM}},
year = {2020}
}

Contact

Authors information:

NameEmail AddressGithub id
Zan Wangwangzan@tju.edu.cntjuwangzan
Ming Yanyanming@tju.edu.cnJacob-yen
Junjie Chen *junjiechen@tju.edu.cnJunjieChen
Shuang Liushuang.liu@tju.edu.cnAbigailLiu
Dongdi Zhangzhangdongdi@tju.edu.cnDandy-John

* corresponding author

About

This is the implement repository of our upcoming ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Resources

Stars

56 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Deep Learning Library Testing via Effective Model Generation

This is the implementation repository of our ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Description

LEMON is a novel approach to testing DL libraries by generating effective DL models via guided mutation. The goal is to test DL libraries as sufficiently as possible by exploring unused library code or different usage ways of library code. We further propose a heuristic strategy in LEMON to guide the process of model generation so as to generate models that can amplify the inconsistent degrees for real bugs. In this way, it is clearer to distinguish real bugs and uncertain impacts in DL libraries. We conducted an empirical study to evaluate the effectiveness of LEMON based on 20 release versions of TensorFlow,Theano,CNTK, and MXNet. LEMON detected 24 new bugs in the latest release versions of these libraries. The results also demonstrate that the models generated by LEMON outperform existing models and the models generated without guidance in terms of the number of unique bugs/inconsistencies and the achieved inconsistent degrees.

Datasets/Models/Libraries

Datasets/Models

We used 12 popular DL models based on 6datasets including both images and sequential data, as the initial seed models in LEMON, which have been widely used in many existing studies.

ModelDatasetRelated link1
AlexNetCIFAR-10alexnet-cifar-10-keras-jupyter
LeNet5Fashion-MNISTfashion_mnist_keras
LeNet5MNISTlenet5-mnist
LSTM-1Sine-WaveLSTM-Neural-Network-for-Time-Series-Prediction
LSTM-2Stock-PriceStockPricesPredictionProject
ResNet50ImageNet2Keras applications tutorial3
MobileNetV1ImageNet2Keras applications tutorial3
InceptionV3ImageNet2Keras applications tutorial3
DenseNet121ImageNet2Keras applications tutorial3
VGG16ImageNet2Keras applications tutorial3
VGG19ImageNet2Keras applications tutorial3
XceptionImageNet2Keras applications tutorial3

1: The first 5 models are trained using existing repositories while the last 7 models in ImageNet are obtained directly using the API provided by Keras.

2: We sampled 1500 images from ImageNet and you could obtain them from sampled_imagenet-1500.npz. You can also sample your own images from the ImageNet validation dataset.

3: Keras applications tutorial can be found in: https://keras.io/api/applications/

4: All model files and two regression dataset and ImageNet dataset we sampled can be access in OneDrive

NOTE: LEMON use 6 dataset, and 3 of them could be directly obtained from their homepages ( CIFAR-10, Fashion-MNIST, MNIST ) or accessed by Keras API. We only upload the ImageNet dataset sampled by LEMON and two datasets collected from GitHub.

In dataset.zip, there are 3 files:

sinewave.csv: dataset of LSTM-1 DIS.csv : dataset of LSTM-2 sampled_imagenet-1500.npz: dataset samples by LEMON from ImageNet

In origin_model.zip, there are 12 models used in LEMON.

Libraries

We used 20 release versions of 4 widely-used DL libraries, i.e., TensorFlow, CNTK,Theano, and MXNet, as subjects to constructed five experiments (indexed E1 to E5 in Table) to conduct differential testing.

We share the link of each library and docker image used in LEMON.

Experiment IDTensorflowTheanoCNTKMXNetCUDA
E11.14.01.0.42.7.01.5.110.1
E21.13.11.0.32.6.01.4.110.0
E31.12.01.0.22.5.11.3.19.0
E41.11.01.0.12.4.01.2.19.0
E51.10.01.0.02.3.11.1.09.0

* All libraries should be GPU-supported version

Reproducibility

Environment

We conducted 5 experiments in LEMON of which the library and CUDA version information are as described above. In order to facilitate other researchers to reproduce LEMON, we provide a docker image for the E1 experiment. It can be easily obtained by the following command. (Note: nvidia-docker2 is required!)

Step 0: Please Install nvidia-docker2. You can use this instruction to install it.

Step 1: Clone the repository. Download the dataset and models from OneDrive. Save the code and unzip datasets and models to /your/local/path/ , e.g. /your/local/path/origin_model and /your/local/path/dataset. (/your/local/path/ should be the absolute path on your server, e.g. /home/user_xxx/)

Step 2: Using the following command to pull the docker image we released for E1 and create a container for it.

docker pull yenming1227/lemon:latest
docker run --runtime=nvidia -it -v /your/local/path/:/data yenming1227/lemon:latest /bin/bash

Then you will enter a container.(Remember to change /your/local/path/ to the real path! ^_^)

Note: If your server is using http proxy, you should configure proxy in the container just as you did in your server before

Step 3: Create five virtual environments as shown below in your docker container.

Note: Please copy the installation command line by line to prevent some commands from being skipped.

# tensorflow
conda create -n tensorflow python=3.6
source activate tensorflow
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate
# theano
conda create -n theano python=3.6
source activate theano
pip install -r lemon_requirements.txt
conda install pygpu=0.7.6
pip install keras==2.2.4
pip install theano==1.0.4
source deactivate
# cntk
conda create -n cntk python=3.6
source activate cntk
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install cntk-gpu==2.7
source deactivate
# mxnet
conda create -n mxnet python=3.6
source activate mxnet
pip install -r lemon_requirements.txt
pip install keras-mxnet==2.2.4.2
pip install mxnet-cu101==1.5.1.post0
source deactivate
# default lemon python
conda create -n lemon python=3.6
source activate lemon
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate

Redis Startup

LEMON uses redis to store intermediate outputs and exchange data between different processes. We have installed redis in our docker image, you can start it with the following command:

cd /root/redis-4.0.8/src
./redis-server ../redis.conf

Running LEMON

The LEMON artifacts are well organized, and researchers can simply run LEMON with the following command.

Note: We conducted five large scale experiments (generating 100 mutants for each of the 12 initial models and analyzing inconsistencies on 1500 inputs and locating bugs) and you can reproduce the bugs reported in LEMON by running tool with experiments.conf. However, it could not be completed within 48 hours. Therefore, we provide a demo run, which can be completed within 1 hour if you running the tool with demo.conf.

cd /LEMON
git pull source activate lemon

We really recommend you use git pull to update LEMON to the latest version.

Mutation:

python -u -m run.mutation_executor demo.conf

The above command shows how to generate mutants and calculating inconsistencies in LEMON. demo.conf is the configuration file we provided for demo run.

Localization:

python -u -m run.localization_executor demo.conf

This command shows the way to perform localization in LEMON. The final bug reports will be stored in path /data/lemon_outputs/bug_list.txt

Extension

LEMON also supports researchers to switch to other models and datasets. You only need to focus on the code snippets of the data processing part in DataUtils.get_data_by_exp in scripts/tools/utils.py.

# TODO: Add your own data preprocessing here
# Note: The returned inputs should be preprocessed and labels should decoded as one-hot vectors which could be directly feed in model. Both of them should be returned in batch, e.g. shape like (1500,28,28,1) and (1500,10)
# # elif 'xxx' in exp:
# x_test, y_test = get_your_data(dataset_dir)

Besides, you should name your model file in format NetworkName-DatasetName_origin.h5, e.g. mobilenet.1.00.224-imagenet_origin.h5.

Note: _ and - can't be shown in NetworkName. You can replace them with .

For example , changing mobilenet_1.00_224-imagenet_origin.h5 to mobilenet.1.00.224-imagenet_origin.h5.

Citation

Please cite our paper if this work is helpful to you.

@inproceedings{DBLP:conf/sigsoft/WangYCLZ20,
author = {Zan Wang and
Ming Yan and
Junjie Chen and
Shuang Liu and
Dongdi Zhang},
title = {Deep learning library testing via effective model generation},
booktitle = {{ESEC/SIGSOFT} {FSE}},
pages = {788--799},
publisher = {{ACM}},
year = {2020}
}

Contact

Authors information:

NameEmail AddressGithub id
Zan Wangwangzan@tju.edu.cntjuwangzan
Ming Yanyanming@tju.edu.cnJacob-yen
Junjie Chen *junjiechen@tju.edu.cnJunjieChen
Shuang Liushuang.liu@tju.edu.cnAbigailLiu
Dongdi Zhangzhangdongdi@tju.edu.cnDandy-John

* corresponding author

About

This is the implement repository of our upcoming ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Resources

Stars

56 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Deep Learning Library Testing via Effective Model Generation

This is the implementation repository of our ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Description

LEMON is a novel approach to testing DL libraries by generating effective DL models via guided mutation. The goal is to test DL libraries as sufficiently as possible by exploring unused library code or different usage ways of library code. We further propose a heuristic strategy in LEMON to guide the process of model generation so as to generate models that can amplify the inconsistent degrees for real bugs. In this way, it is clearer to distinguish real bugs and uncertain impacts in DL libraries. We conducted an empirical study to evaluate the effectiveness of LEMON based on 20 release versions of TensorFlow,Theano,CNTK, and MXNet. LEMON detected 24 new bugs in the latest release versions of these libraries. The results also demonstrate that the models generated by LEMON outperform existing models and the models generated without guidance in terms of the number of unique bugs/inconsistencies and the achieved inconsistent degrees.

Datasets/Models/Libraries

Datasets/Models

We used 12 popular DL models based on 6datasets including both images and sequential data, as the initial seed models in LEMON, which have been widely used in many existing studies.

ModelDatasetRelated link1
AlexNetCIFAR-10alexnet-cifar-10-keras-jupyter
LeNet5Fashion-MNISTfashion_mnist_keras
LeNet5MNISTlenet5-mnist
LSTM-1Sine-WaveLSTM-Neural-Network-for-Time-Series-Prediction
LSTM-2Stock-PriceStockPricesPredictionProject
ResNet50ImageNet2Keras applications tutorial3
MobileNetV1ImageNet2Keras applications tutorial3
InceptionV3ImageNet2Keras applications tutorial3
DenseNet121ImageNet2Keras applications tutorial3
VGG16ImageNet2Keras applications tutorial3
VGG19ImageNet2Keras applications tutorial3
XceptionImageNet2Keras applications tutorial3

1: The first 5 models are trained using existing repositories while the last 7 models in ImageNet are obtained directly using the API provided by Keras.

2: We sampled 1500 images from ImageNet and you could obtain them from sampled_imagenet-1500.npz. You can also sample your own images from the ImageNet validation dataset.

3: Keras applications tutorial can be found in: https://keras.io/api/applications/

4: All model files and two regression dataset and ImageNet dataset we sampled can be access in OneDrive

NOTE: LEMON use 6 dataset, and 3 of them could be directly obtained from their homepages ( CIFAR-10, Fashion-MNIST, MNIST ) or accessed by Keras API. We only upload the ImageNet dataset sampled by LEMON and two datasets collected from GitHub.

In dataset.zip, there are 3 files:

sinewave.csv: dataset of LSTM-1 DIS.csv : dataset of LSTM-2 sampled_imagenet-1500.npz: dataset samples by LEMON from ImageNet

In origin_model.zip, there are 12 models used in LEMON.

Libraries

We used 20 release versions of 4 widely-used DL libraries, i.e., TensorFlow, CNTK,Theano, and MXNet, as subjects to constructed five experiments (indexed E1 to E5 in Table) to conduct differential testing.

We share the link of each library and docker image used in LEMON.

Experiment IDTensorflowTheanoCNTKMXNetCUDA
E11.14.01.0.42.7.01.5.110.1
E21.13.11.0.32.6.01.4.110.0
E31.12.01.0.22.5.11.3.19.0
E41.11.01.0.12.4.01.2.19.0
E51.10.01.0.02.3.11.1.09.0

* All libraries should be GPU-supported version

Reproducibility

Environment

We conducted 5 experiments in LEMON of which the library and CUDA version information are as described above. In order to facilitate other researchers to reproduce LEMON, we provide a docker image for the E1 experiment. It can be easily obtained by the following command. (Note: nvidia-docker2 is required!)

Step 0: Please Install nvidia-docker2. You can use this instruction to install it.

Step 1: Clone the repository. Download the dataset and models from OneDrive. Save the code and unzip datasets and models to /your/local/path/ , e.g. /your/local/path/origin_model and /your/local/path/dataset. (/your/local/path/ should be the absolute path on your server, e.g. /home/user_xxx/)

Step 2: Using the following command to pull the docker image we released for E1 and create a container for it.

docker pull yenming1227/lemon:latest
docker run --runtime=nvidia -it -v /your/local/path/:/data yenming1227/lemon:latest /bin/bash

Then you will enter a container.(Remember to change /your/local/path/ to the real path! ^_^)

Note: If your server is using http proxy, you should configure proxy in the container just as you did in your server before

Step 3: Create five virtual environments as shown below in your docker container.

Note: Please copy the installation command line by line to prevent some commands from being skipped.

# tensorflow
conda create -n tensorflow python=3.6
source activate tensorflow
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate
# theano
conda create -n theano python=3.6
source activate theano
pip install -r lemon_requirements.txt
conda install pygpu=0.7.6
pip install keras==2.2.4
pip install theano==1.0.4
source deactivate
# cntk
conda create -n cntk python=3.6
source activate cntk
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install cntk-gpu==2.7
source deactivate
# mxnet
conda create -n mxnet python=3.6
source activate mxnet
pip install -r lemon_requirements.txt
pip install keras-mxnet==2.2.4.2
pip install mxnet-cu101==1.5.1.post0
source deactivate
# default lemon python
conda create -n lemon python=3.6
source activate lemon
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate

Redis Startup

LEMON uses redis to store intermediate outputs and exchange data between different processes. We have installed redis in our docker image, you can start it with the following command:

cd /root/redis-4.0.8/src
./redis-server ../redis.conf

Running LEMON

The LEMON artifacts are well organized, and researchers can simply run LEMON with the following command.

Note: We conducted five large scale experiments (generating 100 mutants for each of the 12 initial models and analyzing inconsistencies on 1500 inputs and locating bugs) and you can reproduce the bugs reported in LEMON by running tool with experiments.conf. However, it could not be completed within 48 hours. Therefore, we provide a demo run, which can be completed within 1 hour if you running the tool with demo.conf.

cd /LEMON
git pull source activate lemon

We really recommend you use git pull to update LEMON to the latest version.

Mutation:

python -u -m run.mutation_executor demo.conf

The above command shows how to generate mutants and calculating inconsistencies in LEMON. demo.conf is the configuration file we provided for demo run.

Localization:

python -u -m run.localization_executor demo.conf

This command shows the way to perform localization in LEMON. The final bug reports will be stored in path /data/lemon_outputs/bug_list.txt

Extension

LEMON also supports researchers to switch to other models and datasets. You only need to focus on the code snippets of the data processing part in DataUtils.get_data_by_exp in scripts/tools/utils.py.

# TODO: Add your own data preprocessing here
# Note: The returned inputs should be preprocessed and labels should decoded as one-hot vectors which could be directly feed in model. Both of them should be returned in batch, e.g. shape like (1500,28,28,1) and (1500,10)
# # elif 'xxx' in exp:
# x_test, y_test = get_your_data(dataset_dir)

Besides, you should name your model file in format NetworkName-DatasetName_origin.h5, e.g. mobilenet.1.00.224-imagenet_origin.h5.

Note: _ and - can't be shown in NetworkName. You can replace them with .

For example , changing mobilenet_1.00_224-imagenet_origin.h5 to mobilenet.1.00.224-imagenet_origin.h5.

Citation

Please cite our paper if this work is helpful to you.

@inproceedings{DBLP:conf/sigsoft/WangYCLZ20,
author = {Zan Wang and
Ming Yan and
Junjie Chen and
Shuang Liu and
Dongdi Zhang},
title = {Deep learning library testing via effective model generation},
booktitle = {{ESEC/SIGSOFT} {FSE}},
pages = {788--799},
publisher = {{ACM}},
year = {2020}
}

Contact

Authors information:

NameEmail AddressGithub id
Zan Wangwangzan@tju.edu.cntjuwangzan
Ming Yanyanming@tju.edu.cnJacob-yen
Junjie Chen *junjiechen@tju.edu.cnJunjieChen
Shuang Liushuang.liu@tju.edu.cnAbigailLiu
Dongdi Zhangzhangdongdi@tju.edu.cnDandy-John

* corresponding author

About

This is the implement repository of our upcoming ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Resources

Stars

56 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Deep Learning Library Testing via Effective Model Generation

This is the implementation repository of our ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Description

LEMON is a novel approach to testing DL libraries by generating effective DL models via guided mutation. The goal is to test DL libraries as sufficiently as possible by exploring unused library code or different usage ways of library code. We further propose a heuristic strategy in LEMON to guide the process of model generation so as to generate models that can amplify the inconsistent degrees for real bugs. In this way, it is clearer to distinguish real bugs and uncertain impacts in DL libraries. We conducted an empirical study to evaluate the effectiveness of LEMON based on 20 release versions of TensorFlow,Theano,CNTK, and MXNet. LEMON detected 24 new bugs in the latest release versions of these libraries. The results also demonstrate that the models generated by LEMON outperform existing models and the models generated without guidance in terms of the number of unique bugs/inconsistencies and the achieved inconsistent degrees.

Datasets/Models/Libraries

Datasets/Models

We used 12 popular DL models based on 6datasets including both images and sequential data, as the initial seed models in LEMON, which have been widely used in many existing studies.

ModelDatasetRelated link1
AlexNetCIFAR-10alexnet-cifar-10-keras-jupyter
LeNet5Fashion-MNISTfashion_mnist_keras
LeNet5MNISTlenet5-mnist
LSTM-1Sine-WaveLSTM-Neural-Network-for-Time-Series-Prediction
LSTM-2Stock-PriceStockPricesPredictionProject
ResNet50ImageNet2Keras applications tutorial3
MobileNetV1ImageNet2Keras applications tutorial3
InceptionV3ImageNet2Keras applications tutorial3
DenseNet121ImageNet2Keras applications tutorial3
VGG16ImageNet2Keras applications tutorial3
VGG19ImageNet2Keras applications tutorial3
XceptionImageNet2Keras applications tutorial3

1: The first 5 models are trained using existing repositories while the last 7 models in ImageNet are obtained directly using the API provided by Keras.

2: We sampled 1500 images from ImageNet and you could obtain them from sampled_imagenet-1500.npz. You can also sample your own images from the ImageNet validation dataset.

3: Keras applications tutorial can be found in: https://keras.io/api/applications/

4: All model files and two regression dataset and ImageNet dataset we sampled can be access in OneDrive

NOTE: LEMON use 6 dataset, and 3 of them could be directly obtained from their homepages ( CIFAR-10, Fashion-MNIST, MNIST ) or accessed by Keras API. We only upload the ImageNet dataset sampled by LEMON and two datasets collected from GitHub.

In dataset.zip, there are 3 files:

sinewave.csv: dataset of LSTM-1 DIS.csv : dataset of LSTM-2 sampled_imagenet-1500.npz: dataset samples by LEMON from ImageNet

In origin_model.zip, there are 12 models used in LEMON.

Libraries

We used 20 release versions of 4 widely-used DL libraries, i.e., TensorFlow, CNTK,Theano, and MXNet, as subjects to constructed five experiments (indexed E1 to E5 in Table) to conduct differential testing.

We share the link of each library and docker image used in LEMON.

Experiment IDTensorflowTheanoCNTKMXNetCUDA
E11.14.01.0.42.7.01.5.110.1
E21.13.11.0.32.6.01.4.110.0
E31.12.01.0.22.5.11.3.19.0
E41.11.01.0.12.4.01.2.19.0
E51.10.01.0.02.3.11.1.09.0

* All libraries should be GPU-supported version

Reproducibility

Environment

We conducted 5 experiments in LEMON of which the library and CUDA version information are as described above. In order to facilitate other researchers to reproduce LEMON, we provide a docker image for the E1 experiment. It can be easily obtained by the following command. (Note: nvidia-docker2 is required!)

Step 0: Please Install nvidia-docker2. You can use this instruction to install it.

Step 1: Clone the repository. Download the dataset and models from OneDrive. Save the code and unzip datasets and models to /your/local/path/ , e.g. /your/local/path/origin_model and /your/local/path/dataset. (/your/local/path/ should be the absolute path on your server, e.g. /home/user_xxx/)

Step 2: Using the following command to pull the docker image we released for E1 and create a container for it.

docker pull yenming1227/lemon:latest
docker run --runtime=nvidia -it -v /your/local/path/:/data yenming1227/lemon:latest /bin/bash

Then you will enter a container.(Remember to change /your/local/path/ to the real path! ^_^)

Note: If your server is using http proxy, you should configure proxy in the container just as you did in your server before

Step 3: Create five virtual environments as shown below in your docker container.

Note: Please copy the installation command line by line to prevent some commands from being skipped.

# tensorflow
conda create -n tensorflow python=3.6
source activate tensorflow
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate
# theano
conda create -n theano python=3.6
source activate theano
pip install -r lemon_requirements.txt
conda install pygpu=0.7.6
pip install keras==2.2.4
pip install theano==1.0.4
source deactivate
# cntk
conda create -n cntk python=3.6
source activate cntk
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install cntk-gpu==2.7
source deactivate
# mxnet
conda create -n mxnet python=3.6
source activate mxnet
pip install -r lemon_requirements.txt
pip install keras-mxnet==2.2.4.2
pip install mxnet-cu101==1.5.1.post0
source deactivate
# default lemon python
conda create -n lemon python=3.6
source activate lemon
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate

Redis Startup

LEMON uses redis to store intermediate outputs and exchange data between different processes. We have installed redis in our docker image, you can start it with the following command:

cd /root/redis-4.0.8/src
./redis-server ../redis.conf

Running LEMON

The LEMON artifacts are well organized, and researchers can simply run LEMON with the following command.

Note: We conducted five large scale experiments (generating 100 mutants for each of the 12 initial models and analyzing inconsistencies on 1500 inputs and locating bugs) and you can reproduce the bugs reported in LEMON by running tool with experiments.conf. However, it could not be completed within 48 hours. Therefore, we provide a demo run, which can be completed within 1 hour if you running the tool with demo.conf.

cd /LEMON
git pull source activate lemon

We really recommend you use git pull to update LEMON to the latest version.

Mutation:

python -u -m run.mutation_executor demo.conf

The above command shows how to generate mutants and calculating inconsistencies in LEMON. demo.conf is the configuration file we provided for demo run.

Localization:

python -u -m run.localization_executor demo.conf

This command shows the way to perform localization in LEMON. The final bug reports will be stored in path /data/lemon_outputs/bug_list.txt

Extension

LEMON also supports researchers to switch to other models and datasets. You only need to focus on the code snippets of the data processing part in DataUtils.get_data_by_exp in scripts/tools/utils.py.

# TODO: Add your own data preprocessing here
# Note: The returned inputs should be preprocessed and labels should decoded as one-hot vectors which could be directly feed in model. Both of them should be returned in batch, e.g. shape like (1500,28,28,1) and (1500,10)
# # elif 'xxx' in exp:
# x_test, y_test = get_your_data(dataset_dir)

Besides, you should name your model file in format NetworkName-DatasetName_origin.h5, e.g. mobilenet.1.00.224-imagenet_origin.h5.

Note: _ and - can't be shown in NetworkName. You can replace them with .

For example , changing mobilenet_1.00_224-imagenet_origin.h5 to mobilenet.1.00.224-imagenet_origin.h5.

Citation

Please cite our paper if this work is helpful to you.

@inproceedings{DBLP:conf/sigsoft/WangYCLZ20,
author = {Zan Wang and
Ming Yan and
Junjie Chen and
Shuang Liu and
Dongdi Zhang},
title = {Deep learning library testing via effective model generation},
booktitle = {{ESEC/SIGSOFT} {FSE}},
pages = {788--799},
publisher = {{ACM}},
year = {2020}
}

Contact

Authors information:

NameEmail AddressGithub id
Zan Wangwangzan@tju.edu.cntjuwangzan
Ming Yanyanming@tju.edu.cnJacob-yen
Junjie Chen *junjiechen@tju.edu.cnJunjieChen
Shuang Liushuang.liu@tju.edu.cnAbigailLiu
Dongdi Zhangzhangdongdi@tju.edu.cnDandy-John

* corresponding author

About

This is the implement repository of our upcoming ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Resources

Stars

56 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Deep Learning Library Testing via Effective Model Generation

This is the implementation repository of our ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Description

LEMON is a novel approach to testing DL libraries by generating effective DL models via guided mutation. The goal is to test DL libraries as sufficiently as possible by exploring unused library code or different usage ways of library code. We further propose a heuristic strategy in LEMON to guide the process of model generation so as to generate models that can amplify the inconsistent degrees for real bugs. In this way, it is clearer to distinguish real bugs and uncertain impacts in DL libraries. We conducted an empirical study to evaluate the effectiveness of LEMON based on 20 release versions of TensorFlow,Theano,CNTK, and MXNet. LEMON detected 24 new bugs in the latest release versions of these libraries. The results also demonstrate that the models generated by LEMON outperform existing models and the models generated without guidance in terms of the number of unique bugs/inconsistencies and the achieved inconsistent degrees.

Datasets/Models/Libraries

Datasets/Models

We used 12 popular DL models based on 6datasets including both images and sequential data, as the initial seed models in LEMON, which have been widely used in many existing studies.

ModelDatasetRelated link1
AlexNetCIFAR-10alexnet-cifar-10-keras-jupyter
LeNet5Fashion-MNISTfashion_mnist_keras
LeNet5MNISTlenet5-mnist
LSTM-1Sine-WaveLSTM-Neural-Network-for-Time-Series-Prediction
LSTM-2Stock-PriceStockPricesPredictionProject
ResNet50ImageNet2Keras applications tutorial3
MobileNetV1ImageNet2Keras applications tutorial3
InceptionV3ImageNet2Keras applications tutorial3
DenseNet121ImageNet2Keras applications tutorial3
VGG16ImageNet2Keras applications tutorial3
VGG19ImageNet2Keras applications tutorial3
XceptionImageNet2Keras applications tutorial3

1: The first 5 models are trained using existing repositories while the last 7 models in ImageNet are obtained directly using the API provided by Keras.

2: We sampled 1500 images from ImageNet and you could obtain them from sampled_imagenet-1500.npz. You can also sample your own images from the ImageNet validation dataset.

3: Keras applications tutorial can be found in: https://keras.io/api/applications/

4: All model files and two regression dataset and ImageNet dataset we sampled can be access in OneDrive

NOTE: LEMON use 6 dataset, and 3 of them could be directly obtained from their homepages ( CIFAR-10, Fashion-MNIST, MNIST ) or accessed by Keras API. We only upload the ImageNet dataset sampled by LEMON and two datasets collected from GitHub.

In dataset.zip, there are 3 files:

sinewave.csv: dataset of LSTM-1 DIS.csv : dataset of LSTM-2 sampled_imagenet-1500.npz: dataset samples by LEMON from ImageNet

In origin_model.zip, there are 12 models used in LEMON.

Libraries

We used 20 release versions of 4 widely-used DL libraries, i.e., TensorFlow, CNTK,Theano, and MXNet, as subjects to constructed five experiments (indexed E1 to E5 in Table) to conduct differential testing.

We share the link of each library and docker image used in LEMON.

Experiment IDTensorflowTheanoCNTKMXNetCUDA
E11.14.01.0.42.7.01.5.110.1
E21.13.11.0.32.6.01.4.110.0
E31.12.01.0.22.5.11.3.19.0
E41.11.01.0.12.4.01.2.19.0
E51.10.01.0.02.3.11.1.09.0

* All libraries should be GPU-supported version

Reproducibility

Environment

We conducted 5 experiments in LEMON of which the library and CUDA version information are as described above. In order to facilitate other researchers to reproduce LEMON, we provide a docker image for the E1 experiment. It can be easily obtained by the following command. (Note: nvidia-docker2 is required!)

Step 0: Please Install nvidia-docker2. You can use this instruction to install it.

Step 1: Clone the repository. Download the dataset and models from OneDrive. Save the code and unzip datasets and models to /your/local/path/ , e.g. /your/local/path/origin_model and /your/local/path/dataset. (/your/local/path/ should be the absolute path on your server, e.g. /home/user_xxx/)

Step 2: Using the following command to pull the docker image we released for E1 and create a container for it.

docker pull yenming1227/lemon:latest
docker run --runtime=nvidia -it -v /your/local/path/:/data yenming1227/lemon:latest /bin/bash

Then you will enter a container.(Remember to change /your/local/path/ to the real path! ^_^)

Note: If your server is using http proxy, you should configure proxy in the container just as you did in your server before

Step 3: Create five virtual environments as shown below in your docker container.

Note: Please copy the installation command line by line to prevent some commands from being skipped.

# tensorflow
conda create -n tensorflow python=3.6
source activate tensorflow
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate
# theano
conda create -n theano python=3.6
source activate theano
pip install -r lemon_requirements.txt
conda install pygpu=0.7.6
pip install keras==2.2.4
pip install theano==1.0.4
source deactivate
# cntk
conda create -n cntk python=3.6
source activate cntk
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install cntk-gpu==2.7
source deactivate
# mxnet
conda create -n mxnet python=3.6
source activate mxnet
pip install -r lemon_requirements.txt
pip install keras-mxnet==2.2.4.2
pip install mxnet-cu101==1.5.1.post0
source deactivate
# default lemon python
conda create -n lemon python=3.6
source activate lemon
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate

Redis Startup

LEMON uses redis to store intermediate outputs and exchange data between different processes. We have installed redis in our docker image, you can start it with the following command:

cd /root/redis-4.0.8/src
./redis-server ../redis.conf

Running LEMON

The LEMON artifacts are well organized, and researchers can simply run LEMON with the following command.

Note: We conducted five large scale experiments (generating 100 mutants for each of the 12 initial models and analyzing inconsistencies on 1500 inputs and locating bugs) and you can reproduce the bugs reported in LEMON by running tool with experiments.conf. However, it could not be completed within 48 hours. Therefore, we provide a demo run, which can be completed within 1 hour if you running the tool with demo.conf.

cd /LEMON
git pull source activate lemon

We really recommend you use git pull to update LEMON to the latest version.

Mutation:

python -u -m run.mutation_executor demo.conf

The above command shows how to generate mutants and calculating inconsistencies in LEMON. demo.conf is the configuration file we provided for demo run.

Localization:

python -u -m run.localization_executor demo.conf

This command shows the way to perform localization in LEMON. The final bug reports will be stored in path /data/lemon_outputs/bug_list.txt

Extension

LEMON also supports researchers to switch to other models and datasets. You only need to focus on the code snippets of the data processing part in DataUtils.get_data_by_exp in scripts/tools/utils.py.

# TODO: Add your own data preprocessing here
# Note: The returned inputs should be preprocessed and labels should decoded as one-hot vectors which could be directly feed in model. Both of them should be returned in batch, e.g. shape like (1500,28,28,1) and (1500,10)
# # elif 'xxx' in exp:
# x_test, y_test = get_your_data(dataset_dir)

Besides, you should name your model file in format NetworkName-DatasetName_origin.h5, e.g. mobilenet.1.00.224-imagenet_origin.h5.

Note: _ and - can't be shown in NetworkName. You can replace them with .

For example , changing mobilenet_1.00_224-imagenet_origin.h5 to mobilenet.1.00.224-imagenet_origin.h5.

Citation

Please cite our paper if this work is helpful to you.

@inproceedings{DBLP:conf/sigsoft/WangYCLZ20,
author = {Zan Wang and
Ming Yan and
Junjie Chen and
Shuang Liu and
Dongdi Zhang},
title = {Deep learning library testing via effective model generation},
booktitle = {{ESEC/SIGSOFT} {FSE}},
pages = {788--799},
publisher = {{ACM}},
year = {2020}
}

Contact

Authors information:

NameEmail AddressGithub id
Zan Wangwangzan@tju.edu.cntjuwangzan
Ming Yanyanming@tju.edu.cnJacob-yen
Junjie Chen *junjiechen@tju.edu.cnJunjieChen
Shuang Liushuang.liu@tju.edu.cnAbigailLiu
Dongdi Zhangzhangdongdi@tju.edu.cnDandy-John

* corresponding author

About

This is the implement repository of our upcoming ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Resources

Stars

56 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Deep Learning Library Testing via Effective Model Generation

This is the implementation repository of our ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Description

LEMON is a novel approach to testing DL libraries by generating effective DL models via guided mutation. The goal is to test DL libraries as sufficiently as possible by exploring unused library code or different usage ways of library code. We further propose a heuristic strategy in LEMON to guide the process of model generation so as to generate models that can amplify the inconsistent degrees for real bugs. In this way, it is clearer to distinguish real bugs and uncertain impacts in DL libraries. We conducted an empirical study to evaluate the effectiveness of LEMON based on 20 release versions of TensorFlow,Theano,CNTK, and MXNet. LEMON detected 24 new bugs in the latest release versions of these libraries. The results also demonstrate that the models generated by LEMON outperform existing models and the models generated without guidance in terms of the number of unique bugs/inconsistencies and the achieved inconsistent degrees.

Datasets/Models/Libraries

Datasets/Models

We used 12 popular DL models based on 6datasets including both images and sequential data, as the initial seed models in LEMON, which have been widely used in many existing studies.

ModelDatasetRelated link1
AlexNetCIFAR-10alexnet-cifar-10-keras-jupyter
LeNet5Fashion-MNISTfashion_mnist_keras
LeNet5MNISTlenet5-mnist
LSTM-1Sine-WaveLSTM-Neural-Network-for-Time-Series-Prediction
LSTM-2Stock-PriceStockPricesPredictionProject
ResNet50ImageNet2Keras applications tutorial3
MobileNetV1ImageNet2Keras applications tutorial3
InceptionV3ImageNet2Keras applications tutorial3
DenseNet121ImageNet2Keras applications tutorial3
VGG16ImageNet2Keras applications tutorial3
VGG19ImageNet2Keras applications tutorial3
XceptionImageNet2Keras applications tutorial3

1: The first 5 models are trained using existing repositories while the last 7 models in ImageNet are obtained directly using the API provided by Keras.

2: We sampled 1500 images from ImageNet and you could obtain them from sampled_imagenet-1500.npz. You can also sample your own images from the ImageNet validation dataset.

3: Keras applications tutorial can be found in: https://keras.io/api/applications/

4: All model files and two regression dataset and ImageNet dataset we sampled can be access in OneDrive

NOTE: LEMON use 6 dataset, and 3 of them could be directly obtained from their homepages ( CIFAR-10, Fashion-MNIST, MNIST ) or accessed by Keras API. We only upload the ImageNet dataset sampled by LEMON and two datasets collected from GitHub.

In dataset.zip, there are 3 files:

sinewave.csv: dataset of LSTM-1 DIS.csv : dataset of LSTM-2 sampled_imagenet-1500.npz: dataset samples by LEMON from ImageNet

In origin_model.zip, there are 12 models used in LEMON.

Libraries

We used 20 release versions of 4 widely-used DL libraries, i.e., TensorFlow, CNTK,Theano, and MXNet, as subjects to constructed five experiments (indexed E1 to E5 in Table) to conduct differential testing.

We share the link of each library and docker image used in LEMON.

Experiment IDTensorflowTheanoCNTKMXNetCUDA
E11.14.01.0.42.7.01.5.110.1
E21.13.11.0.32.6.01.4.110.0
E31.12.01.0.22.5.11.3.19.0
E41.11.01.0.12.4.01.2.19.0
E51.10.01.0.02.3.11.1.09.0

* All libraries should be GPU-supported version

Reproducibility

Environment

We conducted 5 experiments in LEMON of which the library and CUDA version information are as described above. In order to facilitate other researchers to reproduce LEMON, we provide a docker image for the E1 experiment. It can be easily obtained by the following command. (Note: nvidia-docker2 is required!)

Step 0: Please Install nvidia-docker2. You can use this instruction to install it.

Step 1: Clone the repository. Download the dataset and models from OneDrive. Save the code and unzip datasets and models to /your/local/path/ , e.g. /your/local/path/origin_model and /your/local/path/dataset. (/your/local/path/ should be the absolute path on your server, e.g. /home/user_xxx/)

Step 2: Using the following command to pull the docker image we released for E1 and create a container for it.

docker pull yenming1227/lemon:latest
docker run --runtime=nvidia -it -v /your/local/path/:/data yenming1227/lemon:latest /bin/bash

Then you will enter a container.(Remember to change /your/local/path/ to the real path! ^_^)

Note: If your server is using http proxy, you should configure proxy in the container just as you did in your server before

Step 3: Create five virtual environments as shown below in your docker container.

Note: Please copy the installation command line by line to prevent some commands from being skipped.

# tensorflow
conda create -n tensorflow python=3.6
source activate tensorflow
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate
# theano
conda create -n theano python=3.6
source activate theano
pip install -r lemon_requirements.txt
conda install pygpu=0.7.6
pip install keras==2.2.4
pip install theano==1.0.4
source deactivate
# cntk
conda create -n cntk python=3.6
source activate cntk
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install cntk-gpu==2.7
source deactivate
# mxnet
conda create -n mxnet python=3.6
source activate mxnet
pip install -r lemon_requirements.txt
pip install keras-mxnet==2.2.4.2
pip install mxnet-cu101==1.5.1.post0
source deactivate
# default lemon python
conda create -n lemon python=3.6
source activate lemon
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate

Redis Startup

LEMON uses redis to store intermediate outputs and exchange data between different processes. We have installed redis in our docker image, you can start it with the following command:

cd /root/redis-4.0.8/src
./redis-server ../redis.conf

Running LEMON

The LEMON artifacts are well organized, and researchers can simply run LEMON with the following command.

Note: We conducted five large scale experiments (generating 100 mutants for each of the 12 initial models and analyzing inconsistencies on 1500 inputs and locating bugs) and you can reproduce the bugs reported in LEMON by running tool with experiments.conf. However, it could not be completed within 48 hours. Therefore, we provide a demo run, which can be completed within 1 hour if you running the tool with demo.conf.

cd /LEMON
git pull source activate lemon

We really recommend you use git pull to update LEMON to the latest version.

Mutation:

python -u -m run.mutation_executor demo.conf

The above command shows how to generate mutants and calculating inconsistencies in LEMON. demo.conf is the configuration file we provided for demo run.

Localization:

python -u -m run.localization_executor demo.conf

This command shows the way to perform localization in LEMON. The final bug reports will be stored in path /data/lemon_outputs/bug_list.txt

Extension

LEMON also supports researchers to switch to other models and datasets. You only need to focus on the code snippets of the data processing part in DataUtils.get_data_by_exp in scripts/tools/utils.py.

# TODO: Add your own data preprocessing here
# Note: The returned inputs should be preprocessed and labels should decoded as one-hot vectors which could be directly feed in model. Both of them should be returned in batch, e.g. shape like (1500,28,28,1) and (1500,10)
# # elif 'xxx' in exp:
# x_test, y_test = get_your_data(dataset_dir)

Besides, you should name your model file in format NetworkName-DatasetName_origin.h5, e.g. mobilenet.1.00.224-imagenet_origin.h5.

Note: _ and - can't be shown in NetworkName. You can replace them with .

For example , changing mobilenet_1.00_224-imagenet_origin.h5 to mobilenet.1.00.224-imagenet_origin.h5.

Citation

Please cite our paper if this work is helpful to you.

@inproceedings{DBLP:conf/sigsoft/WangYCLZ20,
author = {Zan Wang and
Ming Yan and
Junjie Chen and
Shuang Liu and
Dongdi Zhang},
title = {Deep learning library testing via effective model generation},
booktitle = {{ESEC/SIGSOFT} {FSE}},
pages = {788--799},
publisher = {{ACM}},
year = {2020}
}

Contact

Authors information:

NameEmail AddressGithub id
Zan Wangwangzan@tju.edu.cntjuwangzan
Ming Yanyanming@tju.edu.cnJacob-yen
Junjie Chen *junjiechen@tju.edu.cnJunjieChen
Shuang Liushuang.liu@tju.edu.cnAbigailLiu
Dongdi Zhangzhangdongdi@tju.edu.cnDandy-John

* corresponding author

About

This is the implement repository of our upcoming ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Resources

Stars

56 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Deep Learning Library Testing via Effective Model Generation

This is the implementation repository of our ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Description

LEMON is a novel approach to testing DL libraries by generating effective DL models via guided mutation. The goal is to test DL libraries as sufficiently as possible by exploring unused library code or different usage ways of library code. We further propose a heuristic strategy in LEMON to guide the process of model generation so as to generate models that can amplify the inconsistent degrees for real bugs. In this way, it is clearer to distinguish real bugs and uncertain impacts in DL libraries. We conducted an empirical study to evaluate the effectiveness of LEMON based on 20 release versions of TensorFlow,Theano,CNTK, and MXNet. LEMON detected 24 new bugs in the latest release versions of these libraries. The results also demonstrate that the models generated by LEMON outperform existing models and the models generated without guidance in terms of the number of unique bugs/inconsistencies and the achieved inconsistent degrees.

Datasets/Models/Libraries

Datasets/Models

We used 12 popular DL models based on 6datasets including both images and sequential data, as the initial seed models in LEMON, which have been widely used in many existing studies.

ModelDatasetRelated link1
AlexNetCIFAR-10alexnet-cifar-10-keras-jupyter
LeNet5Fashion-MNISTfashion_mnist_keras
LeNet5MNISTlenet5-mnist
LSTM-1Sine-WaveLSTM-Neural-Network-for-Time-Series-Prediction
LSTM-2Stock-PriceStockPricesPredictionProject
ResNet50ImageNet2Keras applications tutorial3
MobileNetV1ImageNet2Keras applications tutorial3
InceptionV3ImageNet2Keras applications tutorial3
DenseNet121ImageNet2Keras applications tutorial3
VGG16ImageNet2Keras applications tutorial3
VGG19ImageNet2Keras applications tutorial3
XceptionImageNet2Keras applications tutorial3

1: The first 5 models are trained using existing repositories while the last 7 models in ImageNet are obtained directly using the API provided by Keras.

2: We sampled 1500 images from ImageNet and you could obtain them from sampled_imagenet-1500.npz. You can also sample your own images from the ImageNet validation dataset.

3: Keras applications tutorial can be found in: https://keras.io/api/applications/

4: All model files and two regression dataset and ImageNet dataset we sampled can be access in OneDrive

NOTE: LEMON use 6 dataset, and 3 of them could be directly obtained from their homepages ( CIFAR-10, Fashion-MNIST, MNIST ) or accessed by Keras API. We only upload the ImageNet dataset sampled by LEMON and two datasets collected from GitHub.

In dataset.zip, there are 3 files:

sinewave.csv: dataset of LSTM-1 DIS.csv : dataset of LSTM-2 sampled_imagenet-1500.npz: dataset samples by LEMON from ImageNet

In origin_model.zip, there are 12 models used in LEMON.

Libraries

We used 20 release versions of 4 widely-used DL libraries, i.e., TensorFlow, CNTK,Theano, and MXNet, as subjects to constructed five experiments (indexed E1 to E5 in Table) to conduct differential testing.

We share the link of each library and docker image used in LEMON.

Experiment IDTensorflowTheanoCNTKMXNetCUDA
E11.14.01.0.42.7.01.5.110.1
E21.13.11.0.32.6.01.4.110.0
E31.12.01.0.22.5.11.3.19.0
E41.11.01.0.12.4.01.2.19.0
E51.10.01.0.02.3.11.1.09.0

* All libraries should be GPU-supported version

Reproducibility

Environment

We conducted 5 experiments in LEMON of which the library and CUDA version information are as described above. In order to facilitate other researchers to reproduce LEMON, we provide a docker image for the E1 experiment. It can be easily obtained by the following command. (Note: nvidia-docker2 is required!)

Step 0: Please Install nvidia-docker2. You can use this instruction to install it.

Step 1: Clone the repository. Download the dataset and models from OneDrive. Save the code and unzip datasets and models to /your/local/path/ , e.g. /your/local/path/origin_model and /your/local/path/dataset. (/your/local/path/ should be the absolute path on your server, e.g. /home/user_xxx/)

Step 2: Using the following command to pull the docker image we released for E1 and create a container for it.

docker pull yenming1227/lemon:latest
docker run --runtime=nvidia -it -v /your/local/path/:/data yenming1227/lemon:latest /bin/bash

Then you will enter a container.(Remember to change /your/local/path/ to the real path! ^_^)

Note: If your server is using http proxy, you should configure proxy in the container just as you did in your server before

Step 3: Create five virtual environments as shown below in your docker container.

Note: Please copy the installation command line by line to prevent some commands from being skipped.

# tensorflow
conda create -n tensorflow python=3.6
source activate tensorflow
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate
# theano
conda create -n theano python=3.6
source activate theano
pip install -r lemon_requirements.txt
conda install pygpu=0.7.6
pip install keras==2.2.4
pip install theano==1.0.4
source deactivate
# cntk
conda create -n cntk python=3.6
source activate cntk
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install cntk-gpu==2.7
source deactivate
# mxnet
conda create -n mxnet python=3.6
source activate mxnet
pip install -r lemon_requirements.txt
pip install keras-mxnet==2.2.4.2
pip install mxnet-cu101==1.5.1.post0
source deactivate
# default lemon python
conda create -n lemon python=3.6
source activate lemon
pip install -r lemon_requirements.txt
pip install keras==2.2.4
pip install tensorflow-gpu==1.14.0
source deactivate

Redis Startup

LEMON uses redis to store intermediate outputs and exchange data between different processes. We have installed redis in our docker image, you can start it with the following command:

cd /root/redis-4.0.8/src
./redis-server ../redis.conf

Running LEMON

The LEMON artifacts are well organized, and researchers can simply run LEMON with the following command.

Note: We conducted five large scale experiments (generating 100 mutants for each of the 12 initial models and analyzing inconsistencies on 1500 inputs and locating bugs) and you can reproduce the bugs reported in LEMON by running tool with experiments.conf. However, it could not be completed within 48 hours. Therefore, we provide a demo run, which can be completed within 1 hour if you running the tool with demo.conf.

cd /LEMON
git pull source activate lemon

We really recommend you use git pull to update LEMON to the latest version.

Mutation:

python -u -m run.mutation_executor demo.conf

The above command shows how to generate mutants and calculating inconsistencies in LEMON. demo.conf is the configuration file we provided for demo run.

Localization:

python -u -m run.localization_executor demo.conf

This command shows the way to perform localization in LEMON. The final bug reports will be stored in path /data/lemon_outputs/bug_list.txt

Extension

LEMON also supports researchers to switch to other models and datasets. You only need to focus on the code snippets of the data processing part in DataUtils.get_data_by_exp in scripts/tools/utils.py.

# TODO: Add your own data preprocessing here
# Note: The returned inputs should be preprocessed and labels should decoded as one-hot vectors which could be directly feed in model. Both of them should be returned in batch, e.g. shape like (1500,28,28,1) and (1500,10)
# # elif 'xxx' in exp:
# x_test, y_test = get_your_data(dataset_dir)

Besides, you should name your model file in format NetworkName-DatasetName_origin.h5, e.g. mobilenet.1.00.224-imagenet_origin.h5.

Note: _ and - can't be shown in NetworkName. You can replace them with .

For example , changing mobilenet_1.00_224-imagenet_origin.h5 to mobilenet.1.00.224-imagenet_origin.h5.

Citation

Please cite our paper if this work is helpful to you.

@inproceedings{DBLP:conf/sigsoft/WangYCLZ20,
author = {Zan Wang and
Ming Yan and
Junjie Chen and
Shuang Liu and
Dongdi Zhang},
title = {Deep learning library testing via effective model generation},
booktitle = {{ESEC/SIGSOFT} {FSE}},
pages = {788--799},
publisher = {{ACM}},
year = {2020}
}

Contact

Authors information:

NameEmail AddressGithub id
Zan Wangwangzan@tju.edu.cntjuwangzan
Ming Yanyanming@tju.edu.cnJacob-yen
Junjie Chen *junjiechen@tju.edu.cnJunjieChen
Shuang Liushuang.liu@tju.edu.cnAbigailLiu
Dongdi Zhangzhangdongdi@tju.edu.cnDandy-John

* corresponding author

About

This is the implement repository of our upcoming ESEC/FSE 2020 paper: Deep Learning Library Testing via Effective Model Generation.

Resources

Stars

56 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages