From bb4447585f8d2dc288da816aa9eab35db3329cd3 Mon Sep 17 00:00:00 2001 From: lizz Date: Wed, 9 Jun 2021 17:38:53 +0800 Subject: [PATCH] Add benchmark_processing script (#261) * Flush data script Signed-off-by: lizz * Update tools/run_data.py Co-authored-by: jeffreykuang * Update tools/run_data.py Co-authored-by: jeffreykuang * Update tools/run_data.py Co-authored-by: jeffreykuang * rename to benchmark_processing Signed-off-by: lizz Co-authored-by: jeffreykuang --- tools/benchmark_processing.py | 59 +++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100755 tools/benchmark_processing.py diff --git a/tools/benchmark_processing.py b/tools/benchmark_processing.py new file mode 100755 index 00000000..3fe23693 --- /dev/null +++ b/tools/benchmark_processing.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +"""This file is for benchmark data loading process. It can also be used to +refresh the memcached cache. The command line to run this file is: + +$ python -m cProfile -o program.prof tools/analysis/benchmark_processing.py +configs/task/method/[config filename] + +Note: When debugging, the `workers_per_gpu` in the config should be set to 0 +during benchmark. + +It use cProfile to record cpu running time and output to program.prof +To visualize cProfile output program.prof, use Snakeviz and run: +$ snakeviz program.prof +""" +import argparse + +import mmcv +from mmcv import Config + +from mmdet.datasets import build_dataloader +from mmocr.datasets import build_dataset + +assert build_dataset is not None + + +def main(): + parser = argparse.ArgumentParser(description='Benchmark data loading') + parser.add_argument('config', help='Train config file path.') + args = parser.parse_args() + cfg = Config.fromfile(args.config) + + dataset = build_dataset(cfg.data.train) + + # prepare data loaders + if 'imgs_per_gpu' in cfg.data: + cfg.data.samples_per_gpu = cfg.data.imgs_per_gpu + + data_loader = build_dataloader( + dataset, + cfg.data.samples_per_gpu, + cfg.data.workers_per_gpu, + 1, + dist=False, + seed=None) + + # Start progress bar after first 5 batches + prog_bar = mmcv.ProgressBar( + len(dataset) - 5 * cfg.data.samples_per_gpu, start=False) + for i, data in enumerate(data_loader): + if i == 5: + prog_bar.start() + for _ in range(len(data['img'])): + if i < 5: + continue + prog_bar.update() + + +if __name__ == '__main__': + main()