当前位置: 首页 > news >正文

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

众所周知,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 int height = bottom[0]->shape(this->channel_axis_ + 1 );const int width = bottom[0]->shape(this->channel_axis_ + 2 );const int height_out = top[0]->shape(this->channel_axis_ + 1 );const int width_out = top[0]->shape(this->channel_axis_ + 2 );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];cudnnConvolutionBwdDataAlgoPerf_t bwd_data_algo_pref_[4];//get memory sizescudaMemGetInfo(&a

相关文章:

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

众所周知,caffe是个较老的框架,而且只支持到cudnn7,但是笔者在复现ds-slam过程中又必须编译caffe,我的cuda版本是11.4,最低只支持到8.2.4,故没办法,只能编译了 在此记录过程、报错及解决办法如下; 首先安装依赖: sudo apt-get install git sudo apt-get install lib…...

Docker安装Nginx

前提&#xff1a;Docker已安装好&#xff0c;本人使用的为自带docker的云服务器&#xff0c;docker常用命令已掌握&#xff0c;yjj为在根目录创建的一个文件夹&#xff0c;可自行修改对应的目录。 1、安装镜像&#xff0c;可去dockerhub上面找&#xff0c;一般都是组件名称。do…...

大数据治理:构建新时代数据生态的关键

摘要 随着信息技术的飞速发展和数字化浪潮的席卷,大数据已成为当今社会的核心资源。如何有效治理大数据,不仅关系到数据资源的利用效率,还对隐私保护、网络安全和社会秩序产生深远影响。本文深入探讨了大数据治理的概念、面临的挑战以及治理框架的构建,从技术、法律和伦理等…...

Leetcode 1223 LCA of Deepest TreeNode

题意&#xff0c;找到所有最深的叶子节点的LCA https://leetcode.com/problems/lowest-common-ancestor-of-deepest-leaves/description/ 第一个想法是模块的想法, LCA 找到所有最深的叶子节点两两组合 可行&#xff0c;但是算法复杂度很高而且你先要从顶到下&#xff0c;再从…...

C++从入门到起飞之——红黑树 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1. 红⿊树的概念 2. 红⿊树的实现 2.1 构建整体框架 2.2 红黑树的插入 2.3 红黑树的验证 2.4 红黑树…...

Java基于SSM微信小程序物流仓库管理系统设计与实现(lw+数据库+讲解等)

选题背景 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…...

[LeetCode] 733. 图像渲染

题目描述&#xff1a; 有一幅以 m x n 的二维整数数组表示的图画 image &#xff0c;其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr , sc 和 color 。你应该从像素 image[sr][sc] 开始对图像进行上色 填充 。 为了完成 上色工作&#xff1a; 从初始像素…...

智能EDA小白从0开始 —— DAY23 PyAether深度解析与技术展望

引言&#xff1a;技术革新与行业需求的碰撞 在半导体行业快速发展的今天&#xff0c;芯片设计的复杂性和对效率的要求日益提升。传统的芯片设计工具和方法已经难以满足当前行业的需求&#xff0c;特别是在面对大规模、高性能芯片的设计时&#xff0c;设计师们面临着前所未有的…...

从深海探测到海洋强国:数字孪生助力海洋装备跨越式发展

海洋广袤无垠&#xff0c;蕴藏着丰富的资源。近现代以来&#xff0c;人类使用各种手段探索海洋探索&#xff0c;广袤无垠的海洋与人类的生活越来越紧密&#xff0c;至少10亿人口摄入的蛋白质来自海洋&#xff0c;全球超过90%的货物、数据信息交流在海洋中转&#xff1b;海洋中丰…...

架构师备考-背诵精华(系统质量属性)

系统质量属性 根据GB/T 16260.1 定义&#xff0c;从管理角度对软件系统质量进行度量&#xff0c;可将影响软件质量的主要因素划分为6种维度特性包括&#xff1a;功能性、可靠性、易用性、效率、维护性、可移植性 功能性 适合性、准确性、互操作性、依从性、安全性 可靠性 容错…...

Pycharm下载安装教程(详细步骤)+汉化设置教程

今天讲解的是Pycharm安装教程和配置汉化设置&#xff0c;希望能够帮助到大家。 创作不易&#xff0c;还请各位同学三连点赞&#xff01;&#xff01;收藏&#xff01;&#xff01;转发&#xff01;&#xff01;&#xff01; 对于刚入门学习Python还找不到方向的小伙伴可以试试…...

网络安全入门

网络安全入门是指学习和了解网络安全基础知识和技术的入门阶段。网络安全是指保护计算机系统、网络和数据免受未经授权的访问、使用、泄露、破坏以及其他威胁的技术和措施。 要入门网络安全&#xff0c;可以按照以下步骤进行&#xff1a; 了解网络安全基本概念&#xff1a;学习…...

你真的了解Canvas吗--解密十【ZRender篇】

目录 👊🏻入口 动画讲解二 Animator Element Transformable graphic 总结 书接上篇你真的了解Canvas吗--解密九【ZRender篇】由于一个bug的篇幅需要续写这个下篇,不过那块的bug内容对我们这篇要讲的动画也是息息相关的,因为Transformable这个类主要就是和变换相…...

mac安装brew时踩坑解决方案

安装包 mac上如果按照git等工具可能会使用brew&#xff0c;例如使用&#xff1a;$ brew install git命令&#xff0c;如果电脑没有按照brew&#xff0c;则会提示&#xff1a;zsh: command not found: brew 解决方案 需要我们打开brew的官网https://brew.sh/&#xff0c;复制…...

基于Handsontable.js + Excel.js实现表格预览和导出功能(公式渲染)

本文记录在html中基于Handsontable.js Excel.js实现表格预览、导出、带公式单元格渲染功能&#xff0c;在这里我们在html中实现&#xff0c;当然也可以在vue、react等框架中使用npm下载导入依赖文件。 Handsontable官方文档 一、开发前的准备引入相关依赖库 <!DOCTYPE ht…...

重学SpringBoot3-集成Redis(十三)之点排行榜实现

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;十三&#xff09;之点排行榜实现 1. 为什么选择 Redis 来实现排行榜&#xff1f;2. 项目环境准备2.1. 添加依赖2.2. 配置 Redis 连…...

Java 中方法参数传递的陷阱

前言 在编程过程中&#xff0c;我们经常会遇到一些看似简单却容易出错的问题。本文将通过一个具体的例子&#xff0c;探讨 Java 中方法参数传递的陷阱&#xff0c;并提供详细的解决方法。希望这篇文章能帮助你在未来的开发中避免类似的错误。 问题背景 假设我们的任务是计算…...

哪家云电脑便宜又好用?ToDesk云电脑、顺网云、达龙云全方位评测

陈老老老板&#x1f934; &#x1f9d9;‍♂️本文专栏&#xff1a;生活&#xff08;主要讲一下自己生活相关的内容&#xff09;生活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f9d9;‍♂️本文简述&#xff1a;讲一下市面上云电脑的对比。 &#x1f9d9;‍♂️上一篇文…...

【汇编语言】寄存器(内存访问)(三)—— 字的传送

文章目录 前言1. 字的传送2. 问题一3. 问题一的分析与解答4. 问题二5. 问题二的分析与解答结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言…...

6 机器学习之应用现状

在过去二十年中&#xff0c;人类收集、存储、传输、处理数据的能力取得了飞速提升&#xff0c;人类社会的各个角落都积累了大量数据&#xff0c;亟需能有效地对数据进行分析利用的计算机算法&#xff0c;而机器学习恰顺应了大时代的这个迫切需求&#xff0c;因此该学科领域很自…...

AI赋能5G核心网故障诊断:从PCAP解析到智能根因分析的工程实践

1. 项目概述&#xff1a;当AI遇见5G核心网故障诊断在5G核心网的运维与测试一线干了这么多年&#xff0c;最头疼的莫过于面对海量的PCAP抓包文件。一个复杂的信令流程下来&#xff0c;动辄几千甚至上万个数据包&#xff0c;工程师需要像侦探一样&#xff0c;逐帧审视协议交互&am…...

别再只用Service了!ROS1 Action通信保姆级教程:从导航进度条到任务取消,手把手教你实现带反馈的机器人任务

别再只用Service了&#xff01;ROS1 Action通信保姆级教程&#xff1a;从导航进度条到任务取消&#xff0c;手把手教你实现带反馈的机器人任务当你的机器人正在执行一个长达10分钟的导航任务时&#xff0c;突然发现目标点设置错误&#xff0c;这时候如果只能干等着任务完成或者…...

用数字逻辑门复刻柏林钟:从二进制编码到硬件实现

1. 项目概述&#xff1a;用数字电路复刻“柏林钟”作为一个在柏林长大的孩子&#xff0c;我从小就对库达姆大街上的那座“柏林钟”着迷。它不像传统时钟那样用指针或数字告诉你时间&#xff0c;而是通过几排不同颜色的发光方块&#xff0c;以一种近乎艺术的方式呈现时间。这种独…...

SSE 基础知识

SSE 基础知识 一、概念定义 SSE 全称 Server-Sent Events&#xff0c;是基于HTTP协议的服务器单向数据推送技术。 建立一次长连接后&#xff0c;服务端可主动持续向前端推送数据&#xff0c;无需客户端反复轮询请求。 二、核心特点 单向通信&#xff1a;仅服务器 → 客户端发送…...

告别浪费!SolidWorks企业级共享方案,实现降本增效全攻略

还在为 SolidWorks 高昂的硬件投入和混乱的图纸管理头疼&#xff1f;告别“一人一机”的浪费模式&#xff0c;企业级共享方案才是降本增效的正解。这套攻略基于“1 台高性能服务器 云飞云共享云桌面”架构&#xff0c;帮你把硬件成本砍掉 60%&#xff0c;把软件利用率翻倍。一…...

C++ vector容器总结

vector基本概念功能&#xff1a;vector数据结构和数组非常相似&#xff0c;也称为单端数组vector与普通数组区别&#xff1a;不同之处在于数组是静态空间&#xff0c;而vector可以动态扩展动态扩展&#xff1a;并不是在原空间之后续接新空间&#xff0c;而是找更大的内存空间&a…...

Claude Agent SDK 从 0 到 1 快速上手教程

Claude Agent SDK 从 0 到 1 快速上手教程 什么是 Claude Agent SDK? Claude Agent SDK 是 Anthropic 官方推出的用于构建 AI 智能体的开发工具包。它基于 Claude Code 构建,让开发者能够以编程方式创建、扩展和定制由 Claude 驱动的应用程序。与简单的聊天机器人不同,基于…...

手机也能玩转无人机仿真:用安卓QGC App连接同一WiFi下的PX4 JMAVSim模拟器

手机也能玩转无人机仿真&#xff1a;用安卓QGC App连接同一WiFi下的PX4 JMAVSim模拟器 无人机开发者和爱好者们&#xff0c;是否曾想过用手机就能完成整个无人机仿真测试流程&#xff1f;告别笨重的电脑束缚&#xff0c;只需一部安卓设备&#xff0c;就能在沙发上调试飞控算法。…...

SpringBoot WebClient 介绍

目录一、什么是 WebClient&#xff1f;二、 WebClient 能解决什么问题&#xff1f;三、WebClient 和 RestTemplate 的区别四、WebClient 的核心优势1. 非阻塞&#xff08;Non-Blocking&#xff09;2. 支持异步3. 链式 API 更现代五、WebClient 的核心对象六、Mono 和 Flux 是什…...

【独家首发】Sora 2 AVI支持并非“开箱即用”:3层封装校验机制详解(RIFF→AVI→OpenCV Mat内存映射链路图解)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Sora 2 AVI支持并非“开箱即用”&#xff1a;核心矛盾与技术定位 Sora 2 的官方文档与发布说明中明确将 AVI 视为“实验性容器支持”&#xff0c;而非默认启用的输入格式。其底层解码栈基于 FFmpeg 5.1 构建&…...