Run inference with multiple inputs and multiple outputs.
287 {
288
290
291
292
293 std::vector<std::unique_ptr<tc::InferInput>>
inputs;
294 inputs.reserve(inputData.size());
295
296 for (auto& [inputName, inputInfo] : inputData) {
297
298 const std::vector<int64_t>& inputShape = inputInfo.first;
300
302 [&](const auto& dataVec) {
303 using T = std::decay_t<
decltype(dataVec[0])>;
304 return m_impl->prepareInput<
T>(inputName, inputShape, dataVec,
306 },
307 variant));
308 }
309
310
311 std::vector<tc::InferInput*> rawInputs;
312 for (auto& input : inputs) {
313 rawInputs.push_back(
input.get());
314 }
315
316
317 tc::InferenceServerGrpcClient*
client =
nullptr;
319 assert(client != nullptr);
320
321
322 std::shared_ptr<tc::InferResult>
results;
325 const int maxRetries = maxRetriesValue < 0 ? 0 : maxRetriesValue;
326 const int retryDelayMs = retryDelayMsValue < 0 ? 0 : retryDelayMsValue;
328 m_impl->runInference(*client, rawInputs, maxRetries, retryDelayMs,
329 results));
330 assert(results != nullptr);
331
332
333 for (auto& [outputName, outputInfo] : outputData) {
334
336
338 [&](auto& dataVec) {
339 using T = std::decay_t<
decltype(dataVec[0])>;
341 },
342 variant));
343 }
344
345
346 return StatusCode::SUCCESS;
347}
#define ATH_CHECK
Evaluate an expression and check for errors.
std::variant< std::vector< float >, std::vector< int64_t > > DataVariant