in sagemaker-neo-notebooks/edge/cpp-integration/tutorial.cc [490:542]
void RunInference(std::string& compiled_model, std::string& npy_name) {
DLRModelHandle handle;
std::cout << "CreateDLRModel" << std::endl;
int dev_type = 1; // cpu == 1
int dev_id = 0;
CreateDLRModel(&handle, compiled_model.c_str(), dev_type, dev_id);
std::cout << "GetDLRNumOutputs" << std::endl;
int num_outputs;
GetDLRNumOutputs(&handle, &num_outputs);
std::vector<std::vector<float>> outputs;
for (int i = 0; i < num_outputs; i++) {
int64_t cur_size = 0;
int cur_dim = 0;
GetDLROutputSizeDim(&handle, i, &cur_size, &cur_dim);
std::vector<float> output(cur_size, 0);
outputs.push_back(output);
}
std::cout << "GetPreprocessNpyFile" << std::endl;
std::vector<unsigned long> in_shape_ul;
std::vector<float> input_data;
GetPreprocessNpyFile<float>(npy_name, in_shape_ul, input_data);
std::vector<int64_t> in_shape = std::vector<int64_t>(in_shape_ul.begin(), in_shape_ul.end());
std::cout << "SetDLRInput" << std::endl;
std::string input_name = "data";
int64_t input_dimension = in_shape.size();
SetDLRInput(&handle, input_name.c_str(), in_shape.data(), input_data.data(),
static_cast<int>(input_dimension));
std::cout << "RunDLRModel" << std::endl;
RunDLRModel(&handle);
std::cout << "GetDLROutput" << std::endl;
for (int i = 0; i < num_outputs; i++) {
GetDLROutput(&handle, i, outputs[i].data());
}
// print the output for examination
int idx = 0;
float max_val = 0;
std::vector<float> data = outputs[0];
for (int i = 0; i < data.size(); i++) {
if (data[i] > max_val) {
max_val = data[i];
idx = i;
}
}
std::cout << "max prob: " << max_val << " at " << idx << std::endl;
std::cout << "Inference complete" << std::endl;
}