{"record":{"id":"a88cca9fb9693e82","repo":"PaddlePaddle/PaddleOCR","slug":"unsupported-data-type-pd-dtype","errorCode":null,"errorMessage":"Unsupported data type: {pd_dtype}","messagePattern":"Unsupported data type: (.+?)","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"tools/infer/utility.py","lineNumber":534,"sourceCode":"    pp_model_path = pp_model_file.split(\".\")[0]\n    convert(pp_model_path, trt_config)\n\n\ndef _pd_dtype_to_np_dtype(pd_dtype):\n    if pd_dtype == inference.DataType.FLOAT64:\n        return np.float64\n    elif pd_dtype == inference.DataType.FLOAT32:\n        return np.float32\n    elif pd_dtype == inference.DataType.INT64:\n        return np.int64\n    elif pd_dtype == inference.DataType.INT32:\n        return np.int32\n    elif pd_dtype == inference.DataType.UINT8:\n        return np.uint8\n    elif pd_dtype == inference.DataType.INT8:\n        return np.int8\n    else:\n        raise TypeError(f\"Unsupported data type: {pd_dtype}\")\n\n\ndef load_config(file_path):\n    _, ext = os.path.splitext(file_path)\n    if ext not in [\".yml\", \".yaml\"]:\n        raise ValueError(f\"only support yaml files for now, got {file_path}\")\n    with open(file_path, \"rb\") as file:\n        config = yaml.load(file, Loader=yaml.SafeLoader)\n    return config\n\n\ndef get_output_tensors(args, mode, predictor):\n    output_names = predictor.get_output_names()\n    output_tensors = []\n    if mode == \"rec\" and args.rec_algorithm in [\"CRNN\", \"SVTR_LCNet\", \"SVTR_HGNet\"]:\n        output_name = \"softmax_0.tmp_0\"\n        if output_name in output_names:\n            return [predictor.get_output_handle(output_name)]","sourceCodeStart":516,"sourceCodeEnd":552,"githubUrl":"https://github.com/PaddlePaddle/PaddleOCR/blob/2661c7c0ef5c613e8f93c6e93b2e052399f0f854/tools/infer/utility.py#L516-L552","documentation":"_pd_dtype_to_np_dtype maps Paddle Inference tensor data types (FLOAT32/INT64/INT32/UINT8/INT8/FLOAT64) to numpy dtypes for building TRT input arrays. Any other Paddle DataType — e.g. FLOAT16, BFLOAT16, BOOL — reaches the else branch and raises TypeError. In practice this means the model contains an input whose precision has no numpy equivalent usable for engine calibration.","triggerScenarios":"Loading a model with a FLOAT16/BF16/BOOL input while building TensorRT engines with dynamic shapes; TRT cache regeneration on a model exported at half precision.","commonSituations":"FP16-exported inference models used with --use_tensorrt; new Paddle versions exposing additional DataType enum values; mixed-precision exports of newer architectures.","solutions":["Re-export the inference model in FP32 (remove --fp16/half precision at export time) before TRT conversion","Extend _pd_dtype_to_np_dtype with the needed mapping (e.g. FLOAT16 -> np.float16) if the data is representable","Skip TensorRT and run plain GPU Paddle Inference for this model"],"exampleFix":"# tools/infer/utility.py — before\n    else:\n        raise TypeError(f\"Unsupported data type: {pd_dtype}\")\n\n# after\n    elif pd_dtype == inference.DataType.FLOAT16:\n        return np.float16\n    else:\n        raise TypeError(f\"Unsupported data type: {pd_dtype}\")","handlingStrategy":"validation","validationCode":"SUPPORTED = {inference.DataType.FLOAT64, inference.DataType.FLOAT32,\n             inference.DataType.INT64, inference.DataType.INT32,\n             inference.DataType.UINT8, inference.DataType.INT8}\nfor name in predictor.get_input_names():\n    t = predictor.get_input_handle(name).type()\n    assert t in SUPPORTED, f'input {name} has dtype {t}, not usable for TRT build — export FP32'","typeGuard":"def dtype_supported(handle) -> bool:\n    return handle.type() in {\n        inference.DataType.FLOAT64, inference.DataType.FLOAT32,\n        inference.DataType.INT64, inference.DataType.INT32,\n        inference.DataType.UINT8, inference.DataType.INT8,\n    }","tryCatchPattern":"try:\n    _pd_dtype_to_np_dtype(handle.type())\nexcept TypeError:\n    raise SystemExit(f'input {name} dtype {handle.type()} unsupported for TRT — re-export model in FP32')","preventionTips":["Export inference models in FP32 when TensorRT is part of the deployment","Let TRT do FP16 internally via precision flags rather than exporting FP16 weights"],"tags":["tensorrt","dtype","fp16","type-mapping"],"backgroundTag":null,"analyzedSha":"2661c7c0ef5c613e8f93c6e93b2e052399f0f854","analyzedAt":"2026-08-14T20:17:30.180Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}