ModelTC/MQBench

不能够复现Application-imagenet_example ,基于tensorRT的evaluation结果精度下降40%,向您请教。

Closed this issue · 3 comments

@Tracin 感谢您团队所作的贡献,我在复现imagenet_example时,运行onnx2trt.py后,无法实现训练时的精度,特向您团队求助。
我严格按照您提供的readme.md进行复现, 使用的是Resnet18模型。

  1. 运行 python main.py -a [model_name] --epochs 1 --lr 1e-4 --b 128 --pretrained,由于GPU算力限制,训练了一个Epoch,生成了模型model_best.pth.tar。validation的结果如下:
    ---------Test: [ 0/98] Time 8.849 ( 8.849) Loss 1.6269e+00 (1.6269e+00) Acc@1 61.13 ( 61.13) Acc@5 85.35 ( 85.35)
    ---------* Acc@1 48.782 Acc@5 74.702
    QAT训练一个Epoch后的Top1和Top5的ACC分别为48.78%和74.70%,完全可以接受。

  2. 运行python main.py -a [model_name] --resume [model_save_path] --deploy,期间会产生如下报错指令,之节选了一条,大约有数十条类似报错,但是依然可以生成mqbench_qmodel_deploy_model.onnx:
    ----------WARNING: The shape inference of ::LearnablePerTensorAffine type is missing, so it may result in wrong shape inference for the exported graph. Please consider adding it in symbolic function.

  3. 运行 python onnx2trt.py --onnx [tensorrt_deploy_model.onnx] --trt [model_name.trt] --clip [tensorrt_clip_ranges.json] --data [dataset_path] --evaluate,生成的evaluate最终结果为:
    -------- -49600 ==> * Acc@1 5.927 Acc@5 15.641
    ---------49700 ==> * Acc@1 5.915 Acc@5 15.621
    ---------49800 ==> * Acc@1 5.908 Acc@5 15.602
    ---------49900 ==> * Acc@1 5.898 Acc@5 15.587
    ---------Final ==> * Acc@1 5.910 Acc@5 15.598
    转换为tensorrt之后,Top1和Top5的ACC分别为5.9%和15.6%,精度下降约40%,下降程度难以接受,不明白是什么原因。而且复现过程中用到的各个代码库严格按照Reade.md进行配置,torch==1.10.0, tensorRT== 7.2.1.6, onnx==1.13.0。

期盼您的回复!@Tracin

Tracin commented

尝试修改https://github.com/ModelTC/MQBench/blob/main/mqbench/utils/state.py#L43, 使得observer在训练中保持开启

@Tracin 感谢您的回复,我现在就试一下

非常感谢,我的问题已经解决