本教程首发自神力AI社区,转载请保留出处,谢谢合作!太阳系最大的AI代码市场:http://manaai.cn

深度学习安装宝典,你值得拥有。

装环境是最头疼的一件事情。很多时候会遇到莫名其妙的问题。这篇文章推荐深度学习入门者看,主要是如何搭建标准的深度学习环境。我们从容易到难,逐渐叫大家如何构建,内容将包括目前比较主流的所有深度学习框架。其中也将包括不同的平台,比如windows,linux,macos。

CUDA

从最麻烦,也是最基础的开始,加入你没有cuda设备,可以忽略这一步。如果你有显卡,如果支持cuda,那么可以安装一下cuda驱动,开始你的深度学习之旅。

网上很多教程,要么很老,要么按部就班,大家按照步骤装完了发现一对错误。本质上是没有事先告诉大家在装之前可能会踩的坑。这里我作为过来人,给新手总结一些要点:

  • 本教程会一直更新,目前最新的是cuda10,我建议直接安装cuda10.0,不要整什么cuda10.1或者10.2. 下面会告诉大家为什么;
  • cuda安装去英伟达官网下载,不要选择最新的,从legacy里面选择历史版本,然后下载对应平台的,windows下好办,直接exe,linux下选择.run文件;
  • cudnn要实现注册英伟达账号,下载那个tar.gz的压缩包,解压出来就是头文件和动态链接库,拷贝到cuda对应目录即可,非常简单。
  • 运行.run文件的时候,不要安装它自带的驱动,也不要安装opengl。

其中最重要的是最后一点,CUDA和英伟达驱动是两个东西, 很多人装完cuda就觉得驱动装完了,结果进不去桌面。这里我建议新手一定要:在安装cuda之前,先把英伟达驱动安装了.

nvidia的driver安装也很简单,以ubuntu为例子,直接添加源,然后 sudo apt install nvidia-driver-410 即可。主要CUDA10一般用的是410.

有时间我分享一个cuda10.0和cudnn7.5的百度云盘备用链接,不过直接从英伟达官网下载速度也是杠杠的。

Pytorch

总最简单的开始。直接上官网安装:
https://pytorch.org/get-started/locally/

c382f472-2b7f-49a7-82b1-e627d5ed3149-image.png

根据自己的系统版本选择对应的安装。这里注意几点:

  • 最好用1.1。0,因为这是最新的稳定版本,不要用老版本了;
  • 注意python版本和你用的cuda版本。

一般来说,使用pytorch比tensorflow简单一些。安装完成pytorch之后,再安装一下torchvision即可。

源码编译Pytorch

这部分不建议新手看,因为坑很深。我记录一下pytorch源码编译的过程。

  1. git clone pytorch
    首先clonepytorch。注意有submodules,要init
git clone http://github.com/pytorch/pytorch
cd pytorch
git submodule update --init --recursive
# 此时会有thirdparty的库被pull下来
mkdir build_libtorch
cd build_libtorch
python ../tools/build_libtorch.py
  1. 如果出错了
    如果出错,没有猜错的话可能的原因是multidefine什么东西,这个是MKLDNN造成的,解决的办法就是disbale掉它,并且关闭test:
export USE_MKLDNN=0
export BUILD_TEST=0

在编译的时候export一下即可。
一般情况下就可以成功编译libtorch,把你编译的库,全部替换掉官方的lib,你的lib就可以用新的ABI了。

好像就没了。。。
源码编译pytorch原因主要是两个:

  • 官方的libtorch用的是gcc4.9编译的,而且使用很老的ABI;
  • 源码编译可以加深你对这个库的理解。
    更新一下,现在pytorch官网也放出了C++11 ABI的预编译版本,大家可以直接下载用,只有当你需要使用cuda10.1或者不同的cuda版本的时候可以从源码编译。其他的时候没啥问题。

Update 2019.9.10:

上面讲述的是编译libtorch,但是,有时候我们需要编译pytorch,此时命令有点不同,截止到最新的pytorch1.3,编译pytorch的方式为:

USE_MKLDNN=0 USE_DISTRIBUTED=0 sudo -E  python3 setup.py install --cmake

请注意,这里由于加了sudo,需要添加 -E 才能让前面的变量有效,否则无效,无法编译。

TensorFlow

tensorflow的安装和编译目前来说还不是那么的蛋疼,加入你成功的安装了cuda和cudnn,那么直接从pip安装gpu版本的问题不大。大家注意两点:

  • 不建议用anaconda,我在年轻的时候也用anaconda,那时原因是实验室网速慢,pip慢,甚至还不会换源,假如你看到这篇博客,说明你比那个时候的我要强,可以不用anaconda了。
  • 直接从pip安装,如果你要老版本,那就1.19,如果你要tensorflow2.0,那就安装beta版本。

源码编译TensorFlow

简单的指导一下如何从源码编译tensorflow,有时候C++源码的tensorflow还是很有用的。那么要编译也很简单:

1. Install bazel
从bazel官网下载安装,请注意,**tensorflow只支持2.3版本的bazel,高版本的不支持。
**注意**, 截止到2020.05.05, bazel可以直接从apt安装了,但是需要添加对应的apt-key,进入到bazel官网:https://docs.bazel.build/versions/master/install-ubuntu.html

> sudo apt install curl
> curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
> echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
> 
> sudo apt update
> sudo apt install bazel-3.0.0

2. Clone TensorFlow source
从tensorflow官方代码仓库克隆源代码。

3. 两个命令编译

./configure
# 此时需要enable cuda,xla等东西

bazel build -c opt --copt=-mfpmath=both --copt=-msse4.2 --config=cuda //tensorflow:libtensorflow.so
bazel build -c opt --copt=-mfpmath=both --copt=-msse4.2 --config=cuda //tensorflow:libtensorflow_cc.so
bazel build --config=opt  //tensorflow/tools/pip_package:build_pip_package

# if build tensorflow 2.0
bazel build --config=v2 //tensorflow/tools/pip_package:build_pip_package

8604f53e-27f4-4f6a-b4ff-a30704c4fbff-image.png
OK. 差不多就行了,最好切换带相应的分支编译,不要从master开始编译。
最后将编译python package:

[14:15:33] fagangjin:tensorflow git:(2c319fb) $ ./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

然后你就可以看到如下输出:

Fri Jul 19 14:15:38 HKT 2019 : === Preparing sources in dir: /tmp/tmp.E0ITrWBmGN
/media/fagangjin/wd/permanent/software/source_codes/dl/tensorflow
Fri Jul 19 14:15:53 HKT 2019 : === Building wheel
/usr/local/lib/python3.5/dist-packages/setuptools/dist.py:472: UserWarning: Normalizing '2.0.0alpha0' to '2.0.0a0'
warning: no files found matching '*.h' under directory 'tensorflow/include/tensorflow'
warning: no files found matching '*' under directory 'tensorflow/include/Eigen'
warning: no files found matching '*.h' under directory 'tensorflow/include/google'
warning: no files found matching '*' under directory 'tensorflow/include/third_party'
warning: no files found matching '*' under directory 'tensorflow/include/unsupported'
Fri Jul 19 14:16:20 HKT 2019 : === Output wheel file is in: /tmp/tensorflow_pkg

更新

  • 2019.10.09: 由于tensorflow更新了2.0,因此master branch直接默认是2.0.通过这个方式:
bazel build //tensorflow/tools/pip_package:build_pip_package
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Caffe

这里再总结一下如何编译安装caffe。理论上来说,caffe的问题不是它的代码,它的代码其实很健壮,问题在于它的依赖。我见过最多的问题来自于:

  • protobuf
  • boost

我不告诉你安装步骤,你自己去官方编译,98%会出错,而且错误摸不到头脑。
其实我们MANA平台是有一个自己fork的caffe版本的,里面很多层比如FasterRCNN,RFCN,SSD,YOLO等的纯C++和CUDA支持。由于内部原因可能暂时不会开源。
但现在caffe维护最积极的应该还是BVLC的版本

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

号外:
我们发布了一个我们自己维护和修改的caffe版本,整体来讲增加了几乎所有层的支持。

http://manaai.cn

ONNXRuntime

onnxruntime 编译比较麻烦,大家可以转到对应的文章进行编译。
跳转到这里来进行 链接

MXNet

mxnet的安装直接pip,比较简单。