我正在使用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";
}