Please provide complete information as applicable to your setup.
• Hardware Platform (Jetson / GPU)
GPU
• DeepStream Version
6.2.2
• TensorRT Version
Triton Container: nvcr.io/nvidia/tritonserver:23.02-py3
Deepstream Container: nvcr.io/nvidia/deepstream:6.2-triton
• NVIDIA GPU Driver Version (valid for GPU only)
525.125.06
• Issue Type( questions, new requirements, bugs)
Bug/Configuration
I’m hosting ReIdentificationNet in Triton (config below), and using nvinferserver from DeepStream as a secondary infer where the PGIE is from an nvinfer. According to the samples, I’m getting the tensor metadata in my C++ app by going to the NvDsUserMeta. eg:
NvDsInferTensorMeta *tensor_meta = (NvDsInferTensorMeta ) user_meta->user_meta_data;
NvDsInferDims embedding_dims = tensor_meta->output_layers_info[0].inferDims;
int numElements = embedding_dims.d[0];
float embedding_data = (float *)(tensor_meta->out_buf_ptrs_dev[0]);
From here, I work with the embedding_data, etc. just fine.
My problem is that when I secondary-inference through Triton (nvinferserver), the embedding_data is NULL, even though the numElements = 256. When I run this exact same code using a (local) nvinfer SGIE instead, everything works fine, and embedding_data is valid; its only when I switch to Triton/nvinferserver that the embedding_data is NULL.
If I use nvinferserver for SGIE, do I also need to use nvinferserver for the PGIE? eg can I mix nvinfer and nvinferserver in the same pipeline?
nvinferserver config:
infer_config {
unique_id: 2
gpu_ids: 0
max_batch_size: 16
backend {
triton {
model_name: “reidentificationnet”
version: -1
grpc {
url: “triton-server:8001”
enable_cuda_buffer_sharing: true
}
}
}
preprocess {
network_format: IMAGE_FORMAT_RGB
tensor_order: TENSOR_ORDER_LINEAR
tensor_name: “input”
maintain_aspect_ratio: 0
frame_scaling_hw: FRAME_SCALING_HW_DEFAULT
frame_scaling_filter: 1
normalize {
scale_factor: 0.01735207357279195
channel_offsets: [123.675,116.28,103.53]
}
}
postprocess {
other {}
}
extra {
copy_input_to_host_buffers: false
output_buffer_pool_size: 64
}
}
input_control {
process_mode: PROCESS_MODE_CLIP_OBJECTS
operate_on_gie_id: 1
interval: 0
operate_on_class_ids: [0,1,2]
}
output_control {
output_tensor_meta: true
}
Triton config.pbtxt:
name: “reidentificationnet”
platform: “tensorrt_plan”
default_model_filename: “resnet50_market1501.etlt_b16_gpu0_fp16.engine”
max_batch_size: 16
input [
{
name: “input”
data_type: TYPE_FP32
format: FORMAT_NCHW
dims: [ 3, 256, 128 ]
}
]
output [
{
name: “fc_pred”
data_type: TYPE_FP32
dims: [ 256 ]
}
]
dynamic_batching {
max_queue_delay_microseconds: 40000
}
Pipeline (works with nvinfer SGIE):
. . . ! nvinfer config=facenet ! nvtracker ! nvinfer config=reid ! nvdsosd !
Pipeline (doesn’t work with nvinferserver SGIE)
. . . ! nvinfer config=facenet ! nvtracker ! nvinferserver config=reid ! nvdsosd !