目的:装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%
然后再拿随便什么数据集测试一下训练语句,成了的话就先这样