I'm using NVIDIA DALI together with Triton Inference Server (r23.07). My DALI pipeline includes an image decoding step and is deployed with Triton's dynamic batching enabled. For Testing purpose I have set max batching delay of 10 seconds.
If I send two concurrent requests to Triton—one with a valid image (supported format) and one with an invalid image (corrupted or unsupported format)—Triton's dynamic batching groups these requests together. However, I observe that only the request with the invalid image fails, while the request with the valid image completes successfully.
My expectation was that if any item in the batch fails decoding, the whole batch would fail and all requests in the batch would return errors. But this does not seem to be the case. Is this the intended behavior for DALI and Triton? Does error reporting always occur per input/request, even when dynamic batching is enabled and a single pipeline instance processes both valid and invalid samples?
For Failure Case I got below error (in triton side):
E0311 08:11:48.872766 450776 dali_model_instance.cc:46] Critical error in pipeline:
Error when executing Mixed operator decoders__Image encountered:
Error in thread 1: [/opt/dali/dali/operators/decoder/nvjpeg/nvjpeg_decoder_decoupled_api.h:616] [/opt/dali/dali/image/image_factory.cc:100] Unrecognized image format. Supported formats are: JPEG, PNG, BMP, TIFF, PNM, JPEG2000 and WebP.
Stacktrace (7 entries):
[frame 0]: /opt/tritonserver/backends/dali/conda/envs/dalienv/lib/python3.10/site-packages/nvidia/dali/libdali.so(+0xc32fb) [0x7f414f7042fb]
[frame 1]: /opt/tritonserver/backends/dali/conda/envs/dalienv/lib/python3.10/site-packages/nvidia/dali/libdali.so(+0x8a604) [0x7f414f6cb604]
[frame 2]: /opt/tritonserver/backends/dali/conda/envs/dalienv/lib/python3.10/site-packages/nvidia/dali/libdali_operators.so(+0xa7a26d) [0x7f4125e0426d]
[frame 3]: /opt/tritonserver/backends/dali/conda/envs/dalienv/lib/python3.10/site-packages/nvidia/dali/libdali.so(dali::ThreadPool::ThreadMain(int, int, bool, std::string const&)+0x1e6) [0x7f414f7ea6c6]
[frame 4]: /opt/tritonserver/backends/dali/conda/envs/dalienv/lib/python3.10/site-packages/nvidia/dali/libdali.so(+0x6baa80) [0x7f414fcfba80]
[frame 5]: /usr/lib/x86_64-linux-gnu/libc.so.6(+0x94b43) [0x7f42f620eb43]
[frame 6]: /usr/lib/x86_64-linux-gnu/libc.so.6(clone+0x44) [0x7f42f629fbb4]
. File:
Stacktrace (6 entries):
[frame 0]: /opt/tritonserver/backends/dali/conda/envs/dalienv/lib/python3.10/site-packages/nvidia/dali/libdali_operators.so(+0x67183e) [0x7f41259fb83e]
[frame 1]: /opt/tritonserver/backends/dali/conda/envs/dalienv/lib/python3.10/site-packages/nvidia/dali/libdali_operators.so(+0xa7ac5a) [0x7f4125e04c5a]
[frame 2]: /opt/tritonserver/backends/dali/conda/envs/dalienv/lib/python3.10/site-packages/nvidia/dali/libdali.so(dali::ThreadPool::ThreadMain(int, int, bool, std::string const&)+0x1e6) [0x7f414f7ea6c6]
[frame 3]: /opt/tritonserver/backends/dali/conda/envs/dalienv/lib/python3.10/site-packages/nvidia/dali/libdali.so(+0x6baa80) [0x7f414fcfba80]
[frame 4]: /usr/lib/x86_64-linux-gnu/libc.so.6(+0x94b43) [0x7f42f620eb43]
[frame 5]: /usr/lib/x86_64-linux-gnu/libc.so.6(clone+0x44) [0x7f42f629fbb4]
Current pipeline object is no longer valid.
Thanks for your help!
I'm using NVIDIA DALI together with Triton Inference Server (r23.07). My DALI pipeline includes an image decoding step and is deployed with Triton's dynamic batching enabled. For Testing purpose I have set max batching delay of 10 seconds.
If I send two concurrent requests to Triton—one with a valid image (supported format) and one with an invalid image (corrupted or unsupported format)—Triton's dynamic batching groups these requests together. However, I observe that only the request with the invalid image fails, while the request with the valid image completes successfully.
My expectation was that if any item in the batch fails decoding, the whole batch would fail and all requests in the batch would return errors. But this does not seem to be the case. Is this the intended behavior for DALI and Triton? Does error reporting always occur per input/request, even when dynamic batching is enabled and a single pipeline instance processes both valid and invalid samples?
For Failure Case I got below error (in triton side):
Thanks for your help!