Skip to main content
  1. Posts/

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

·543 words·2 mins
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

背景是要把某个 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,发现似乎没人提到这种情况,所以还是写出来分享一下。

TensorRT INT8 校准流程:预处理尺寸需要与模型输入尺寸一致

Related

tensorRT 模型兼容性说明

·525 words·2 mins
名词说明 # 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版本.