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