TensorRT "floating-point 16" 精度模式在 Jetson TX2 上是不确定的吗?



我正在使用TensorRT FP16精度模式来优化我的深度学习模型。我在 Jetson TX2 上使用了这个优化的模型。在测试模型时,我观察到 TensorRT 推理引擎不是确定性的。换句话说,我的优化模型为相同的输入图像提供了 40 到 120 FPS 之间的不同 FPS 值。

当我看到关于 CUDA 的评论时,我开始认为非确定性的来源是浮点运算:

"如果你的代码使用浮点原子学,结果可能与运行不同 运行,因为浮点运算通常不是 关联,以及数据进入计算的顺序(例如 sum(在使用原子时是不确定的。

FP16、FP32 和 INT8 等精度类型是否会影响 TensorRT 的确定性?还是什么?

你有什么吗?

此致敬意。

我通过更改用于测量延迟的函数 clock(( 解决了这个问题。clock(( 函数正在测量 CPU 时间延迟,但我想做的是测量实时延迟。现在我正在使用 std::chrono 来测量延迟。现在,推理结果是延迟确定性的。

那是错误的,(时钟(((

int main ()
{
  clock_t t;
  int f;
  t = clock();
  inferenceEngine(); // Tahmin yapılıyor
  t = clock() - t;
  printf ("It took me %d clicks (%f seconds).n",t,((float)t)/CLOCKS_PER_SEC);
  return 0;
}

像这样使用 Cuda Events (CudaEvent(

cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start);
inferenceEngine(); // Do the inference
cudaEventRecord(stop);
cudaEventSynchronize(stop);
float milliseconds = 0;
cudaEventElapsedTime(&milliseconds, start, stop);

像这样使用chrono:(std::chrono(

#include <iostream>
#include <chrono>
#include <ctime>
int main()
{
  auto start = std::chrono::system_clock::now();
  inferenceEngine(); // Do the inference
  auto end = std::chrono::system_clock::now();
  std::chrono::duration<double> elapsed_seconds = end-start;
  std::time_t end_time = std::chrono::system_clock::to_time_t(end);
  std::cout << "finished computation at " << std::ctime(&end_time)
            << "elapsed time: " << elapsed_seconds.count() << "sn";
}

相关内容

最新更新