我们在Tensorflow(1.10和1.3)中开发了一个对象检测模型,该模型使用标准的CNN和一些额外的层。我们将使用保存的模型格式在Tensorflow Serving 1.13.0中托管模型,并在具有Cuda 10和CUDNN 7.4.x的Nvidia Tesla V100 GPU上。 (我们将Google容器图像和/或dockerfile用于Tensorflow服务。)
我们运行单元测试以确保预测结果符合我们的预期。这些在CPU上都很好用。但是,当我们在上面的GPU / CUDA / CUDNN配置上运行它们时,我们得到的预测概率差异在.001到.0005之间。
我们的目标是了解:
我们尝试了以下实验:
使用数量为1的检查点在tensorflow GPU上运行相同模型的多次运行
使用不同批处理大小的检查点在GPU上多次运行相同模型
使用不同批处理大小的检查点在CPU上多次运行相同模型
使用检查点(批处理大小为1)在张量流服务GPU上多次运行相同模型
将带有检查点的运行与通过GPU保存的模型进行运行
比较通过检查点运行以在CPU上以保存的模型运行
更改了batch_size并在GPU上设置TF_CUDNN_USE_AUTOTUNE=0
的实验
添加了intra_op_parallelism_threads=1
的实验,inter_op_parallelism_threads=1
与TF_CUDNN_USE_AUTOTUNE=0
一起使用并没有任何区别
总结:在某些情况下,在GPU上运行推理的结果是不同的:
TF_CUDNN_USE_AUTOTUNE=0
可以减少使用各种批次大小时的差异这种情况发生在TF 1.10和1.13.1
同样,我们的目标是了解: