代码环境移植问题

从P100将CenterNet移植到P4上运行,遇到一些问题,解决起来很棘手,记录下来。

 

P100环境:

CUDA 10.0

gcc版本 7.3.0

pytorch 1.0.1

 

P4原始环境:

CUDA 9.0

gcc版本 4.8.5

pytorch 1.1.0

 

移植步骤:

  1. 代码拷贝
  2. 数据移植
  3. 配环境

 

 

遇到的问题及解决方法:

1.运行代码时DCNv2报错:

Installation issue: undefined symbol: __cudaPopCallConfiguration · Issue #19 · rusty1s/pytorch_scatter

原因:编译DCNv2时的cuda版本和编译pytorch的时候不一样

解决方法:不能直接用移植的代码,重新下载CenterNet中DCNv2库。

 

2.运行代码的时候DCNv2报错如下:

PyTorch no longer supports this GPU because it is too old.

原因:pytorch的版本和CUDA版本不对应

解决方法:需要在安装pytorch的时候确认版本和cuda版本对应,必要的话使用pytorch官网给出的命令。如果cuda环境有变化,需要重新安装pytorch。可以用 'torch.cuda.is_available()' 确定cuda版本的pytorch是否安装正确。

还有一种方法是升级驱动。

 

3.运行时报错Segmentation fault

原因:使用faulthandler调试加打印输出,发现问题出在DCNv2的库中,但是库编译时没有报错。

解决方法:一开始用的解决方法是,从原作者DCNv2库中下载,因为pytorch1.1.0的变化,改变其中一行代码,重新编译。编译未报错,但运行仍有问题。

后来发现是gcc有问题,gcc在4.9.0以上才能正确编译pytorch,而以下的版本编译不会报错,但是使用有问题,因此升级gcc到4.9.4版本。

 

4.运行代码时报错如下:

undefined symbol: _ZN3c105ErrorC1 ENS_14SourceLocationERKSs

原因:pytoch中 _GLIBCXX_USE_CXX11_ABI1,但是c++编译是 _GLIBCXX_USE_CXX11_ABI0,因此对不上

实际原因是pytorch编译时候用到的gcc与代码中c++库用到的gcc版本不同

解决方法

卸载conda,重新安装conda,此时conda环境用到的gcc与c++编译库时版本一样。

 

问题解决。

你可能感兴趣的:(代码环境移植问题)