跳过正文
  1. Posts/

tensorrt INT8 量化debug记录(cuda error 700)

·2 分钟

背景是要把某个caffe model,转换成tensorrt的INT8 模型。 然后遇到如下报错:

 1
 2E0403 08:54:35.951987  5704 engine.h:62] engine.cpp (572) - Cuda Error in commonEmitTensor: 1 (invalid argument)
 3E0403 08:54:35.952157  5704 engine.h:62] Failure while trying to emit debug blob.
 4engine.cpp (572) - Cuda Error in commonEmitTensor: 1 (invalid argument)
 5E0403 08:54:35.952235  5704 engine.h:62] cuda/caskConvolutionLayer.cpp (355) - Cuda Error in execute: 1 (invalid argument)
 6E0403 08:54:35.952291  5704 engine.h:62] cuda/caskConvolutionLayer.cpp (355) - Cuda Error in execute: 1 (invalid argument)
 7W0403 08:54:35.952324  5704 calibrator.cpp:45] [4, 3, 224, 224]
 8F0403 08:54:35.992761  5704 tensor.h:149] Check failed: cudaMemcpy(raw_mutable_data(), b.raw_data(), size_in_bytes, cudaMemcpyDefault) == cudaSuccess (700 vs. 0) 
 9*** Check failure stack trace: ***
10Aborted (core dumped)

cuda error 700. 原来cuda error的错误号可以这么大。。

查了下,说

in general, CUDA error 700 is drivers or timeout related.

看起来是个环境问题, 然后又试了下之前转的INT8的模型,依然没有报错。

我就很困惑了。。 想了下这两个模型的区别。 能转的模型是从pytorch开始转换的,中间会merge BN layer。而cuda error 700的模型是caffe 模型,保留了BN layer.

于是把第一个BN 以及之后的layer都删除。然而仍然是这个错误。

继续删除到只剩下一个input layer,一个conv layer. 还是报错。。 事情变得过于诡异了起来。看来不是模型的问题。。

然后检查了一下做校准用的预处理参数。。发现输入尺寸和模型的输入尺寸竟然是不一致的。。。 跪了。。

之前的模型由于是pytorch模型,input size和预处理size 是完全通过我控制的,因此不会有问题。

但是对于要转换的caffe 模型, 模型的参数和预处理部分是用户提供给我的,而我们的代码中没有做检查(似乎也不好做检查,因为校准的逻辑是在更顶层的)

但是这个cuda error 700的报错。。。也太不友好了吧。。。

因为之前查了cuda error 700,发现似乎没人提到这种情况,所以还是写出来分享一下。

相关文章

Faster Rcnn 目标检测算法

背景 # 2019年对了好几次faster rcnn,第一次是赛事之窗项目和北京的同事,对齐sdk和训练的实现。 第二次是被tensorRT4和tensorRT5之间默认参数不一致的问题坑了一下。 第三次是被caffe proto中roi align 的默认参数坑了。

tensorRT 模型兼容性说明

·2 分钟
名词说明 # CUDA. 一般来说指的是CUDA SDK. 目前经常使用的是CUDA 8.0和CUDA 10.1两个版本. 8.0和10.1都是SDK的版本号. CUDNN. The NVIDIA CUDA® Deep Neural Network library (cuDNN). 是一个可以为神经网络提供GPU加速的库 compute capability. 是GPU的固有参数,可以理解为GPU的版本.越新的显卡该数值往往越高. tensorRT.NVIDIA TensorRT™ is an SDK for high-performance deep learning inference. 是一个深度学习推理库,旨在提供高性能的推理速度. plan file,也称为 engine plan. 是生成的tensorRT 模型文件. 兼容性说明 # Engine plan 的兼容性依赖于GPU的compute capability 和 TensorRT 版本, 不依赖于CUDA和CUDNN版本.