void RunInference()

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;
}