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