NVIDIA / TensorRT-Model-Optimizer

TensorRT Model Optimizer is a unified library of state-of-the-art model optimization techniques such as quantization, pruning, distillation, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM or TensorRT to optimize inference speed on NVIDIA GPUs.
https://nvidia.github.io/TensorRT-Model-Optimizer
Other
576 stars 43 forks source link

Error in TensorRT Execution: Internal Error After Model Quantization - Could Not Find Implementation for Node #50

Closed levipereira closed 3 months ago

levipereira commented 3 months ago

I'm conducting a simple test to check the performance of a quantized model, but I'm encountering an error after quantization. Could someone guide me on how to resolve this issue?

[E] Error[10]: [optimizer.cpp::computeCosts::3869] Error Code 10: Internal Error (Could not find any implementation for node model.10.attn.pe.conv.weight + model.10.attn.pe.conv.weight_QuantizeLinear + /model.10/attn/pe/conv/Conv + /model.10/attn/Add.)

Download model yolov10b.onnx from https://github.com/THU-MIG/yolov10/releases/tag/v1.1

import modelopt.onnx.quantization as moq
import numpy as np

batch_size=15
channels=3
h=640
w=640
calib_data = np.random.randn(batch_size, channels, h, w).astype(np.float32)

moq.quantize(
    onnx_path='yolov10b.onnx',
    calibration_data=calib_data,
    output_path="yolov10b-calib.onnx",
    quantize_mode="int8",
)
INFO:root:Model yolov10b.onnx with opset_version 13 is loaded.
INFO:root:Model is cloned to yolov10b_named.onnx after naming the nodes.
INFO:root:Quantization Mode: int8
INFO:root:Quantizable op types in the model: ['Add', 'Mul', 'MaxPool', 'MatMul', 'Conv']
INFO:root:Building non-residual Add input map ...
INFO:root:Searching for hard-coded patterns like MHA, LayerNorm, etc. to avoid quantization.
INFO:root:Building KGEN/CASK targeted partitions ...
INFO:root:Classifying the partition nodes ...
INFO:root:Total number of nodes: 442
INFO:root:Skipped node count: 0
WARNING:root:Please consider to run pre-processing before quantization. Refer to example: https://github.com/microsoft/onnxruntime-inference-examples/blob/main/quantization/image_classification/cpu/ReadMe.md 
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 178.77it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 176.04it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 180.80it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 176.66it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 178.37it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 176.82it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 181.16it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 176.46it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 181.76it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 175.95it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 180.93it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 178.88it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 179.03it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 173.99it/s]
Collecting tensor data and making histogram ...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 406/406 [00:02<00:00, 180.65it/s]
Finding optimal threshold for each tensor using 'entropy' algorithm ...
Number of tensors : 406
Number of histogram bins : 128 (The number may increase depends on the data it collects)
Number of quantized bins : 128
WARNING:root:Please consider pre-processing before quantization. See https://github.com/microsoft/onnxruntime-inference-examples/blob/main/quantization/image_classification/cpu/ReadMe.md 
INFO:root:Deleting QDQ nodes from marked inputs to make certain operations fusible ...
INFO:root:Quantized onnx model is saved as yolov10b-trt-calib.onnx
INFO:root:Total number of quantized nodes: 155
INFO:root:Quantized node types: {'Add', 'MaxPool', 'Reshape', 'MatMul', 'Concat', 'Conv'}

TRT Version: TensorRT v8601

trtexec --onnx=yolov10b-calib.onnx  \
 --fp16 --int8  \
--saveEngine=yolov10b.engine \
--warmUp=500 \
--duration=10  \
--useCudaGraph \
--useSpinWait \
--noDataTransfers 

Error:

[08/02/2024-14:21:11] [I] [TRT] Global timing cache in use. Profiling results in this builder pass will be stored.
[08/02/2024-14:23:01] [E] Error[10]: Could not find any implementation for node model.10.attn.pe.conv.weight + model.10.attn.pe.conv.weight_QuantizeLinear + /model.10/attn/pe/conv/Conv + /model.10/attn/Add.
[08/02/2024-14:23:01] [E] Error[10]: [optimizer.cpp::computeCosts::3869] Error Code 10: Internal Error (Could not find any implementation for node model.10.attn.pe.conv.weight + model.10.attn.pe.conv.weight_QuantizeLinear + /model.10/attn/pe/conv/Conv + /model.10/attn/Add.)
[08/02/2024-14:23:01] [E] Engine could not be created from network
[08/02/2024-14:23:01] [E] Building engine failed
[08/02/2024-14:23:01] [E] Failed to create engine from model or file.
[08/02/2024-14:23:01] [E] Engine set up failed
riyadshairi979 commented 3 months ago

TensorRT 10 has this bug fixed. Please try that.

levipereira commented 3 months ago

Indeed. Ty