Ubuntu为julia安装深度学习框架MXNet(支持CUDA和OPenCV编译)

  • 环境介绍与注意事项
  • 下载源文件
  • 安装依赖
  • 编译
  • 环境配置
  • 安装MXNet
  • 测试
  • 后记

环境介绍与注意事项

  1. Ubuntu18.04
  2. julia 1.5.3
  3. CUDA 10.1(为了GPU支持,需要安装CUDA和cudnn,可以参考博客,若CUDA版本不同,参考此网站下载合适的MXNet版本)

安装MXNet的julia绑定,经过多次测试,并不能简单的通过Pkg.add("MXNet")进行安装。
会报此错误

error building `mxnet`: │
[ info: found nvcc: /usr/local/cuda-10.1/bin/nvcc │
ERROR: MethodError: no method matching replace(::String, ::Pair{String,String}, ::Pair{String,String})
...

经过查看源代码,问题出在下载编译时,~/.julia/packages/MXNet/XoVcx/deps/build.jl(默认软件包安装位置)文件中replace语法问题:

if Sys.isunix()nvcc_path = Sys.which("nvcc")if nvcc_path ≢ nothing@info "Found nvcc: $nvcc_path"push!(CUDAPATHS, replace(nvcc_path, "bin/nvcc", "lib64"))end
end

此处replace方法语法出现问题(此问题同样出现在采用某些版本的官方安装教程中,在那些教程中,采用了将编译后的动态链接文件用于预编译,然后使用Pkg安装,但是同样会有此问题),在正常安装的版本中,此处应为:

if Sys.isunix()nvcc_path = Sys.which("nvcc")if nvcc_path ≢ nothing@info "Found nvcc: $nvcc_path"push!(CUDAPATHS, replace(nvcc_path, "bin/nvcc" => "lib64"))end
end

因此,采用Pkg安装并不能通过编译,只能采用手动编译的方式。
我的julia安装目录,~/julia/julia-1.5.3中。

下载源文件

在官方网站下载MXNet1.6安装包。
安装过程主要参考此官方文档。
安装过程虽然参考MXNet1.7,但是若实际安装MXNet1.7,编译并不能通过,可能和CUDA版本相关。

安装依赖

$ sudo apt-get update
$ sudo apt-get install -y build-essential git ninja-build ccache libopenblas-dev libopencv-dev cmake

libopencv-dev是可选的,为了安装OpenCV支持。

编译

  1. 解压并更名
$ tar -xzvf apache-mxnet-src-1.6.0-incubating.tar.gz
$ mv apache-mxnet-src-1.6.0-incubating incubatormxnet
  1. 移动压缩后文件,并进入解压文件夹
$ mv incubatormxnet ~/julia/incubatormxnet
$ cd ~/julia/incubatormxnet
  1. 创建编译文件夹build
$ rm -rf build
$ mkdir build && cd build

若不需要安装GPU支持,或OpenCV支持,则在在编译配置文件中(~/julia/incubatormxnet/CMakeLists.txt),将USE_CUDA以及USE_OPENCV设为OFF(默认为ON)。

#默认为ON
option(USE_CUDA "Build with CUDA support"   ON)
...
option(USE_OPENCV "Build with OpenCV support" ON)
  1. 编译
$ cmake ..

NOTE:cmake时可能出现CMake 3.13 or higher is required. You are running version 3.10.2,此时需要升级CMake版本

$ pip3 install --user --upgrade "cmake>=3.13.2"

若未安装pip,运行以下命令进行安装:

$ sudo apt-get install -y python3-pip

安装后重新执行:

$ cmake ..
#或者执行
$ ~/.local/bin/cmake ..
  1. make
#根据核心数,增加执行速度
$ make -j8

NOTE:编译过程中可能出现此错误:

FAILED: CMakeFiles/cuda_compile_1.dir/src/operator/contrib/cuda_compile_1_generated_bounding_box.cu.o
cd ~/julia/incubatormxnet/build/CMakeFiles/cuda_compile_1.dir/src/operator/contrib && /usr/local/bin/cmake -E make_directory ~/julia/incubatormxnet/build/CMakeFiles/cuda_compile_1.dir/src/operator/contrib/. && /usr/local/bin/cmake -D verbose:BOOL=OFF -D build_configuration:STRING=Debug -D generated_file:STRING=~/julia/incubatormxnet/build/CMakeFiles/cuda_compile_1.dir/src/operator/contrib/./cuda_compile_1_generated_bounding_box.cu.o -D generated_cubin_file:STRING=~/julia/incubatormxnet/build/CMakeFiles/cuda_compile_1.dir/src/operator/contrib/./cuda_compile_1_generated_bounding_box.cu.o.cubin.txt -P ~/julia/incubatormxnet/build/CMakeFiles/cuda_compile_1.dir/src/operator/contrib/cuda_compile_1_generated_bounding_box.cu.o.Debug.cmake
~/julia/incubatormxnet/include/dmlc/./thread_local.h: In instantiation of ‘static T* dmlc::ThreadLocalStore<T>::Get() [with T = std::unordered_set<std::__cxx11::basic_string<char> >]’:
~/julia/incubatormxnet/src/operator/contrib/./../../common/utils.h:461:28:   required from here
~/julia/incubatormxnet/include/dmlc/./thread_local.h:46:15: error: cannot call member function ‘void dmlc::ThreadLocalStore<T>::RegisterDelete(T*) [with T = std::unordered_set<std::__cxx11::basic_string<char> >]’ without objectSingleton()->RegisterDelete(ptr);~~~~~~~~^~~~~
CMake Error at cuda_compile_1_generated_bounding_box.cu.o.Debug.cmake:279 (message):Error generating file~/julia/incubatormxnet/build/CMakeFiles/cuda_compile_1.dir/src/operator/contrib/./cuda_compile_1_generated_bounding_box.cu.o

此时同样需要修改源文件~/julia/incubatormxnet/include/dmlc/thread_local.h

      Singleton()->RegisterDelete(ptr);

修改为

      (*Singleton()).RegisterDelete(ptr);

修改完成后,重新构建build文件夹,并进行编译。

$ cd ..
$ rm -rf build
$ mkdir build && cd build
...
  1. 将编译完成后文件复制到可被MXNET定位的文件夹

libmxnet安装的路径应为libmxnet的根目录。 换句话说,应该可以在$MXNET_HOME/lib下找到编译后的libmxnet.so文件。 如libmxnet的根目录是 ~/julia/incubatormxnet,则应运行以下命令:

$ cd ~/julia/incubatormxnet
$ cp -r build lib

环境配置

编译完成后,修改配置文件。

#创建安装目录
$ mkdir ~/julia/julia-1.5.3/julia-depot
$ vim ~/.bashrc

NOTE,此处需要创建安装目录的原因是:使用默认安装位置~/.julia可能导致Permission denied错误.
在文件~/.bashrc后添加如下行

export MXNET_HOME="$HOME/Program/julia/incubatormxnet"
export LD_LIBRARY_PATH="$HOME/julia/incubatormxnet/lib:$LD_LIBRARY_PATH"
export JULIA_DEPOT_PATH="$HOME/julia/julia-1.5.3/julia-depot"

使用软链接将julia添加进系统执行路径

$ sudo ln -s ~/julia/julia-1.5.3/julia/bin/julia /usr/bin/julia

安装MXNet

julia --color=yes --project=./ -e \'using Pkg; \Pkg.develop(PackageSpec(name="MXNet", path = joinpath(ENV["MXNET_HOME"], "julia")))'

为了使安装包在系统路径中进行注册,需要在路径~/julia/julia1.5.3/julia-depot/environments/v1.5中再次执行上述命令:

$ cd ~/julia/julia1.5.3/julia-depot/environments/v1.5
$ julia --color=yes --project=./ -e \'using Pkg; \Pkg.develop(PackageSpec(name="MXNet", path = joinpath(ENV["MXNET_HOME"], "julia")))'

此时查看~/julia/julia1.5.3/julia-depot/environments/v1.5/Manifest.toml可以看到MXNet被正确定位:

[[MXNet]]
deps = ["BinDeps", "Formatting", "JSON", "Libdl", "LinearAlgebra", "MacroTools", "Markdown", "Printf", "Random", "Reexport", "Statistics"]
path = "/home/brainiac/julia/incubatormxnet/julia"
uuid = "a7949054-b901-59c6-b8e3-7238c29bf7f0"
version = "1.6.0"

如果上述过程没有问题,就安装成功了,但是可能出现仍找不到MNXet的情况,这种情况下首先检查各个文件夹的对应情况,然后检查~/julia/incubatormxnet/julia/src/base.jl
查看动态库加载是是否正常

const MXNET_LIB = Libdl.find_library(["libmxnet.$(Libdl.dlext)", "libmxnet.so"],  # see build.jl[joinpath(get(ENV, "MXNET_HOME", ""), "lib"),get(ENV, "MXNET_HOME", ""),joinpath(@__DIR__, "..","deps", "usr", "lib")])
#添加如下行后重新执行
print(Libdl.find_library("~/julia/incubatormxnet/lib/libmxnet.so"))

$ julia
julia> using Libdl
julia> Libdl.find_library("~/julia/incubatormxnet/lib/libmxnet.so")

若无法打印,可能是编译过程出现问题,重新编译执行,可以解决。

测试

$ julia
julia> using MXNet
julia> mx.gpu()
GPU0

后记

这个安装真的是费劲,enjoy coding.

Ubuntu为julia安装深度学习框架MXNet(支持CUDA和OPenCV编译)相关推荐

  1. Ubuntu18.04与RTX1080Ti安装深度学习框架

    这里写自定义目录标题 本文系统为Ubuntu18.04,显卡为RTX 1080Ti,之前主要在Windows下跑深度学习,后来因为需要用到ROS,故需要在Ubuntu下使用深度学习,因此记录一下在Ub ...

  2. 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练

    人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练 MXNet 是一个轻量级.可移植.灵活的分布式深度学习框架,2017 年 1 月 23 日,该项目进入 Apache 基金会,成为 ...

  3. 手把手教你在Windows10环境下安装深度学习框架(pytorch or tensorflow)

    手把手教你在Windows10环境下安装深度学习框架(pytorch or tensorflow) 1. 安装Anaconda:(常用的python版本和各类包管理器) 1.1. 下载地址: 1.2. ...

  4. Windows系统下首次安装深度学习框架Caffe失败

    Caffe,全称Convolutional Architecture for Fast Feature Embedding,是一个兼具表达性.速度和思维模块化的深度学习框架. 下载caffe,GitH ...

  5. 深度学习框架对应的CUDA版本

    前言 CUDA (Compute Unified Device Architecture),是NVIDIA发布的一个通用并行计算平台和编程模型.基于CUDA编程可以利用GPUs的并行计算引擎来更加高效 ...

  6. Ubuntu18.04下安装深度学习框架Pytorch(GPU加速)

    前面我们已经在windows10环境下成功安装了CPU版本的Pytorch,推荐的是利用Anaconda安装. 经过接近一天的奋战,博主成功在linux系统安装GPU加速的pytorch,博主使用的发 ...

  7. 深度学习框架【MxNet】的安装

    文章目录 前言 一.MXNet的前世今生 二.mxnet的安装 1.CPU安装 2.GPU安装,以cuda10.1为例 三.报错提醒 前言 本文简介安装mxnet深度学习框架,下边开始对深度学习框架m ...

  8. MXNet -aws深度学习框架之选择

    MXNet -aws深度学习框架之选择 机器学习在我们的生活和我们的商业中扮演越来越重要的角色,并且机器学习被广泛地用于一些传统算法解决不了或者很难解决的领域 在亚马逊,机器学习一直是很多业务流程的关 ...

  9. TensorFlow:深度学习框架TensorFlow TensorFlow_GPU的简介、安装、测试之详细攻略

    TensorFlow:深度学习框架TensorFlow & TensorFlow_GPU的简介.安装.测试之详细攻略 目录 TensorFlow的简介 TensorFlow的安装 1.tens ...

最新文章

  1. 初学MyBatis-Plus
  2. 黑马程序员-JAVA基础-IO流之流操作规律及读写转换流
  3. pycharm报错(Non-zero exit code (2))与手动安装报错
  4. Python文件的两种用途
  5. AI 时代,如何布局算力基础设施
  6. hadoop-HA集群搭建,启动DataNode,检测启动状态,执行HDFS命令,启动YARN,HDFS权限配置,C++客户端编程,常见错误
  7. 人工合成维生素E和天然维生素E的区别
  8. python观察日志(part6)--不可变的元祖
  9. UVA - 10934 Dropping water balloons(装满水的气球)(dp)
  10. linux 连接数 限制,linux设置最大连接数
  11. php树莓派魔镜,用树莓派和显示器制作一面“魔镜”
  12. CAN笔记(5) 协议标准规格
  13. cmdpython命令大全_Python命令 python使用cmd命令
  14. java 点击一下左边按钮_右边显出一列表_举个例子_java椭圆按钮怎么设置,最好举一个简单的例子,只要有窗体中一个椭圆按钮就可以,最好有注释,谢谢,好的...
  15. [渝粤教育] 江西财经职业学院 企业会计业务核算与财务报告编制 参考 资料
  16. 【Hoxton.SR1版本】Spring Cloud Consul服务注册中心搭建
  17. S7-1200PLC 连接单圈绝对值编码器(格雷二进制)
  18. cmmi实践访谈测试ppt_CMMI3级访谈问题--REQM
  19. java groovy 表达式_Groovy的基础语法
  20. 网课答案题库系统 内含接口使用

热门文章

  1. javascript常用工具类整理(copy)
  2. 如何从PDF文件中快速的提取PDF文件
  3. DWR第四篇之对象传参
  4. angularJS使用编写KindEditor,UEidtor,jQuery指令,双重绑定
  5. python基础_collections系列
  6. 捕获事件要比冒泡事件先触发
  7. EntityFramework6.X 之 Operation
  8. Seek the Name, Seek the Fame - POJ 2752(next运用)
  9. Debian/Ubuntu Apache Mod_Rewrite 安装
  10. 不能显示隐藏文件的问题