- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
When "GPU" is used as target device, batch size more than 1 does not work. Loading neural network to plugin fails giving error.
inputDims=300 300 3 4
outputDims=4 1 100 7
SSD Mode
terminate called after throwing an instance of 'InferenceEngine::details::InferenceEngineException'
what(): network allocation failed: /teamcity/work/scoring_engine_build/releases_2018_R5/thirdparty/clDNN/src/detection_output.cpp at line: 128
Error has occured for: DetectionOutput_cldnn_output_postprocess
Prior box batch size(=4) is not equal to: expected value
/opt/intel/computer_vision_sdk_2018.5.455/deployment_tools/inference_engine/include/details/ie_exception_conversion.hpp:71
Aborted (core dumped)
I am using following function to load IR model.
NOTE* Batch inference work perfectly fine for CPU.
With GPU single image inference works.
RetValNNRead read_nn_model(int &infer_height, int &infer_width, int &num_channels)
{
// 1. Add CPU plugins
InferenceEnginePluginPtr _plugin = PluginDispatcher({""}).getPluginByDevice("GPU");
InferencePlugin plugin(_plugin);
//TODO: Write shell to make in 'ie_cpu_extension'
// make generates 'libcpu_extension.so'
//string s_ext_plugin = "./ie_cpu_extension/libcpu_extension.so";
//auto extension_ptr = make_so_pointer<InferenceEngine::IExtension>(s_ext_plugin);
//plugin.AddExtension(extension_ptr);
// 2. Create an IR reader and read network files
CNNNetReader network_reader;
network_reader.ReadNetwork("./openvino_189_fp16/frozen_inference_graph.xml");
network_reader.ReadWeights("./openvino_189_fp16/frozen_inference_graph.bin");
CNNNetwork network = network_reader.getNetwork();
/** Set network batch size to 4 **/
network.setBatchSize(4);
size_t batchSize = network.getBatchSize();
//3. Configure input and output
/**Get NN input information **/
InferenceEngine::InputsDataMap input_info(network.getInputsInfo());
InferenceEngine::SizeVector inputDims;
for (auto &item : input_info) {
auto input_data = item.second;
input_data->setPrecision(Precision::U8);
input_data->setLayout(Layout::NCHW);
inputDims=input_data->getDims();
}
cout << "inputDims=";
for (int i=0; i<inputDims.size(); i++) {
cout << (int)inputDims << " ";
}
cout << endl;
infer_width=inputDims[0];
infer_height=inputDims[1];
num_channels=inputDims[2];
/**Get NN output information **/
InferenceEngine::OutputsDataMap output_info(network.getOutputsInfo());
InferenceEngine::SizeVector outputDims;
for (auto &item : output_info) {
auto output_data = item.second;
output_data->setPrecision(Precision::FP32);
output_data->setLayout(Layout::NCHW);
outputDims=output_data->getDims();
}
cout << "outputDims=";
for (int i=0; i<outputDims.size(); i++) {
cout << (int)outputDims << " ";
}
cout << endl;
if (outputDims[3]>1)
{
cout << "SSD Mode" << endl;
}
else
{
cout << "Single Classification Mode" << endl;
}
// 4. Load model to plugin
ExecutableNetwork executable_network = plugin.LoadNetwork(network, {});
// 5. Create infer request
InferRequest infer_request = executable_network.CreateInferRequest();
return {infer_request, input_info, output_info, outputDims};
}
Thanks for your time.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dearest Shelke, Sagar,
Please try the benchmark_app using your model, on a GPU, with a batch size > 1. Does it work properly ?
Also I noticed that you are using an old version of OpenVino. Please upgrade to the latest 2019 R1.0.1. Many bugs have been fixed in the latest release.
Thanks,
Shubha
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Shubha,
I have tested batch inference on the code from intel smart video workshop git and that works fine.
Code i am using is exactly similar but GPU batch inference still not working. I don't think it's problem with OpenVINO version because I used 2018 R5 to test standard code from smart video workshop.
Thanks,
Sagar
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear Sagar,
I understand. But I need you to install the latest 2019 R1.0.1 OpenVino and try the benchmark_app (which is very easy to use) because these are basic troubleshooting steps. If benchmark_app succeeds, then there is something wrong with your code. It would be easy for you to check how benchmark_app does GPU batching, and compare your code with benchmark_app.
It looks like the intel smart video workshop uses the caffe mobilenet-ssd/FP32 model. The benchmark_app is an easy straightforward way to test GPU batching without complicated code - it's a matter of passing in your model thorough -m and your batch size through -b, as well as your device through -d.
Thanks,
Shubha
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Shubha,
Installing latest 2019 R1.0.1 OpenVino solved the problem.
-Sagar
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page