cudnn8编译caffe过程(保姆级图文全过程,涵盖各种报错及解决办法)

news2024/12/23 8:58:51

众所周知,caffe是个较老的框架,而且只支持到cudnn7,但是笔者在复现ds-slam过程中又必须编译caffe,我的cuda版本是11.4,最低只支持到8.2.4,故没办法,只能编译了

在此记录过程、报错及解决办法如下;

首先安装依赖:

sudo apt-get install git
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev
libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install python-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

然后git项目源码:

git clone https://github.com/BVLC/caffe.git

然后编译:

cd caffe
mkdir build
cd build
cmake ..
make all
sudo make install 
make runtest

哈哈哈,不会那么顺利哒!

在cmake ..过程中,报了第一个错:

Found cuDNN: ver. ??? found (include: /usr/local/cuda-11.4/include, library: /usr/local/cuda-11.4/lib64/libcudnn.so) CMake Error at cmake/Cuda.cmake:227 (message): cuDNN version >3 is required. Call Stack (most recent call first): cmake/Cuda.cmake:255 (detect_cuDNN) cmake/Dependencies.cmake:85 (include) CMakeLists.txt:49 (include)

什么原因呢,是因为CMake 找不到或者无法正确检测到 cuDNN 的版本。错误消息中提到 “cuDNN version >3 is required”,但它没有成功识别你安装的 cuDNN 版本,但是不可能啊,我们安装了啊。 

直接说解决办法;修改cmake/Cuda.cmake ,  将里面的"cudnn.h" 全部用 "cudnn_version.h"代替

然后是第二个错:找不到cublas

说找不到cuda_cublas的一系列位置,这不可能,我安装了呀,先find一下:

 

果然有,那就set一下,在caffe的编译目录里cmake,找到相应的cuda.cmake,然后找CUDA_cublas_LIBRARY,在前添加行

set(CUDA_CUBLAS_LIBRARIES /usr/local/cuda/targets/x86_64-linux/lib/libcublas.so
)

这回这个问题过了,然后在make all过程中开始出错:

对了,这个方法还能解决

../lib/libcaffe.so.1.0.0:对‘cublasSetStream_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasDdot_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasDaxpy_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasDscal_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasScopy_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasSgemv_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasSdot_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasDcopy_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasDestroy_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasSgemm_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasDgemv_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasDasum_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasGetStream_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasSaxpy_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasDgemm_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasSscal_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasSasum_v2’未定义的引用 ../lib/libcaffe.so.1.0.0:对‘cublasCreate_v2’未定义的引用
等一系列关于cublas*_v2的未定义的引用错误。

说是cudnn_conv_layer.cpp第131行报错

上网上一查,这是因为cudnn8里没有cudnnGetConvolutionForwardAlgorithm()这个函数了,改成了cudnnGetConvolutionForwardAlgorithm_v7(),也没了CUDNN_CONVOLUTION_FWD_SPECIFY_WORKSPACE_LIMIT这个宏定义

那么改呗:

将 src/caffe/layers/cudnn_conv_layer.cpp:中的相关位置reshape函数替换成下面的:

template <typename Dtype>
void CuDNNConvolutionLayer<Dtype>::Reshape(
    const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top) {
  ConvolutionLayer<Dtype>::Reshape(bottom, top);
  CHECK_LE(2, this->num_spatial_axes_)
      << "CuDNNConvolution input must have 2 spatial axes "
      << "(e.g., height and width). "
      << "Use 'engine: CAFFE' for general ND convolution.";
  bottom_offset_ = this->bottom_dim_ / this->group_;
  top_offset_ = this->top_dim_ / this->group_;
  const bool forced_3d = this->forced_3d_;
  const int height = bottom[0]->shape(this->channel_axis_ + 1 + forced_3d);
  const int width = bottom[0]->shape(this->channel_axis_ + 2 + forced_3d);
  const int height_out = top[0]->shape(this->channel_axis_ + 1 + forced_3d);
  const int width_out = top[0]->shape(this->channel_axis_ + 2 + forced_3d);
  const int* pad_data = this->pad_.cpu_data();
  const int pad_h = pad_data[0];
  const int pad_w = pad_data[1];
  const int* stride_data = this->stride_.cpu_data();
  const int stride_h = stride_data[0];
  const int stride_w = stride_data[1];
  #if  CUDNN_VERSION_MIN(8, 0, 0)
  int RetCnt;
  bool found_conv_algorithm;
  size_t free_memory, total_memory;
  cudnnConvolutionFwdAlgoPerf_t     fwd_algo_pref_[4];
  cudnnConvolu

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2194630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

李宏毅 X 苹果书 自注意力机制 学习笔记下

b1 &#xff0c;b2...不是依序产生&#xff0c;而是同时被计算好的 从矩阵乘法角度看待self-attention运作过程 矩阵运算表示每一个a都要产生 a k v的操作如下&#xff1a; 矩阵运算表示的计算如下&#xff1a; A‘是A的normalization &#xff0c;用softmax 矩阵运算表示b计…

Ubuntu有关redis的命令

防火墙&#xff1a; systemctl status firewalld systemctl stop firewalld systemctl disable firewalld.service ifconfig查看ip地址 redis.conf在/etc/redis下&#xff0c;但是得sudo -i进入root模式 进入/etc/redis下开启redis-server服务 查看6379端口是否可以访问 net…

vue3- antd design vue 引入iconfont

文章目录 前言一、新建iconfont项目 前言 vue3项目中&#xff0c;如何引入第三方的iconfont的图标 一、新建iconfont项目 搜索需要的图标&#xff0c;加入购物车&#xff0c;购物车中图片加入项目 下载项目文件&#xff0c;打开压缩包后&#xff0c;将iconfont.js 文件拷贝到…

基于vue框架的大学生心理健康服务平台mwavu(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;学生,心理专家,心理咨询,健康文章,咨询回复,心理案例,监测预警,解压游戏,放松音乐 开题报告内容 基于Vue框架的大学生心理健康服务平台开题报告 一、研究背景与意义 随着社会的快速发展和教育竞争的日益激烈&#xff0c;大学生面临着…

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz

SpringBoot教程&#xff08;二十四&#xff09; | SpringBoot实现分布式定时任务之Quartz 简介适用场景Quartz核心概念Quartz 存储方式Quartz 版本类型引入相关依赖方式一&#xff1a;内存方式(MEMORY)存储实现定时任务1. 定义任务类2. 定义任务描述及创建任务触发器3. Quartz的…

VirtualBox Ubuntu22.04 NOI linux2.0 Terminal无法打开 终端打不开 两步解决法儿

新安装的虚拟机无法打开Terminal&#xff0c;从应用列表中单击Terminal&#xff0c;左上角任务栏会出现Terminal&#xff0c;并且鼠标转圈&#xff0c;但是过一会左上角Terminal消失&#xff0c;就像一切都没有来过。 解决办法&#xff1a; CTRL ALT F3 进入命令行模式&…

【自然语言处理】补充:基于向量空间的分类器

【自然语言处理】补充:基于向量空间的分类器 文章目录 【自然语言处理】补充:基于向量空间的分类器1. 特征选择2. 基于向量空间的分类方法3. Rocchio4. KNN5. 线性分类器1. 特征选择 特征选择 文本分类中,通常要将文本表示在一个高维空间下,每一维对应一个词项许多维上对应…

如何基于vite实现清除特定环境下的console和debugger

一、解决方法 方法一&#xff1a;使用esbuild 直接在vite.config.ts文件中写&#xff0c;无需下载插件 export default defineConfig(({ mode }) > {// 环境变量const env loadEnv(mode, root, "");return {base: env.VITE_PUBLIC_PATH,plugins: [vue(),...],…

中国书法-孙溟㠭浅析碑帖《九成宫醴泉铭》

中国书法孙溟㠭浅析碑帖《九成宫醴泉铭》 《九成宫醴泉铭》是由魏征撰文、欧阳询书丹&#xff0c;唐贞观六年&#xff08;公元632年&#xff09;立碑&#xff0c;篆书体题碑额。内容记载了唐太宗李世民在九成宫避暑山庄发现涌泉的事。 书法法度森严&#xff0c;腴润中见峭劲&…

图文并茂解释水平分表,垂直分表,水平分库,垂直分库

文章目录 1.垂直角度(表结构不一样)垂直分表:垂直分库&#xff1a; 2.水平角度(表结构一样)水平分库&#xff1a;水平分表&#xff1a; 1.垂直角度(表结构不一样) 垂直分表: 将一个表字段拆分成多个表&#xff0c;每个表存储部分字段。好处是避免IO时锁表的次数&#xff0c;分…

数据结构——遍历二叉树

目录 什么是遍历二叉树 根据遍历序列确定二叉树 例题&#xff08;根据先序中序以及后序中序求二叉树&#xff09; 遍历的算法实现 先序遍历 中序遍历 后序遍历 遍历算法的分析 二叉树的层次遍历 二叉树遍历算法的应用 二叉树的建立 复制二叉树 计算二叉树深度 计算二…

java发起POST方法请求第三方接口(编码处理)

文章目录 引言I 案例查询船舶轨迹配置JVM编码参数请求提供方常见问题II 工具类III 知识扩展:程序运行源代码各个阶段对编码的处理Java源码--->字节码Java字节码--->虚拟机--->操作系统操作系统-->显示设备引言 使用场景: 调用第三方平台接口 I 案例 查询船舶…

【MySQL】--数据类型

文章目录 1. 选择数据库1.1 语法 2. 查询当前选中的数据库2.1 语法 3. 常见数据类型分类4. 数据值类型4.1 类型列表4.2 数据类型取值范围 5. 字符串类型5.1 类型列表5.2 关于排序5.3 CHAR和VARCHAR的区别5.4 如何选择CHAR和VARCHAR5.5 VARCHAR与TEXT的区别 6. 日期类型6.1 类型…

基于SSM的仿win10界面的酒店管理系统

基于SSM的仿win10界面的酒店管理系统 运行环境: jdk1.8 eclipse tomcat7 mysql5.7 项目技术: jspssm&#xff08;springspringmvcmybatis&#xff09;mysql 项目功能模块&#xff1a;基础功能、房间类型、楼层信息、附属功能

重学SpringBoot3-集成Redis(六)之消息队列

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;六&#xff09;之消息队列 1. 什么是发布/订阅&#xff08;Pub/Sub&#xff09;&#xff1f;2. 场景应用3. Spring Boot 3 整合 R…

EtherNet/IP 转 EtherNet/IP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899 协议转换通信网关 EtherNet/IP 转 EtherNet/IP GW系列型号 MS-GW22 概述 简介 MS-GW22 是 EtherNet/IP 和 EtherNet/IP 协议转换网关&#xff0c;…

4.扩散模型的似然函数最大化(1)

1.似然函数最大化 扩散模型的训练目标是负的对数似然的一个变分下界(VLB)。在本节中&#xff0c;我们总结并调查最近关于扩散模型的似然最大化的工作。首先我们介绍似然函数最大化的意义&#xff0c;然后重点讨论3种类型的方法:噪声调度优化、逆向方差学习和精确的对数似然估计…

20年408数据结构

第一题&#xff1a; 解析&#xff1a;这种题可以先画个草图分析一下&#xff0c;一下就看出来了。 这里的m(7,2)对应的是这图里的m(2,7),第一列存1个元素&#xff0c;第二列存2个元素&#xff0c;第三列存3个元素&#xff0c;第四列存4个元素&#xff0c;第五列存5个元素&#…

胤娲科技:00后揭秘——AI大模型的可靠性迷局

当智能不再“靠谱”&#xff0c;我们该何去何从&#xff1f; 想象一下&#xff0c;你向最新的GPT模型提问&#xff1a;“9.9和9.11哪个大&#xff1f;”这本应是个小菜一碟的问题&#xff0c;却足以让不少高科技的“大脑”陷入沉思&#xff0c; 甚至给出令人啼笑皆非的答案。近…

卡码网104.建造最大岛屿

题目 104. 建造最大岛屿 (kamacoder.com) 代码&#xff08;ACM 首刷看解析&#xff09;&#xff1a; #include<iostream> #include<vector> #include<unordered_map> #include<unordered_set> using namespace std;int dir[4][2] {1,0,-1,0,0,1,0,-…