triton-inference-server / dali_backend

The Triton backend that allows running GPU-accelerated data pre-processing pipelines implemented in DALI's python API.
https://docs.nvidia.com/deeplearning/dali/user-guide/docs/index.html
MIT License
120 stars 28 forks source link

how to use the numpy data in the DALI #177

Open 1124676457 opened 1 year ago

1124676457 commented 1 year ago

I use your NVIDIA hardware decoder, nvdecode, to decode the video and generate data in numpy format. How to use dali's gpu accelerated pre-processing, I use Dali.fn.decoders. image, and the error is as follows: Error in thread 1: [/opt/dali/dali/operators/decoder/host/host_decoder.cc:30] Assert on "input.ndim() == 1" failed: Input must be 1D encoded jpeg string. If I remove decoders and directly use dali.fn.resize(device='gpu'), an error will be reported. Data on cpu cannot be operated by gpu

what shoud i do, my data.shape is (1620, 1920)

szalpal commented 1 year ago

Hi @1124676457 ,

thanks for reaching out. Could you post your DALI Pipeline code? Or at least some relevant part of it?

1124676457 commented 1 year ago

嗨@1124676457 ,

感谢您伸出援手。你能发布你的DALI管道代码吗?或者至少是其中的一些相关部分?

@dali.pipeline_def(batch_size=1, num_threads=4, device_id=0) def pipe(): images = dali.fn.external_source(device="cpu",name="DALI_INPUT_0") images = images / 255 images = dali.fn.decoders.image(images, device="mixed", output_type=types.RGB) images = dali.fn.resize(images, device='gpu',resize_x=1024, resize_y=576) images = dali.fn.reshape(images,device='gpu', src_dims=[2,0,1], layout="CHW") images = dali.fn.expand_dims(images, axes=[0], new_axis_names="N")

images = images / 255

return images

the decode code is this, the worker.frame is the nvdecode's result, shape is (1620,1920): while True: if worker.updated: c += 1 time_connect = time.time() worker.updated = False output = triton(worker.frame)

szalpal commented 1 year ago

@1124676457 ,

your DALI Pipeline looks correct. It suggests, that maybe you're sending the data to the Triton in an improper way. The typical sending pattern for the pipeline you've posted is using either np.fromfile(filename, dtype=np.uint8) or open(filename, 'rb') function to open JPEG binary and sending it to the DALI Backend. Should you like to post the client code, I'll take a look and I can point to a problem.

Please refer to these examples that illustrate the usage pattern that is the most common with the pipeline you've presented: https://github.com/triton-inference-server/dali_backend/blob/3639bebcb9ad6022a3522772c4e34fba4ec43dc5/qa/L0_inception_ensemble/ensemble_client.py#L53 https://github.com/triton-inference-server/dali_backend/blob/3639bebcb9ad6022a3522772c4e34fba4ec43dc5/client/dali_grpc_client.py#L133 https://github.com/triton-inference-server/dali_backend/blob/3639bebcb9ad6022a3522772c4e34fba4ec43dc5/docs/examples/resnet50_trt/client.py#L30