Mac需要装cuda吗?

我在Mac下安装mxnet 官方好像没说要装这个 但是Ubuntu的教程里有这个安装要求 求问用Mac开发深度学习的大神 有没有一个详细的Mac下安装mxnet步骤啊……


首先要确定你的 Mac 显卡是否支持 CUDA。关于支持 CUDA 的显卡列表可以在这里查看 https://developer.nvidia.com/cuda-gpus 。

在 macOS 上编译安装 MXNet 的大体步骤都是按照官方文档来进行安装即可。但由于每个人电脑环境不同,所以可能会出现一些依赖库/包的缺失,导致安装失败。

一、安装依赖软件

在 macOS 上,首先需要具有以下软件:

  • Homebrew (to install dependencies)
  • Git (to pull code from GitHub)
  • Homebrew/science (for linear algebraic operations)
  • OpenCV (for computer vision operations)

如果上述已经安装了,就不需要再安装;如果没有,则按照下面的步骤安装:

# 安装 Homebrew
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# 安装 Git 和 OpenCV
$ brew update
$ brew install git
$ brew tap homebrew/science
$ brew info opencv
$ brew install opencv

二、编译 MXNet

# 下载源码
$ git clone --recursive https://github.com/dmlc/mxnet

然后还需要安装 openblas:

# 安装 openblas
$ brew install --fresh -vd openblas
...
Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you"ll need to add to your
build variables:

LDFLAGS: -L/usr/local/opt/openblas/lib
CPPFLAGS: -I/usr/local/opt/openblas/include

==&> Summary
/usr/local/Cellar/openblas/0.2.18_2: 20 files, 41.8M, built in 12 minutes 33 seconds

如果没有安装 openblas,则会有类似 fatal error: "cblas.h" file not found 的错误,详见 blas issue compile issue · Issue #572 · dmlc/mxnet · GitHub。

接下来修改配置文件:

$ cd mxnet
$ cp make/osx.mk ./config.mk

用 vim 或其他编辑器打开 config.mk,在 USE_BLAS = apple 下面加入如下 ADD_LDFLAGS = -I/usr/local/opt/openblas/lib 和 ADD_CFLAGS = -I/usr/local/opt/openblas/include:

USE_BLAS = apple
ADD_LDFLAGS = -I/usr/local/opt/openblas/lib
ADD_CFLAGS = -I/usr/local/opt/openblas/include

如果你的显卡支持 CUDA,在 config.mk 里面,将 USE_CUDA = 0 设置为 USE_CUDA = 1 就可以了。

最后再编译即可:

$ make -j$(sysctl -n hw.ncpu)

三、在 Python 中使用 MXNet

编译安装完成之后,若要使用 MXNet 的 Python 接口,还需要将 mxnet/python 添加到 Python 的包搜索路径。至少有三种方式可以实现。

1. python 代码手动加载

import os, sys;
cur_path = os.path.abspath(os.path.dirname(__file__));
mxnet_lib_path = os.path.join(cur_path, "mxnet/python");
sys.path.append(mxnet_lib_path);
import mxnet as mx;

在没有将 mxnet/python 添加到 PYTHONPATH 之前,依旧可以运行 /example/image-classification 里面的一些测试案例,就是因为案例里面有一行 import find_mxnet,而 find_mxnet 的作用就是手动加载 mxnet/python:

# find_mxnet.py
try:
import mxnet as mx
except ImportError:
import os, sys
curr_path = os.path.abspath(os.path.dirname(__file__))
sys.path.append(os.path.join(curr_path, "../../python"))
import mxnet as mx

2. 将路径加到环境变量 PYTHONPATH 中

这种方法需要修改 shell 的配置文件。如果使用的 bash,则修改 ~/.bashrc;若使用的是 zsh,则修改 ~/.zshrc;其他类似。

在 bash 配置文件中加入下面这一行:

export PYTHONPATH=path_to_mxnet_root/python

其中 path_to_mxnet_root 是下载的 mxnet 源码目录。

3. 全局安装 mxnet

直接运行 mxnet/python/setup.py,将 mxnet 添加到全局路径即可:

python setup.py install --user

运行上面的命令后,脚本会在 ~/.local 目录下创建一个 lib 目录,里面有一个 python-2.7/site-packages 文件夹。

如果是 sudo python setup.py install,则上面的目录会在 /usr/lib 下。


不太支持装gpu的 还是安装mkl 写写代码 测试下,真正训练还在在比较高配的机器上去呗


17年春节,因为前年换新的15款独显macbookpro是A卡,十分不便于使用,宝宝在腊月里装了一台E5-2683v3 16G s2600cw2r 980ti ssd 的机器来作为自己的新年礼物。

前几日在上面安装了黑苹果全部功能完美( 10.12.2 ),因为有在搞机器学习,所以昨晚在上面安装了mxnet,我在这里写下mxnet安装过程,给你作为参考。

( 黑苹果部分如果有需要另外戳我吧,不过 C612 应该是比较容易黑不会有人要才对。 )

以下内容假设你有linux操作经验,懂得常规编译安装而且会独立处理和解决问题,我并不是很会给人讲课,嘴巴笨还表达能力不好,实在看不懂就发信戳我吧。

首先的首先,你要确定是N卡。。。这个自然是必须的啦。

然后最好是插在了16通道的PCIE插口上,最好是cpu控制的,如果不是x16最起码x8,要不大量显存内存拷贝的时候会心塞的。

如果不需要频繁大量复制,就无所谓了,x1其实就可以带起来卡,买那种1个pci16转4个pcie1的转接线也是可以插一堆卡的,只要不频繁传输,一切很完美,另外咱们这个用途是不需要SLI的,多卡时不要SLI反而会好些。

从官网下载N卡驱动装好,这个我就略了。

然后从官方下cuda,然后装好,这个我也略了。

用 CUDA-Z 看看情况

多个卡就切换下卡,看看是不是都没问题了。

选装cudnn:

这是黄叔家的出的深度神经元网络的一个库,他自己弄得,自然优化的好,就测试而言还是有使用价值的。

去官网登录后(没有就注册)

在我这次安装是用的 cuda8 所以这里也是下对应的新版本:

下好后直接把压缩包丢到这下面,这是在安装CUDA的时候他就帮你建好的一个路径。

/Developer

然后tar xvf解压他:

你会发现他是个叫做cuda的文件夹。

在这里我不得不延伸一下,你在mac下装cuda会发现他在developer里有个NVIDIA,里面有cuda安装目录,但是哈,不要直接去用这里的lib或者include。

在安装后他会自动连接到 /usr/local/cuda 这里,要用这个路径,这样子升级后才不会悲剧,才能愉快的使用。

另外哈还有个情况是你直接用developer的会发现少东西或者调不着,原因是 libcuda.dylib 这玩意只有在 /usr/local/cuda/lib 下面才有,直接用安装路径会找不到他的。

所以他官方解压出来叫做cuda应该意思就是让你放到cuda这个文件夹下和cuda自己的文件合并。

在了解cuda的前情后,就知道怎么装这个cudnn了,那就是把它链接到/usr/local/cuda 里面,为了方便这里改个名防止时间长了不知是啥 坑到自己。

mv cuda cudnn
ln -s /Developer/NVIDIA/cudnn/include/* /usr/local/cuda/include/
ln -s /Developer/NVIDIA/cudnn/lib/* /usr/local/cuda/lib/

当然如果你愿意也可以不和cuda放在一起,也可以链接到/usr/local/下面,只是记得把路径给加到mxnet的config里面。

这样子就算是行了

选装:装 Iterm,和 zsh 和 oh-my-zsh 并配置 .zshrc 这个看个人需求吧,反正一般都是会有的,我就不再赘述了。

然后装brew,这个凡是拿mac搞开发基本没有不装的,我就略了,,,,想了想还是放上吧,看一楼都放上了,,,我也放上吧,从这里开始。

sudo之类的有的我就省略了,你看路径记得该sudo的就要sudo哦~要不会报错没权限的~

我因为是回忆,可能是有的地方不准确,如果哪里不对请指正。

Homebrew 去官网上找链接即可,我放在这里供你使用:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

他会自动帮你把 xcode 的 line 工具给你装好,他没装你就自己先装下再弄。

装好后装一堆必须的东西

brew update
brew install python git vim homebrew/science/opencv homebrew/science/openblas homebrew/boneyard/clang-omp-2015-04-01 pkg-config wget curl

我来解释一下作用便于你出错后进行调整。

别的不说,就说里面几个比较紧要的。

openblas 这是blas的开源实现,blas是一个很常用的基础线性代数库,他的效率并不给力,有很多人对他进行优化,openblas就是开源的里面做的不错的,你要是愿意也可以用apple自己的,或者 mkl 再或者其他的,看你喜好,我这里就直接用了 open 的,Intel mkl 效率和openblas差不多,超级多核心情况下可能还好一些,可惜我没正版授权就支持开源了。

openmp 这是本机的并行运算库,没这个写并行是痛苦的,在mxnet中不加他跑程序会发现CPU占用率很低,有时甚至只能用满一个核心,对于我这种单U28线程的机器来说是种不可接受的浪费,所以必须要把这玩意加上。不过哈,看起来好像是没装这个啊,那为啥要说这个那?因为就是因为它才需要装omp来编译的。

clang-omp 这个是一个llvm前端,看名字就知道是啥了,只是他能编译openmp!clang直到现在貌似还是编译不了,gcc虽然可以,但是用苹果总感觉用gcc不够洋气。

pkg-config 包信息神器。这个mac下不自带,一般做开发都会装有这个的,以防你没装我这里写一下。

opencv 这个太常用了,简直是图像神器。你要是追求性能,可以自己下代码编译一个,brew装的其实并不给力,我图省事就用brew去弄了,opencv自己就支持cuda,而且自带很多图像算法,也支持视频哦,我从0.x时代就在用,非常非常方便好用,不安利简直对不起良心。

然后pip装些必备的

pip install scikit-image diskimage-builder scipy matplotlib

接下来先把mxnet的代码拿下来。注意这里我放到usr的local下了,请不要放在带空格或者带中文的目录里,这里有个坑mxnet对于空格和中文路径的支持并不好。我推荐放在local下,毕竟这里就是让你装本地资源的地方啊。

cd /usr/local
git clone --recursive https://github.com/dmlc/mxnet

里面 --recursive 是必须要的,他会一股脑的下所有关联,你要是不加,就要手工去下关联包,那自然是痛苦的。

(如果你的网络像我一样不给力,可以设定http_proxy和https_proxy环境变量,可以让他走ss-local啥的,当然ss是需要转一下成http的才行。我这边网速慢慢来是行不通的老断,走梯子几十秒的事情)

然后把人家官方给的config给复制一份出来(我吐槽一下,就不能好好的用autoconf吗? ./configure 不好吗?稍微正常一点不好吗? )。

cd /usr/local/mxnet
cp make/osx.mk ./config.ml
vim config.mk

然后改下面这些地方,有的注释了记得打开注释。

因为咱们不是用的gcc,所以把原来的CC和CXX的环境变量定义给改了:

export CC = clang-omp
export CXX = clang-omp++

因为咱们是openblas,就收工把路径进到LD和C里

ADD_LDFLAGS = -L/usr/local/opt/openblas/lib
ADD_CFLAGS = -I/usr/local/opt/openblas/include

这个路径之所以不用Cellar的是因为brew会自动连接到这里,所以就用这个。

用CUDA这个当然是必须拉

USE_CUDA = 1
USE_CUDA_PATH=/usr/local/cuda

这个当然要啦

USE_CUDNN=1

这个自然也要拉

USE_OPENCV=1

换clang-omp就是为了他

USE_OPENMP=1

我用了openblas的blas实现,所以记得要修改这个变量,如果你用了别的实现,比如apple的,记得改为对应的,并且确保编译器和链接器能找到。

USE_BLAS = openblas

如果你用了intel的记得把这句打开并且设置路径哦,intel的据说是神器,但是因为要授权,我就无福消受了。

#USE_INTEL_PATH = NONE

别的基本不用改了

然后开始make就好了,因为我是28线程的cpu就-j28了,你要是8个线程就-j8即可,不知道几个线程可以运行 sysctl -n hw.ncpu 来查看。

make -j28

然后很快就编译完了。

最后一般是少不了几个警告的,我这边出了1个,不报错继续就好,报错了就着手处理。

如果中途报错了,排错完了记得 make clean_all 一下再重新make,要不旧的过程文件会很容易坑。

看看so生成了没

ls -l lib

有着两个就对了

注意下编译过程你看看他帮你把python的装好了没,要是没有就自己手工装下,方法如下:

cd python
sudo python setup.py install

为了方便今后使用,把 /usr/local/mxnet/lib 加到ld里面,mac下没有ldconfig这种东西,但是可以用DYLD来代替。

所以就设置下环境变量 DYLD_LIBRARY_PATH ,我直接把他加到 .zshrc 里面了,方便一些,你也可以把他加到全局和suda里,这样子sudo还会方便些。

export DYLD_LIBRARY_PATH=/usr/local/cuda/lib:/usr/local/mxnet/lib:$DYLD_LIBRARY_PATH

我这里吧cuda也加上了,因为我要用,你不用就可以不加哦。

记得先在终端下运行一次,然后把他加到你的 shell 的启动脚本里哦。

我这个格式是zsh的,你要是其他的shell请按照你用的shell来设置环境变量。

接下来去跑个例子看看

cd /usr/local/mxnet/example/neural-style

这个例子是一个很老的论文,记得叫做机器艺术啥的,反正有几年了,这就是那个论文的一个实现。

先让他把自带的资源下载好(墙高高的,梯子稳稳的,翻过去就自由了!你懂得。)

./download.sh

这个例子有这些参数你看下,按自己需要去选择吧。

usage: nstyle.py [-h] [--model {vgg}] [--content-image CONTENT_IMAGE]
[--style-image STYLE_IMAGE] [--stop-eps STOP_EPS]
[--content-weight CONTENT_WEIGHT]
[--style-weight STYLE_WEIGHT] [--tv-weight TV_WEIGHT]
[--max-num-epochs MAX_NUM_EPOCHS]
[--max-long-edge MAX_LONG_EDGE] [--lr LR] [--gpu GPU]
[--output_dir OUTPUT_DIR] [--save-epochs SAVE_EPOCHS]
[--remove-noise REMOVE_NOISE]
[--lr-sched-delay LR_SCHED_DELAY]
[--lr-sched-factor LR_SCHED_FACTOR]

然后python运行下,因为要写帖子,所以我指定了输出路径,你看自己喜好。不一定能直接跑起来,可能会提示python缺包,缺啥就pip装啥。

python nstyle.py --output_dir ~/Documents/zhihu_mac_install_mxnet

然后你就等着吧,看看GPU占用率,跑的很高就对了。

我这个2分来钟就跑完了,他每收敛50次就出一份图。最后那个 final.jpg 就是结果。

原图是运行下载脚本从网上下来的。

然后用梵高的画进行的训练。

最后就产生了一副美丽的画~

一切搞定~万岁。

因为进行过mxnet python 支持的安装,这个安装是系统库的,所以用的时候直接 import find_mxnet 然后 import mxnet as mx 然后 mx.xxxx 就行了。

libmxnet.so 的路径也加到环境变量DYLD_LIBRARY_PATH里了,pkg-config 也装了。所以理论上你编python的也好,c/c++的也罢,不管是放在那里都是可以找得到依赖。

如果有多个用户要共享,可以吧ld放到全局里,这样子会方便些。

最后上我家的猫咪,谁要不经过同意转载,不写明出处就引用,就让我家猫猫抓花他的脸!

梵高作品-《捍卫主人战役-胜利归来的麦克白》(大雾)后来发现写了一大篇,不放到文章里好浪费,下面是文章的链接,欢迎大家捧场~~。

Mac OS 10.12.2 下安装Mxnet并集成CUDA+OpenMP+OpenCV+cuDNN


关于本机里可以看到图形卡信息,如果不是NVIDIA卡,肯定就不能安装CUDA了;

图形卡 NVIDIA GeForce GT 750M 2048 MB这两年的Mac Pro 15新品都是AMD卡。。


mac pro不用装cuda,用的GPU不是英伟达的,是intel的集成显卡。安装caffe的话可以使用 OpenCL Caffe 分支:https://github.com/BVLC/caffe/tree/opencl


黑苹果上今天安装了 CUDA 8


没cuda是不能跑gpu部分的。他只是文档没写吧。

你可以参照caffe的文档看看怎么装cida,我记得写了。


可是mac是a卡啊···


Tenseorflow 现在通过ComputeCpp支持了OpenCL,可能对于A卡会更好。

MXnet倒是在等AMD的CUDA兼容。


2013年后从N卡换A卡了…

https://www.zhihu.com/question/21488019


推薦閱讀:

cuDNN怎麼無法下載呢?
打算用caffe做人臉識別,用的是vgg,如何使用model?
有沒有雲端的深度學習計算服務?
用matlab做深度學習,有什麼工具箱可以直接調用嗎?

TAG:深度学习DeepLearning | Caffe深度学习框架 | mxnet |