Ubuntu 15.04 下编译Caffe2

2023-11-15

深度学习大神贾扬清在四月底发布了最新框架Caffe2,最近在Ubuntu15.04下编译了它的源代码,遇到一些坑,记录下来以供参考。

基本安装次序如官网所述。https://caffe2.ai/docs/getting-started.html?platform=ubuntu&configuration=compile

大概就是先装一些底层支持库,装GPU显卡驱动,装CUDA支持,装cuDNN,再装一些依赖库,然后就可以去GitHub下载源代码编译了。 

前几步问题不大,原来的Caffe一代在装显卡和CUDA时有很多问题 ,这里直接装一个连驱动带CUDA环境的deb文件,很简练。cuDNN装的也很快。但最后一步遇到些麻烦。

首先就是GitHub的访问太慢了,经常是10k/s这样的速度,还是用 git clone 坚持走下来了,大概用了半天的时间。后来发现这样更好:先下载zip文件,然后手动下载third_party里的目录文件(zip里不带,另有些如android,ios环境下的不用可以不管),就可以编译了。

make这个过程问题最多,整理了一下,一一道来。

1. 首先就是速度较慢,应该像之前的习惯,加 -j4或-j8这样的并行加速,官网没有说。在多核CPU的机器上,会快好几倍。

2. 环境依赖最好用最新的。我后来在一台新机器上又装了一次就很顺利,基本就是官网的次序走下来。Ubuntu14.04 + CUDA8.0 + cuDNN8.0v5.1 + OpenCV3.2 ,如果是初学者我建议按照这个配置走,坑少。中间apt-get 各种依赖库时,有一次错误提示:
ValueError: ('Expected version spec in', 'widgetsnbextension ~=2.0.0', 'at', ' ~=2.0.0')
......
更新一下pip就好了:pip install --upgrade pip
3. 如果是现有的机器。比如我的机器上已经装过Caffe,依赖库有些较旧,结果带来一堆问题。

首先CUDA本是7.5,按照Caffe2的说法是支持的,但是中间的make过程中,就出现error提示:
 [ 73%] Building NVCC (Device) object caffe2/CMakeFiles/Caffe2_GPU.dir/sgd/./Caffe2_GPU_generated_adagrad_op_gpu.cu.o
/home/sherif/caffe2/caffe2/utils/conversions.h(137): warning: variable "r" was declared but never referenced
/home/sherif/caffe2/caffe2/utils/math_gpu.cu(136): error: identifier "CUDA_R_16F" is undefined
/home/sherif/caffe2/caffe2/utils/math_gpu.cu(312): error: identifier "CUDA_R_16F" is undefined
/home/sherif/caffe2/caffe2/utils/math_gpu.cu(496): error: identifier "CUDA_R_16F" is undefined
......
一时找不到原因,百度一下也没有。还是要翻Google,先看到一个日文的博客,大概说要把CUDA8.0的路径加上。又看到GitHub上也在讨论这个问题,贾扬清也出现了,讨论的结果说是因为Caffe2用到FP16类型,需要CUDA8.0的支持。(这个讨论还带出另一个问题,有人装了8.0编译时又提示要7.5,后面我也遇到了。)

安装CUDA8.0(同时还必须装cuDNN8.0v5.1版),把默认的cuda路径 /usr/local/cuda 改为 /usr/local/cuda-8.0目录:
添加路径:(直接拷日文,汉字都懂)
gedit ~/.bashrc &
# .bashrcの末尾に追記
 
export  PATH=/usr/ local/cuda-8.0/bin: ${PATH}
 
export  LD_LIBRARY_PATH=/usr/ local/cuda-8.0/lib64: ${LD_LIBRARY_PATH} 

make编译成功,但运行python测试仍然不对,提示找不到Moudle。这是老问题,重新设置PYTHONPATH,还是在 ~/.bashrc加入
export PYTHONPATH=$PYTHONPATH:/home/jasper/code/caffe2/build/python

又出了新的error:加载libcudart.so.7.5时出错,可明明是安装了CUDA8.0,这时才注意到,make的时候,提示CUDA的版本就是7.5,实在找不到原因,只好卸载了CUDA7.5。可这么一折腾,再make时出现如下错误:
Could NOT find CUDA: Found unsuitable version "8.0", but required is exact
version "7.5" (found /usr/local/cuda-8.0)

中间走过一段弯路,以为编译需要gcc5 ,装了以后make就失败了,又听说CUDA8.0不支持gcc5,于是又改回来。实际还是用的gcc4.9.2编译。
 

再找原因,发现github上有人指出解决方法:
sudo rm -rf /usr/local/share/OpenCV
大概是因为以前曾经用CUDA7.5+OpenCV2.4.9配置编译了Caffe,导致CMake发现系统中存在一个指向OpenCV的配置,进而引发了CUDA的版本冲突。所以要删去此目录。然而删除后make,快结束时又出现错误:
[ 92%] Building CXX object caffe2/CMakeFiles/math_gpu_test.dir/utils/math_gpu_test.cc.o
......
CMakeFiles/make_image_db.dir/binaries/make_image_db.cc.o:在函数‘caffe2::ConvertImageDataset(std::string const&, std::string const&, std::string const&, bool)’中:
make_image_db.cc:(.text+0x9e4):对‘cv::imread(cv::String const&, int)’未定义的引用
......
这是没有找到OpenCV的环境,可以CMake怎么没发现?硬着头皮直接去掉OPENCV依赖: 
cmake .. -DUSE_OPENCV=OFF
可以编译通过,但是如此一来就没有 OpenCV支持了,对于图像的测试可能不方便。电脑里以前也有一个手动编译的OpenCV3.1,不过是CUDA7.5的,这次还要用CUDA8.0重新编译。

于是在CMakeLists.txt中修改,第二行加入
set (OpenCV_DIR "/xxx/OpenCV3.1编译后的build目录") 
然后编译,就行了。

以上部分写的很罗嗦,简单说就是这样: 
新机器推荐 Ubuntu14.04 + CUDA8.0 + cuDNN8.0v5.1 + OpenCV3.2。
如果是旧机器,先装CUDA8.0,再cuDNN8.0,然后在此基础上编译OpenCV,配置CMake文件,最后 make(Caffe2的make也是先调用CMake)
 。

这次得到的一些经验是:
依赖库尽量用官方文档里给出的新版本,它是经过较多的测试的。 
新技术新问题查询还是要用Google,国外的技术交流比较频繁开放,国内会晚一段时间,质量也不如国外。 但国内有一点好,中文阅读效率高。所以成熟的技术或常见问题可以用百度。

还没有测试Caffe2的功能,先写到这。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu 15.04 下编译Caffe2 的相关文章

  • Calendar,Date,Timestamp的使用及其转换

    下面列出了Date Timestamp String相互转换 以及通过Calendar创建时间的例子 import java sql Timestamp import java text ParseException import java
  • VTK学习之三维图像切片交互提取(回调函数、观察者-命令模式)

    参考博客 VTK Learning 三维图像切片 二 鼠标交互 回调函数 观察者 命令模式 江南又旧雨的博客 CSDN博客 根据鼠标交互事件 同时实现切片的实时提取功能 上代码 include
  • GOplot

    GOplot 为这个包写笔记 主要是复习一下markdown写作而已 还是建议大家看原作者的英文文档 安装并加载必须的packages 如果你还没有安装 就运行下面的代码安装 install packages GOplot library
  • 两数相加-2

    题目描述 给出两个 非空 的链表用来表示两个非负的整数 其中 它们各自的位数是按照 逆序 的方式存储的 并且它们的每个节点只能存储 一位 数字 如果 我们将这两个数相加起来 则会返回一个新的链表来表示它们的和 您可以假设除了数字 0 之外

随机推荐

  • [SDN]Mininet中的miniedit问题汇总

    作者 清水寺丞 简介 正在学习unity 数据库 计算机通信网络和python 喜欢部署各种奇奇怪怪的小项目 喜欢就点个关注一起学习吧 目录 前言 怎么打开MiniEdit 保存mn与py文件出现问题 为什么我run了拓扑之后终端没有出现m
  • 掌握到胃-奈氏图与伯德图的绘制

    自控笔记 5 4绘制频率特性曲线 一 开环奈奎斯特曲线的绘制 先上步骤 确定起点G j0 和终点G j 中间段由s平面零极点矢量随s j 变化规律绘制 必要时可求出G j 与实轴 虚轴的交点 再看细节 对于一个系统的传递函数 可以将其分解成
  • touch、mkdir、rmdir、cp、mv、rm命令的常用参数的使用

    touch 可创建多个新文件或更新文件的修改日期 touch m t 时间 修改文件的时间 并可以指定修改时间 touch a 将文件的存取时间改为当前时间 mkdir 用于创建一个目录 mkdir p 用于创建目录时 如果父目录不存在 则
  • 基于MATLAB用图解法解方程(附图像与代码)

    目录 一 一元方程图解法 例题1 二 二元方程图解法 例题2 三 多项式型方程 例题 3 一 一元方程图解法 例题1 用图解法求 解 MATLAB代码 clc clear ezplot exp 3 t sin 4 t 2 4 exp 0 5
  • C# 笔记4——如何实现单击放大全屏和退出全屏

    C 笔记4 如何实现单击放大全屏和退出全屏 由于工作需求 需要实现单击放大和退出全屏功能 想了一下 即单击放大时候把播放视频的picturebox的大小设置和屏幕宽高相同 位置设置为屏幕左上角 0 0 即可 单击退出全屏时候把控件大小和位置
  • 扩散模型与生成模型详解

    扩散模型与其他生成模型 什么是扩散模型 扩散模型的简介 生成建模是理解自然数据分布的开创性任务之一 VAE GAN和Flow系列模型因其实用性能而在过去几年中占据了该领域的主导地位 尽管取得了商业上的成功 但它们的理论和设计缺陷 棘手的似然
  • 中国传统节日端午节网页HTML代码 学生网页课程设计期末作业下载 春节大学生网页设计制作成品下载 DW春节节日网页作业代码下载

    HTML5期末大作业 节日网站设计 中国传统节日端午节网页HTML代码 7页 HTML CSS JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作业题材有 个人 美食 公司
  • visio技巧(曲线、连接点、自制模具)

    一 画曲线 1 1 铅笔 任意多边形 弧形都可以画曲线 但曲度不好更改 1 2 鼠标选中连接线 在画布上画一个直角线 选中该线 点击右键 选曲线连接线 随意拉动该线上的连接点可以调整成任意曲度 二 增加 移动 删除图形上的连接点 1 1 增
  • 【Python 基础篇】Python代码 之 程序结构

    目录 前言 一 顺序结构 1 1 分支结构 1 2 双向分支 1 3 多路分支 1 4 if语句补充 二 顺序结构 三 循环结构 while while else for in for else 四 流程控制语句 break continu
  • SparkStreaming知识总结

    一 流式计算的概述 1 1 什么是流式计算 1 数据流与静态数据的区别 数据流指的就是不断产生的数据 是源源不断 不会停止 静态数据指的就是存储在磁盘中的固定的数据 2 流式计算的概念 就是对数据流进行计算 由于数据是炼苗不断的产生的 所以
  • VMware15.5安装win7旗舰版系统

    1 启动vmware 文件 新建虚拟机 2 选择自定义安装 下一步 3 兼容性默认不做修改 下一步 4 安装来源选择稍后安装操作系统 5 选择windows7 64 6 安装位置选择非系统盘位置 放在C盘会拖累系统运行速度 7 8 取决于物
  • PostgreSQL_row_number() over()

    语法 row number over partition by col1 order by col2 desc row number 为返回的记录定义各行编号 pritition by 分组 order by 排序 实例 实例数据来源 利用
  • vue实现文件下载

    原理 a href url 复制代码 实际使用场景 上面的原理中适合开放的资源下载 http请求中无需验证时使用 在实际使用过程中 a标签中的url中直接设置header比较麻烦且不安全 而且从开发规范上api一般上要封装一下 header
  • 华为OD机试 - 最多颜色的车辆(Java)

    题目描述 在一个狭小的路口 每秒只能通过一辆车 假设车辆的颜色只有 3 种 找出 N 秒内经过的最多颜色的车辆数量 三种颜色编号为0 1 2 输入描述 第一行输入的是通过的车辆颜色信息 0 1 1 2 代表4 秒钟通过的车辆颜色分别是 0
  • LeetCode 2545. 根据第 K 场考试的分数排序

    班里有 m 位学生 共计划组织 n 场考试 给你一个下标从 0 开始 大小为 m x n 的整数矩阵 score 其中每一行对应一位学生 而 score i j 表示第 i 位学生在第 j 场考试取得的分数 矩阵 score 包含的整数 互
  • git忽略指定文件夹

    git忽略指定文件夹 如下结构 总共有三个文件夹 假设要忽略第一层的B文件夹 在目录下新建一个 gitignore文件 并填写下面内容 B 假设要忽略第一层的A文件夹 在文件中填写A 的话 会把B文件夹下的A文件夹也忽略了 这个时候可以加上
  • 要称王,先做行业破坏者

    author skate time 2010 06 18 高端阅读78期 原标题为 世界 油王 的职场启示 我的人生 狠 字当头 有极强的故事性 白手起家 狂赚几亿美元 后遭朋友暗算 被踢出一手创办并成功发展40年的公司 同期不得不应对麻烦
  • Linux nrm 运行失败,解决:npm中 下载速度慢 和(无法将“nrm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次)...

    1 解决下载速度 因为我们npm下载默认是 连接国外的服务器 所以网速不是特别好的时候 可能下不了包 安装nrm 使用 npm i nrm g 我们的一般工具包都是下载到全局 安装完毕之后 可以运行 命令 nrm ls ls 表示 list
  • Django-Model层ORM之查询操作(六)

    目录 一 Django查询相关API all 查询所有记录 返回一个集合对象 filter 属性 根据条件查询 返回一个集合对象 first 和 last 查询第一个和最后一个记录 返回单个对象 get id 2 根据id查询 返回一个对象
  • Ubuntu 15.04 下编译Caffe2

    深度学习大神贾扬清在四月底发布了最新框架Caffe2 最近在Ubuntu15 04下编译了它的源代码 遇到一些坑 记录下来以供参考 基本安装次序如官网所述 https caffe2 ai docs getting started html