提交 51bac347 编写于 作者: S Sylwester Fraczek 提交者: Tao Luo

[cherry-pick to release/1.5] slim threading fix (#18119)

* fix multithreading issue

test=develop

* rview fixes

test=develop

* reivew fix: omp->cpu, infernce_api.cc->pybind.cc

test=release/1.5
上级 31ef8c1c
...@@ -44,6 +44,7 @@ limitations under the License. */ ...@@ -44,6 +44,7 @@ limitations under the License. */
#include "paddle/fluid/operators/activation_op.h" #include "paddle/fluid/operators/activation_op.h"
#include "paddle/fluid/operators/py_func_op.h" #include "paddle/fluid/operators/py_func_op.h"
#include "paddle/fluid/operators/reader/lod_tensor_blocking_queue.h" #include "paddle/fluid/operators/reader/lod_tensor_blocking_queue.h"
#include "paddle/fluid/platform/cpu_helper.h"
#include "paddle/fluid/platform/cpu_info.h" #include "paddle/fluid/platform/cpu_info.h"
#include "paddle/fluid/platform/enforce.h" #include "paddle/fluid/platform/enforce.h"
#include "paddle/fluid/platform/init.h" #include "paddle/fluid/platform/init.h"
...@@ -164,6 +165,8 @@ PYBIND11_MODULE(core_noavx, m) { ...@@ -164,6 +165,8 @@ PYBIND11_MODULE(core_noavx, m) {
BindException(&m); BindException(&m);
m.def("set_num_threads", &platform::SetNumThreads);
m.def( m.def(
"_append_python_callable_object_and_return_id", "_append_python_callable_object_and_return_id",
[](py::object py_obj) -> size_t { [](py::object py_obj) -> size_t {
......
...@@ -3,7 +3,7 @@ string(REPLACE ".py" "" TEST_OPS "${TEST_OPS}") ...@@ -3,7 +3,7 @@ string(REPLACE ".py" "" TEST_OPS "${TEST_OPS}")
function(inference_analysis_python_api_int8_test target model_dir data_dir filename) function(inference_analysis_python_api_int8_test target model_dir data_dir filename)
py_test(${target} SRCS ${filename} py_test(${target} SRCS ${filename}
ENVS FLAGS_OMP_NUM_THREADS=${CPU_NUM_THREADS_ON_CI} ENVS CPU_NUM_THREADS=${CPU_NUM_THREADS_ON_CI}
ARGS --infer_model ${model_dir}/model ARGS --infer_model ${model_dir}/model
--infer_data ${data_dir}/data.bin --infer_data ${data_dir}/data.bin
--int8_model_save_path int8_models/${target} --int8_model_save_path int8_models/${target}
......
...@@ -84,8 +84,8 @@ class TestMKLDNNPostTrainingQuantStrategy(unittest.TestCase): ...@@ -84,8 +84,8 @@ class TestMKLDNNPostTrainingQuantStrategy(unittest.TestCase):
while step < num: while step < num:
fp.seek(imgs_offset + img_size * step) fp.seek(imgs_offset + img_size * step)
img = fp.read(img_size) img = fp.read(img_size)
img = struct.unpack_from('{}f'.format(img_ch * img_w * img = struct.unpack_from(
img_h), img) '{}f'.format(img_ch * img_w * img_h), img)
img = np.array(img) img = np.array(img)
img.shape = (img_ch, img_w, img_h) img.shape = (img_ch, img_w, img_h)
fp.seek(labels_offset + label_size * step) fp.seek(labels_offset + label_size * step)
...@@ -137,12 +137,14 @@ class TestMKLDNNPostTrainingQuantStrategy(unittest.TestCase): ...@@ -137,12 +137,14 @@ class TestMKLDNNPostTrainingQuantStrategy(unittest.TestCase):
images = np.array(images).astype('float32') images = np.array(images).astype('float32')
labels = np.array([x[1] for x in data]).astype("int64") labels = np.array([x[1] for x in data]).astype("int64")
labels = labels.reshape([-1, 1]) labels = labels.reshape([-1, 1])
fluid.core.set_num_threads(int(os.environ['CPU_NUM_THREADS']))
out = exe.run(inference_program, out = exe.run(inference_program,
feed={ feed={
feed_target_names[0]: images, feed_target_names[0]: images,
feed_target_names[1]: labels feed_target_names[1]: labels
}, },
fetch_list=fetch_targets) fetch_list=fetch_targets)
fluid.core.set_num_threads(1)
top1 += np.sum(out[1]) * len(data) top1 += np.sum(out[1]) * len(data)
top5 += np.sum(out[2]) * len(data) top5 += np.sum(out[2]) * len(data)
total_samples += len(data) total_samples += len(data)
...@@ -183,8 +185,8 @@ class TestMKLDNNPostTrainingQuantStrategy(unittest.TestCase): ...@@ -183,8 +185,8 @@ class TestMKLDNNPostTrainingQuantStrategy(unittest.TestCase):
accuracy_diff_threshold = test_case_args.accuracy_diff_threshold accuracy_diff_threshold = test_case_args.accuracy_diff_threshold
_logger.info( _logger.info(
'FP32 & INT8 prediction run: batch_size {0}, warmup batch size {1}.'. 'FP32 & INT8 prediction run: batch_size {0}, warmup batch size {1}.'
format(batch_size, warmup_batch_size)) .format(batch_size, warmup_batch_size))
#warmup dataset, only use the first batch data #warmup dataset, only use the first batch data
warmup_reader = paddle.batch( warmup_reader = paddle.batch(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册