ubuntu 20.04 GPU 装darknet(未编译opencv)

目的:装cudnn->装ubuntu下的darknet
下载了deb 最上层的ubuntu版本的deb,安装之后还是不识别
下载archive 的版本 基于windows 经验 优先下载的11.4版本的cudnn配11.6的cuda,不好使
xz -d ***.tar.xz 解压得到tar文件
tar -xvf ***.tar 解压出来文件夹
解压出来的11.5cudnn也不支持,上网查找,说可能darknet不支持8以上的cudnn
很迷 因为我的win上的cuda版本是11.6

由此上网查找cuda版本
确实想过安装一个低版本的cuda 使用ananconda来回切换可能还蛮帅的 不过没空 所以在网上找了一个新版本的darknet
https://codechina.csdn.net/mirrors/alexeyab/darknet?utm_source=csdn_github_accelerator
编译通过,暂时不想编译opencv,编译配置如下,

GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=0
AVX=0
OPENMP=0
LIBSO=0
ZED_CAMERA=0
ZED_CAMERA_v2_8=0

对所有的cuda路径相关进行修改


ifeq ($(GPU), 1)
COMMON+= -DGPU -I/usr/include/
CFLAGS+= -DGPU
ifeq ($(OS),Darwin) #MAC
LDFLAGS+= -L/usr/lib/cuda/lib64 -lcuda -lcudart -lcublas -lcurand
else
LDFLAGS+= -L/usr/lib/cuda/lib64 -lcuda -lcudart -lcublas -lcurand
endif
endif

ifeq ($(CUDNN), 1)
COMMON+= -DCUDNN
ifeq ($(OS),Darwin) #MAC
CFLAGS+= -DCUDNN -I/usr/include
LDFLAGS+= -L/usr/lib/cuda/lib64 -lcudnn
else
CFLAGS+= -DCUDNN -I/usr/include
LDFLAGS+= -L/usr/lib/cuda/lib64 -lcudnn
endif
endif

编译通过,
提示
error while loading shared libraries: libcudnn.so.8: cannot open shared object file: No such file or directory
这里说一下我的cuda 是sudo apt-get 下载的所以目标目录和很多方式都不大一样 不在usr/local 在下面这个路径

(base) rui@ubuntu-server:~/darknet-master$ whereis cuda
cuda: /usr/lib/cuda /usr/include/cuda.h

这里注意修改路径
export LD_LIBRARY_PATH=“/usr/lib/cuda/lib64”
再次调用编译好的darknet

(base) rui@ubuntu-server:~/darknet-master$ export LD_LIBRARY_PATH="/usr/lib/cuda/lib64"
(base) rui@ubuntu-server:~/darknet-master$ ./darknet
usage: ./darknet <function>

看起来还不错
运行一下测试语句

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

新的报错出现了

Could not load library libcudnn_ops_infer.so.8. Error: libcublas.so.11: cannot open shared object file: No such file or directory

这里注意,之前的cudnn的拷贝目标地址我参考的如下文章
https://blog.csdn.net/ai_faker/article/details/111687801
执行的语句类似于

sudo cp cuda/include/cudnn*.h /usr/include/
sudo cp cuda/lib64/libcudnn* /usr/lib/cuda/lib64/
sudo chmod a+r /usr/include/cudnn.h
sudo chmod a+r /usr/lib/cuda/lib64/libcudnn*
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

也就是说我的路径位置在就是上述两个目标位置 先去两个目标位置看看这玩意有没有

(base) rui@ubuntu-server:/usr/lib/cuda/lib64$ ls
libcudnn_adv_infer.so           libcudnn_cnn_infer.so.8.2.4     libcudnn_ops_infer_static.a
libcudnn_adv_infer.so.8         libcudnn_cnn_infer.so.8.3.3     libcudnn_ops_infer_static_v8.a
libcudnn_adv_infer.so.8.2.4     libcudnn_cnn_infer_static.a     libcudnn_ops_train.so
libcudnn_adv_infer.so.8.3.3     libcudnn_cnn_infer_static_v8.a  libcudnn_ops_train.so.8
libcudnn_adv_infer_static.a     libcudnn_cnn_train.so           libcudnn_ops_train.so.8.2.4
libcudnn_adv_infer_static_v8.a  libcudnn_cnn_train.so.8         libcudnn_ops_train.so.8.3.3
libcudnn_adv_train.so           libcudnn_cnn_train.so.8.2.4     libcudnn_ops_train_static.a
libcudnn_adv_train.so.8         libcudnn_cnn_train.so.8.3.3     libcudnn_ops_train_static_v8.a
libcudnn_adv_train.so.8.2.4     libcudnn_cnn_train_static.a     libcudnn.so
libcudnn_adv_train.so.8.3.3     libcudnn_cnn_train_static_v8.a  libcudnn.so.8
libcudnn_adv_train_static.a     libcudnn_ops_infer.so           libcudnn.so.8.2.4
libcudnn_adv_train_static_v8.a  libcudnn_ops_infer.so.8         libcudnn.so.8.3.3
libcudnn_cnn_infer.so           libcudnn_ops_infer.so.8.2.4     libcudnn_static.a
libcudnn_cnn_infer.so.8         libcudnn_ops_infer.so.8.3.3     libcudnn_static_v8.a

显然,有的,首先,排除我没有拷贝过来,那么问题就在于没有缺个软连接
把包含路径写入ld时候会报错

(base) rui@ubuntu-server:/etc/ld.so.conf.d$ sudo ldconfig
/sbin/ldconfig.real: /usr/lib/cuda/lib64/libcudnn.so.8 不是符号链接

/sbin/ldconfig.real: /usr/lib/cuda/lib64/libcudnn_ops_infer.so.8 不是符号链接

/sbin/ldconfig.real: /usr/lib/cuda/lib64/libcudnn_adv_infer.so.8 不是符号链接

/sbin/ldconfig.real: /usr/lib/cuda/lib64/libcudnn_ops_train.so.8 不是符号链接

/sbin/ldconfig.real: /usr/lib/cuda/lib64/libcudnn_cnn_infer.so.8 不是符号链接

/sbin/ldconfig.real: /usr/lib/cuda/lib64/libcudnn_adv_train.so.8 不是符号链接

/sbin/ldconfig.real: /usr/lib/cuda/lib64/libcudnn_cnn_train.so.8 不是符号链接

执行了一坨创建软连接的语句


sudo ln -sf /usr/lib/cuda/lib64/libcudnn_ops_infer.so.8.2.4 /usr/lib/cuda/lib64/libcudnn_ops_infer.so.8
sudo ln -sf /usr/lib/cuda/lib64/libcudnn_adv_infer.so.8.2.4 /usr/lib/cuda/lib64/libcudnn_adv_infer.so.8
sudo ln -sf /usr/lib/cuda/lib64/libcudnn_ops_train.so.8.2.4 /usr/lib/cuda/lib64/libcudnn_ops_train.so.8
 sudo ln -sf /usr/lib/cuda/lib64/libcudnn_cnn_train.so.8.2.4 /usr/lib/cuda/lib64/libcudnn_cnn_train.so.8
 sudo ln -sf /usr/lib/cuda/lib64/libcudnn_adv_train.so.8.2.4 /usr/lib/cuda/lib64/libcudnn_adv_train.so.8
sudo ln -sf /usr/lib/cuda/lib64/libcudnn_cnn_infer.so.8.2.4 /usr/lib/cuda/lib64/libcudnn_cnn_infer.so.8
sudo ldconfig

没有用
根据调查 大概率是cuda版本不对
然后执行了下面这条语句
conda install cudatoolkit==11.1.1
下载了之后还是找不到,反向推理不是没下是路径不对,因为默认打开的anaconda环境,而且用conda下载的 ,所以大概率在conda下,而conda 下的环境我没有加到过LD路径
把路径加到/etc/ld.so.conf.d下的随便那个文件里
/home/rui/anaconda3/lib
然后
sudo ldconfig
然后回到darknet 路径下面
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

bicycle: 99%
dog: 100%
truck: 93%
明天拿随便什么数据集测试一下训练语句,成了的话就先这样

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