记录复现论文过程遇到的编译相关问题

复现论文过程中遇到一些问题,记录下来

无root权限安装gcc6.3.0

由于用的是实验室的服务器,直接更新服务器的gcc不可行。

  1. 下载gcc6.3.0并解压

  2. mkdir一个目录build,与gcc解压的目录平行,进入build

  3. 用configure生成makefile

../gcc-6.3.0/configure --disable-checking --enable-languages=c,c++,fortran --disable-multilib --prefix=[自己目录的绝对路径]/usr --enable-threads=posix
  1. make和make install
make -j
make install
  1. 最后将 [自己目录]/usr/bin加入PATH中,即:
PATH=[自己目录]/usr/bin:$PATH

可以将这一段写进.bashrc的最后面,以后就不用配了

echo PATH=[自己目录]/usr/bin:$PATH >> ~/.bashrc

关于include失败问题:

编译过程中出现了一些依赖,涉及到pytorch中的库,include失败。

1、直接指定环境变量:

  • C_INCLUDE_PATH
  • CPLUS_INCLUDE_PATH
  • OBJC_INCLUDE_PATH

上面三个分别表示C、C++和Object-C的lib路径,使用方法和PATH环境变量相同,这里只要指定C和C++的就好。

C_INCLUDE_PATH=[目标库]:$C_INCLUDE_PATH

可以使用find+grep命令找到缺少的库。

find ~/ | grep torch/extension

2、编译脚本指定路径

在github的issue里面找到另一个解决方案,在使用nvcc编译的时候用-I [路径]来指定,由于是使用sh脚本,直接更改脚本就好。这个方案不用动环境,移动起来更方便。

nvcc -c -o rroi_align.cu.o rroi_align_kernel.cu \
     -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC $CUDA_ARCH \
     -I /home/*/anaconda3/envs/fots3/lib/python3.7/site-packages/torch/include \
     -I /home/*/anaconda3/envs/fots3/lib/python3.7/site-packages/torch/include/torch/csrc/api/include \
     -I /home/*/anaconda3/envs/fots3/include/python3.7m \
     -I /home/*/cuda10.1/targets/x86_64-linux/include

so库找不到

解决/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found问题
两步:
1、确定so有目标库,如果没有去搜索下载最新的
2、添加so库路径的环境变量

参考这两个文章,strings命令+grep命令确定so库函数

解决/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found问题

Linux - /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.8’ not found

so库import问题:

检查能import的后缀类型:(一般就是.py .pyc .so)
python import找不到so库的可能原因

对于符合后缀但import失败的情况,原因可能是python3不支持相对路径导入,可以用

from . import [so库名]

代替

import [so库名]

protobuf版本问题

运行的时候提醒protobuf版本不对,提示不高于3.5.1但是使用的版本是3.15.1。在解决过程中问题突然消失,原因不明。目前确定涉及到的位置有两个:

  1. pip管理下的protobuf(由reqs.txt引入)
  2. 与python同目录下的protoc(conda创建环境时,通过提供的spec-file.txt引入)

记录一下自己做过的事情,不知道是哪一件解决了bug:

  1. pip更新protobuf版本至3.5.1,但存在大量包依赖,例如torchvision、tensorboard等需要跟着降级。
  2. 重新使用conda创建环境引入低版本protoc
  3. 在PATH环境变量中加入protobuf相关的库并放在最前面,重新编译so文件
  4. 重新安装caffe2(在解决问题过程中发现它与protobuf相关)

由于提供的依赖环境就是使用3.15版本,猜测是在某些地方引入了低版本的protobuf,可能是3.5.1版本甚至更低。

你可能感兴趣的:(pytorch,人工智能)