在linux上编译darknet,曙光机用户模式下详细过程还原

系统说明

RedHat7.2 x64
曙光机集群用户模式,非gpu,以提交作业的形式提交到gpu节点进行计算。

安装的经验教训

  • 若原系统有显卡驱动,版本比cuda-x.x对应的驱动版本低,则卸载,再直接安装cudax.x,全部安装(包括驱动)。
  • 若原系统显卡驱动版本比cuda-x.x对应的驱动版本高,则安装cudax.x时,不选择安装cuda-driver,其他三个都安装。
  • 若安装在默认路径下,只需指定nvcc位置,若安装在非默认路径下,还需修改GPU=1中,COMMON和LDFLAGS的位置(为实际安装位置),当然如果安装CUDNN同样要指定位置。
  • 若编译通不过,仔细检查出错位置,应该是Makefile路径没有设置正确。
  • 若编译通过,但运行时提示找不到库,应该是没有设置环境变量,需要将库所在位置添加到环境变量中(LD_LIBRARY_PATH)(ps:在网上也看到过-Wl, -rpath的方式,但没有弄成功)

如果根据以上步骤没有成功
如果你也用曙光机集群环境,用户模式,无法自己给gpu节点上安装cuda和显卡驱动,或者情况类似,可以继续往下看,全过程还原~
如果是单机,可以只看 整个配置过程还原---编译darknet---编译---阶段二、三,感兴趣可以全看@_@
(经验有限,有写的不对地方欢迎批评指正~)

整个配置过程还原

之前的环境

整个系统之前装的是cuda-7.5的版本以及353.93的驱动版本(GPU节点和非GPU节点,用户模式和root模式)

安装cuda

因想用cuda10.1版本,所以下载了cuda10.1,安装时直接默认安装(包括驱动也安装了)(root模式非gpu节点安装的)

编译darknet

修改Makefile文件

GPU=1
以及ifeq(($GPU),1)下,COMMON的值和LDFLAGS的值,修改为实际库路径

编译

阶段一:试错

  • 错误提示:cannot find -lcuda
  • 发现修改后的库路径/lib64下没有libcuda.so,在系统中定位(locate libcuda.so),最终找到,并在Makefile中的LDFLAGS下指定位置,与原位置并列,即:-L/…. -L/…. -lcuda -lcudart -lcurand -lcublas
  • 再次编译,不报错了,编译通过
  • 运行,提示仍然找不到库,ldd darknet,发现lcuda等库后面显示not found
  • 此时将LDFLAGS中的那几个位置添加到环境变量(LD_LIBRARY_PATH中)
  • 再次运行,提示cuda driver 不够匹配cuda toolkit版本
  • 找了半天问题,终于想通普通用户非gpu节点下没有显卡,所以不能运行这个程序
  • 提交到GPU节点,仍然提示该错误。查看该gpu节点的驱动版本,353.93,比cuda10.1对应的驱动版本低,所以出错。

阶段二:验证

  • 基于以上,将cuda改用系统原有的cuda7.5,同样的过程,提交到gpu上,仍提示版本不匹配问题。但cuda的测试程序deviceQuery却可以跑通,发现deviceQuery没有使用libcuda等这四个库,而darknet使用这些库了。

阶段三:重新开始

  • 查找出错地方的输出,查找源代码注释,提示是版本不够。实在没辙了,在gpu节点上将原来的gpu驱动和cuda全卸载重启,并重装了cuda-10.1以及对应的驱动版本,安装在默认路径,再重启。
  • 利用最开始没修改的Makefile,修改两处:GPU=1,和NVCC=nvcc所在的路径/nvcc
  • 提交到GPU节点上,编译成功,运行提示找不到库,设置环境变量找不到的库所在的位置(LD_LIBRARY_PATH),指定时需注意要在gpu节点上指定,普通用户无法直接在gpu节点上操作,只能通过提交作业的方式,所以在脚本中写设置临时环境变量的语句export LD_LIBRARY_PATH=$ LD_LIBRARY_PATH:/……
  • 再运行,成功。

CUDNN环境配置

  • 由于gpu节点上没有安装cudnn,考虑在用户模式下非gpu节点安装cudnn,以设置环境变量的方式,让gpu节点找到libcudnn.so,同上,先修改Makefile中CUDNN对应路径,改为实际路径,再在作业脚本文件中设置环境变量。提交,运行成功。

配置环境小结

  • 需要注意的是对于默认路径,在脚本文件中设置环境变量提交到gpu节点是不管用的,如在普通节点下/usr/local//lib中的文件和在gpu节点中的/usr/local/lib文件可能不相同,是两个路径,但/public/home/用户名/...路径在gpu节点也能找到。所以非必须安装到默认路径,一般不安装软件到默认路径,否则提交到其他节点时可能会找不到文件,尽量安装在自己的用户目录下,opencv安装是同样道理。
posted @ 2019-05-07 14:30  sky喵  阅读(1234)  评论(0编辑  收藏  举报