From a7e915bf7bb06074e97a7ef6d7057d0c13bd6670 Mon Sep 17 00:00:00 2001 From: littletomatodonkey Date: Tue, 15 Sep 2020 14:12:44 +0000 Subject: [PATCH 1/4] fix mklnn memory leak --- deploy/cpp_infer/src/ocr_det.cpp | 1 + deploy/cpp_infer/src/ocr_rec.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/deploy/cpp_infer/src/ocr_det.cpp b/deploy/cpp_infer/src/ocr_det.cpp index 56fbace8cc..a935003bb4 100644 --- a/deploy/cpp_infer/src/ocr_det.cpp +++ b/deploy/cpp_infer/src/ocr_det.cpp @@ -26,6 +26,7 @@ void DBDetector::LoadModel(const std::string &model_dir) { config.DisableGpu(); if (this->use_mkldnn_) { config.EnableMKLDNN(); + config.SetMkldnnCacheCapacity(10); } config.SetCpuMathLibraryNumThreads(this->cpu_math_library_num_threads_); } diff --git a/deploy/cpp_infer/src/ocr_rec.cpp b/deploy/cpp_infer/src/ocr_rec.cpp index a3486db46f..9d71d8c455 100644 --- a/deploy/cpp_infer/src/ocr_rec.cpp +++ b/deploy/cpp_infer/src/ocr_rec.cpp @@ -126,6 +126,7 @@ void CRNNRecognizer::LoadModel(const std::string &model_dir) { config.DisableGpu(); if (this->use_mkldnn_) { config.EnableMKLDNN(); + config.SetMkldnnCacheCapacity(10); } config.SetCpuMathLibraryNumThreads(this->cpu_math_library_num_threads_); } From f78678dd66a798d78a8c9cb07af3c58dee7609b0 Mon Sep 17 00:00:00 2001 From: littletomatodonkey Date: Tue, 15 Sep 2020 14:23:41 +0000 Subject: [PATCH 2/4] fix py infer --- tools/infer/utility.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/infer/utility.py b/tools/infer/utility.py index 8d66f86718..1d07f62f20 100755 --- a/tools/infer/utility.py +++ b/tools/infer/utility.py @@ -101,6 +101,7 @@ def create_predictor(args, mode): config.disable_gpu() config.set_cpu_math_library_num_threads(6) if args.enable_mkldnn: + config.set_mkldnn_cache_capacity(10) config.enable_mkldnn() #config.enable_memory_optim() From 5858441b3d95c15ba040c061ae968f1e19f879b7 Mon Sep 17 00:00:00 2001 From: littletomatodonkey Date: Tue, 15 Sep 2020 15:52:52 +0000 Subject: [PATCH 3/4] add notes --- deploy/cpp_infer/src/ocr_det.cpp | 1 + deploy/cpp_infer/src/ocr_rec.cpp | 1 + deploy/cpp_infer/tools/config.txt | 2 +- tools/infer/utility.py | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/deploy/cpp_infer/src/ocr_det.cpp b/deploy/cpp_infer/src/ocr_det.cpp index a935003bb4..bf94abce23 100644 --- a/deploy/cpp_infer/src/ocr_det.cpp +++ b/deploy/cpp_infer/src/ocr_det.cpp @@ -26,6 +26,7 @@ void DBDetector::LoadModel(const std::string &model_dir) { config.DisableGpu(); if (this->use_mkldnn_) { config.EnableMKLDNN(); + // cache 10 different shapes for mkldnn to avoid memory leak config.SetMkldnnCacheCapacity(10); } config.SetCpuMathLibraryNumThreads(this->cpu_math_library_num_threads_); diff --git a/deploy/cpp_infer/src/ocr_rec.cpp b/deploy/cpp_infer/src/ocr_rec.cpp index 9d71d8c455..b997d8291a 100644 --- a/deploy/cpp_infer/src/ocr_rec.cpp +++ b/deploy/cpp_infer/src/ocr_rec.cpp @@ -126,6 +126,7 @@ void CRNNRecognizer::LoadModel(const std::string &model_dir) { config.DisableGpu(); if (this->use_mkldnn_) { config.EnableMKLDNN(); + // cache 10 different shapes for mkldnn to avoid memory leak config.SetMkldnnCacheCapacity(10); } config.SetCpuMathLibraryNumThreads(this->cpu_math_library_num_threads_); diff --git a/deploy/cpp_infer/tools/config.txt b/deploy/cpp_infer/tools/config.txt index 40beea3a2e..6c53f29eeb 100644 --- a/deploy/cpp_infer/tools/config.txt +++ b/deploy/cpp_infer/tools/config.txt @@ -3,7 +3,7 @@ use_gpu 0 gpu_id 0 gpu_mem 4000 cpu_math_library_num_threads 10 -use_mkldnn 0 +use_mkldnn 1 use_zero_copy_run 1 # det config diff --git a/tools/infer/utility.py b/tools/infer/utility.py index 1d07f62f20..3e1f07b8a7 100755 --- a/tools/infer/utility.py +++ b/tools/infer/utility.py @@ -101,6 +101,7 @@ def create_predictor(args, mode): config.disable_gpu() config.set_cpu_math_library_num_threads(6) if args.enable_mkldnn: + # cache 10 different shapes for mkldnn to avoid memory leak config.set_mkldnn_cache_capacity(10) config.enable_mkldnn() From 2aa0c8eb2d8baa7567aadba797315d4203a0d2ac Mon Sep 17 00:00:00 2001 From: littletomatodonkey Date: Tue, 15 Sep 2020 16:04:06 +0000 Subject: [PATCH 4/4] remove re-init --- tools/infer/predict_system.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/tools/infer/predict_system.py b/tools/infer/predict_system.py index 647a76b204..ff5d53e94e 100755 --- a/tools/infer/predict_system.py +++ b/tools/infer/predict_system.py @@ -122,7 +122,6 @@ def main(args): image_file_list = get_image_file_list(args.image_dir) text_sys = TextSystem(args) is_visualize = True - tackle_img_num = 0 for image_file in image_file_list: img, flag = check_and_read_gif(image_file) if not flag: @@ -131,9 +130,6 @@ def main(args): logger.info("error in loading image:{}".format(image_file)) continue starttime = time.time() - tackle_img_num += 1 - if not args.use_gpu and args.enable_mkldnn and tackle_img_num % 30 == 0: - text_sys = TextSystem(args) dt_boxes, rec_res = text_sys(img) elapse = time.time() - starttime print("Predict time of %s: %.3fs" % (image_file, elapse)) @@ -153,11 +149,7 @@ def main(args): scores = [rec_res[i][1] for i in range(len(rec_res))] draw_img = draw_ocr( - image, - boxes, - txts, - scores, - drop_score=drop_score) + image, boxes, txts, scores, drop_score=drop_score) draw_img_save = "./inference_results/" if not os.path.exists(draw_img_save): os.makedirs(draw_img_save)