Libtorch---py训练,c++推断---编程记录

Libtorch1.6.0:

VS2017下用release进行程序调试及无法打断点问题:

VS2017下用release进行程序调试及无法打断点问题_wwwsssZheRen的博客-CSDN博客_vs release为什么会跳到断点

c++与libtorch混合编程:std:runtime_error及c10:error报错分析:

c++与libtorch混合编程:std:runtime_error及c10:error报错分析_小跑的芥子的博客-CSDN博客_libtorch c10:error

1、出现std:runtime_error的原因还可能是缺少caffe2_nvrtc.dll的原因,把它放在.exe的相同文件夹下

2、实事证明在py的网络中包含了torch.cat反卷积时,在Libtorch1.6.0中仍然能调用

3、py的torch版本一定要与Libtorch的版本一致

4、当一个torch::Tensor送到CUDA中时,eg:    不能只用  img.to(torch::kCUDA),  而是用  img = img.to(torch::kCUDA), 这步有点坑;

5、在大量的后处理代码中,自己生成的torch张量一定要送到设备(cpu/cuda)中去,eg:torch::ones({ pt.sizes()[0], 1 }).to(device_all), 不然就会出现CPU上正常运行,cuda上各种报错;

6、推荐在python中用cpu转换出pt。因为,用gpu转换后的模型文件,在c++中只能用gpu加载,无法用cpu加载;但是用cpu转换后的模型,在c++中既能用cpu,也能用gpu加载。

7、如果模型是在GPU推断的,那么从gpu中取数据到cpu或内存里时一定会占用一定时长,在RTX1060上亲测是50ms左右,当然,可能与cpu有关。例如以下操作:

float left_top_x = temp[j][0].item();
result[i].index();
torch::ones({ 2, 3 }).to(device_all);

这些操作只要有一个出现就会消耗时长,再出现类似操作时就不会咋消耗时间。这点感觉就像一个鸿沟一样,无法从代码层面逾越,至少目前我还不行。

Libtorch1.9.0  + cuda10.2  可正常使用

Libtorch1.11.0  + cuda11.3  可正常使用

Libtorch1.12.0 与Libtorch1.12.1的gpu-debug与cpu-debug 都会报“Debug error”的错误

Libtorch1.13.0 的gpu-debug报“Debug error”的错误

你可能感兴趣的:(libtorch/c++,c++,python,深度学习)