《动手学习深度学习》环境搭建详细教程


#1

前言(广告)

《动手学习深度学习》是 李沐博士和阿斯顿·张博士等人写的一本入门深度学习的教程,是目前广受好评的最好的入门深度学习教材之一,豆瓣评分高达9.5,且在B站有配套的视频教程,超级适合没有基础的小伙伴用来入门深度学习。本文是对于书中关于环境搭建这一小节的详细描述和补充,希望小伙伴们可以通过本文在较短的时间内搭建好开发环境,从而快速开启自己的深度学习之旅。小伙伴们有什么看不明白的地方,或者发现文中有什么错误,欢迎留言。当然,除了留言外,小伙伴们也可以加入 MXNet / Gluon学习交流群(QQ群)和大家一起讨论、交流、学习。
mxnet%E4%BA%A4%E6%B5%81%E7%BE%A4

环境搭建的整体步骤

搭建《动手学习深度学习》开发环境的步骤如下:
1.确保自己的电脑和操作系统满足MXNet的要求。
2.安装miniconda。(不推荐anaconda,anaconda的功能miniconda都有,但是anaconda自带很多用不到的软件包,占很大空间)
3.如果电脑有支持cuda的显卡,那么就需要安装较新的显卡驱动,没有则跳过这一步。
4.使用conda创建环境。
5.在新建的conda环境中安装相应的软件包(cuda, mxnet, matplotlib, pandas等)。
6.验证安装。

对电脑和操作系统的要求

《动手学习深度学习》使用的深度学习框架是MXNet,对于电脑和操作系统有如下要求:
1.操作系统是64位的Windows 7或者Windows 10, 或者64位的Linux版本(如Ubuntu 16.04, Ubuntu 18.04,centos 7等); 不能是32位的操作系统。
2.拥有支持cuda的NVIDIA显卡。(可选,可以没有显卡,只用CPU也可以)
总结来讲就是你电脑的系统必须是64位的,不能是32位的,因为mxnet没有32位的安装包。电脑有支持cuda的NVIDIA显卡是最好的,点击上面的链接(点击上面的“支持cuda的NVIDIA显卡”这几个字)可以查看你的显卡是否支持cuda。

安装miniconda

Windows下安装

首先下载最新的Windows版本的miniconda 3。推荐到清华大学开源镜像站下载,不要到官网下载,因为官网下载速度非常慢。下载方法如下:
1.首先复制下载地址 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 到浏览器中打开,然后下拉到最底部,找到下面这个软件包:

Miniconda3-latest-Windows-x86_64.exe

单击它便可以将最新的64位miniconda3的安装包下载到本地。下载好后双击运行安装即可。需要注意的是,安装过程中有一步是询问你是否将miniconda添加到环境变量(Add Anaconda to the system PATH environment variable)。到这一步的时候,必须把添加环境变量这一个选项前面那个勾去掉,即不添加环境变量。miniconda官方也不建议添加环境变量,因为有可能和其它的库冲突。其它的都选择默认即可,点击安装,等待安装完成。
安装完成后,打开anaconda prompt这个终端(安装miniconda的时候会自动安装到你电脑上),然后分别执行如下命令,将conda和pip的软件源修改成清华的源,这样的话,使用conda下载安装软件包时会快很多。

conda  config  --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda  config  --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda  config  --set show_channel_urls yes

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
Linux下的安装

下面的安装过程适用Ubuntu,centos等Linux发行版。
1.首先复制下载地址 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 到浏览器中打开,然后下拉到最底部,找到下面这个软件包:

Miniconda3-latest-Linux-x86_64.sh

单击它便可以将最新的64位miniconda3的安装包下载到本地。假设你把安装包保存到了下载这个文件夹,打开终端,执行如下两条命令来安装:

cd   下载
bash  Miniconda3-latest-Linux-x86_64.sh

执行上面的第二条的安装命令时,首先会弹出一个软件协议条款让你阅读,这时候你直接按下Ctrl+C便可以跳过阅读过程,直接按照提示,输入yes,然后按回车键,同意软件协议条款。接下来继续按回车,将miniconda安装到电脑上。安装好之后,提示如下:

Do you wish the installer to initialize Miniconda3
by running conda init? [yes|no]

这一步一定要输入yes,不然安装好后没办法在终端中使用miniconda。输入yes,按下回车键,miniconda便成功安装到你电脑上了。重启终端之后,你便可以使用miniconda了。
重启终端,然后分别执行如下命令,将conda和pip的软件源修改成清华的源,这样的话,下载安装软件会快很多:

conda  config  --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda  config  --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda  config  --set show_channel_urls yes

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

再次重启终端之后,你会发现每次打开终端默认都会自动进入到miniconda的base环境中,终端中多了“base”字样。这样会拖慢终端打开速度,并且有可能干扰到其它软件的安装。要退出的话,必须每次打开终端之后先执行conda deactivate命令,让人很难受。执行如下命令,便可以解决终端每次打开都进入conda的base环境的问题:

conda config --set auto_activate_base false

安装比较新的显卡驱动

显卡驱动应该安装哪个版本,其实取决于你想使用哪个版本的cuda。如果想用最新的cuda 10或者cuda 10.1,那么驱动版本号不能低于某个版本。NVIDIA官方给的数据如下图所示:


从上图可以看到,在Linux下,cuda 10.1对于显卡驱动版本的要求是>=418.39, 也就是说,在Linux下,如果你安装的显卡驱动的版本低于418.39,那么你将无法使用cuda 10.1。如果想要使用cuda 10.1,那么你的Linux系统安装的驱动版本必须等于或者大于418.39。同理,从表中可以看到,如果你要在Windows 下使用cuda 10.1,那么安装的显卡驱动的版本号必须等于或者大于418.96你才能使用cuda 10.1。
好了,上面扯了那么多,下面我们来正式进入到显卡驱动安装的环节。

Windows下的安装

Windows下的显卡驱动安装很简单,打开NVIDIA官网的显卡驱动下载地址,然后根据自己的操作系统,显卡型号,将最新的稳定版的显卡驱动下载下来双击运行,然后全部采用默认设置,按照提示便可以完成安装。这里选择的是安装最新的稳定版本的显卡驱动,因为NVIDIA官网最新稳定版的显卡驱动,肯定可以满足所有cuda版本对于显卡驱动版本的要求。

Ubuntu下的显卡驱动安装

注:这里将要说的安装方法,适用于Ubuntu 16.04和Ubuntu 18.04。其它的Ubuntu版本没测试过。
为Ubuntu安装NVIDIA驱动主要有两种方式,一种是到NVIDIA官网下载对应显卡型号的驱动的.run文件,然后按照NVIDIA官网的说明安装即可。这种安装方法失败率很高,并且安装过程十分繁琐,不推荐使用这种方式。另外一种是通过添加Ubuntu官方维护的NVIDIA显卡驱动源,然后使用apt来安装即可,推荐使用这种方法。注意,采用第二种方法时,由于Ubuntu官方维护的NVIDIA显卡驱动源在国外,因此下载速度十分缓慢,安装显卡驱动需要几个小时都有可能,而且80%的概率会因为网速问题导致显卡驱动安装失败。建议安装显卡驱动这个步骤在北京时间早上7点到9点之间进行,那个时候在国内访问该软件源的网速是最快的,几分钟就能安装好。下面是采用第二种方法来安装显卡驱动的具体的步骤。
1.执行如下命令将Ubuntu官方维护的NVIDIA显卡驱动软件源添加到系统中:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

2.执行如下命令,查看适合自己电脑的显卡驱动:

sudo ubuntu-drivers devices

执行上面的命令之后,会显示如下内容:

driver   : nvidia-340 - distro non-free
driver   : nvidia-driver-410 - third-party free
driver   : nvidia-driver-418 - third-party free
driver   : nvidia-driver-415 - third-party free
driver   : nvidia-driver-390 - distro non-free
driver   : nvidia-driver-430 - third-party free recommended
driver   : nvidia-driver-396 - third-party free
driver   : xserver-xorg-video-nouveau - distro free builtin

我们可以看到第六行的nvidia-driver-430的最后带有“recommended”字样,即系统推荐我们安装该版本的显卡驱动,这时候我们只需要执行如下命令来安装即可:

sudo apt install nvidia-driver-430

电脑不同推荐的版本有可能不一样,因此到时候你安装带有recommended的版本即可。安装完显卡驱动之后,重启即可。重启之后,你在Ubuntu里打开NVIDIA X Server Settings这个软件(安装显卡驱动的时候自动给装上的),便能看到你显卡驱动的详细信息了。 到此显卡驱动安装完成。

arch Linux下的显卡驱动安装

打开终端,执行如下不完整的命令:

sudo pacman  install nvidia-

然后会显示一系列显卡驱动版本号,选择最新的来安装即可。比如,如果显示的驱动版本,最大的是430,那么接着执行如下命令:

sudo pacman install nvidia-430

便可以安装。

环境搭建

Windows下的环境搭建

搭建一个环境,首先你要确定你需要哪些软件包,根据《动手学习深度学习》这本书里面描述,首先我们需要到下载全部代码的压缩包,下载地址: https://zh.d2l.ai/d2l-zh-1.0.zip
下载完成后,将压缩包解压,然后打开里面的environment.yml的文件,可以看到如下内容(内容可能会因为更新而有所不同,具体以你下载的为准):

name: gluon
dependencies:
- python=3.6
- pip:
  - mxnet==1.4.0
  - d2lzh==0.8.11
  - jupyter==1.0.0
  - matplotlib==2.2.2
  - pandas==0.23.4

注意:本文提供的搭建环境的方法并不需要environment.yml文件,我们只是打开这个文件,看看里面需要的软件的版本号而已。
从上面可以看到这个环境的名称是gluon,使用的是Python 3.6。因此我们先使用miniconda创建一个名为gluon的环境。在Windows下,首先打开anaconda prompt这个终端,然后在prompt终端里执行如下命令来创建一个使用Python 3.6的,名为gluon的环境:

conda create -n gluon python=3.6

Python具体该使用哪个版本,以你下载下来的environment.yml文件里的为准,我这里下载下来的environment.yml文件里面使用的是Python 3.6,因此创建的环境使用的就是Python 3.6。创建完成之后,执行如下命令来激活gluon环境:

conda activate gluon

接下来该安装MXNet了,MXNet应该安装哪个版本,具体由你电脑的硬件决定。
1.如果你的电脑的CPU是Intel 的酷睿系列,或者是Intel的至强系列,显卡是NVIDIA的显卡,且支持cuda,那么建议安装最新版本的同时支持mkl和gpu的MXNet。分别执行如下命令,先安装最新版的mkl和cuda 10.1,然后安装最新的支持mkl和cuda 10.1的gpu版的MXNet :

conda install mkl
conda install cudatoolkit=10.1
pip install mxnet-cu101mkl

这里选择安装使用cuda 10.1,因为同等条件下,cuda 10或者cuda 10.1的gpu利用率比cuda 9或者cuda 9.2高出接近三倍,意味着训练速度也更快。
2.如果你的CPU是AMD的CPU,但是显卡是支持cuda的NVIDIA显卡,那么建议安装支持gpu的最新版本的MXNet,分别执行如下命令,先安装cuda,然后安装MXNet:

conda install cudatoolkit=10.1
pip install mxnet-cu101

3.如果你的CPU是Intel的酷睿系列CPU,但是没有支持cuda的NVIDIA显卡,那么建议安装支持mkl的CPU版MXNet,因为,支持mkl的CPU版的MXNet比不支持mkl的CPU版的MXNet训练速度在特定条件下能快几十倍。分别执行如下命令,先安装mkl,后安装支持mkl的CPU版的MXNet:

conda install mkl
pip install mxnet-mkl

4.如果你电脑的CPU是AMD的CPU,并且没有支持cuda的NVIDIA显卡,那么建议直接安装CPU版的MXNet,执行如下命令来进行安装:

pip install mxnet

到此,MXNet安装完成。接下来,分别执行如下命令,来安装environment.yml文件中没安装的软件包:

pip install d2lzh==0.8.11
pip install jupyter==1.0.0
pip install matplotlib==2.2.2
pip install pandas==0.23.4

上面的软件版本号,同理也是以你下载下来的environment.yml文件里面的为准。虽然版本号不同,但是安装命令是完全一样的。

ubuntu下的环境搭建

Ubuntu下的环境搭建过程和Windows下的基本上是一模一样,在Ubuntu下,你只需要按照上面介绍的在Windows下搭建环境的方法来搭建环境即可。唯一的区别是,Windows下,是在anaconda prompt这个终端下执行命令,而Ubuntu则是直接在系统自带的终端下执行命令。从这里我们可以看到,使用conda来搭建环境的好处是跨平台,不同平台下搭建环境的步骤是一模一样的基本上。

验证安装

Windows下验证安装

1.验证同时支持mkl和gpu的MXNet是否安装成功
如果你安装的是同时支持mkl和gpu版的MXNet,重新打开anaconda prompt终端,依次执行如下命令来验证是否成功安装:

conda activate gluon
python
import mxnet as mx

如果到这一步没有出错,那么证明MXNet已经安装成功。接着输入如下代码,验证MXNet是否能成功利用gpu进行计算:

 a = mx.nd.ones((2, 3), mx.gpu())
 b = a * 2 + 1
b.asnumpy()

如果输出如下,证明gpu版的MXNet安装成功,并且能够利用gpu进行计算:

array([[ 3.,  3.,  3.],
       [ 3.,  3.,  3.]], dtype=float32)

2.验证仅支持mkl的MXNet或者仅支持CPU的MXNet是否安装成功
如果你安装的是仅支持mkl的MXNet或者仅支持CPU的MXNet,重新打开anaconda prompt,依次执行如下命令来验证是否成功安装:

conda activate gluon
python
import mxnet

如果执行上面的命令没有出错,则证明MXNet安装成功。

Ubuntu下验证安装

在Ubuntu下验证MXNet是否安装成功和在Windows下的步骤基本上是一模一样的,唯一的区别是,在Windows下,命令需要在anaconda prompt终端中执行,而在Ubuntu下,命令是在系统自带的终端中执行。

到此,《动手学习深度学习》代码运行环境搭建完毕。

常见问题解答(持续更新)

1.执行创建环境命令conda create -n gluon python=3.6命令时由于网络原因出错

这里出错有两种,一种出错提示如下图:


出现上面的原因主要是因为你的网络连接有问题,或者网线没插好,WiFi掉线了,网络波动之类的。解决办法就是多执行几次conda create -n gluon python=3.6命令就可以了,直到环境创建成功为止。
另外一种出错提示如下图所示:

出现这种错误的可能原因是因为你所在的网络环境不支持conda创建环境时从清华镜像源下载软件包。解决办法就是将conda的软件源重新设置为默认的官方软件源。Windows下,直接打开anaconda prompt终端,然后执行如下命令即可:

conda   config   --remove-key   channels

在Linux下,则是直接在系统子自带的终端中执行上述命令即可。
执行完上述命令之后,conda的软件源就恢复到了官方的软件源,这时候再执行创建环境的命令conda create -n gluon python=3.6即可。

2.mxnet需要安装cudnn吗?

不需要,mxnet已经内置了cudnn,因此不需要安装cudnn,只需要安装cuda。

3.如何完全删除按照本文搭建起来的环境?

执行如下命令即可完全删除:

conda remove -n gluon --all

然后按照提示,输入y,即可完全删除环境。

4.如何安装其他版本的mxnet?

只需要在执行安装mxnet命令时指定版本号即可,比如你要安装1.4.1版本的只支持CPU版本的mxnet,那么执行如下命令即可:

pip install mxnet==1.4.1
5.安装遇到如下错误,怎么解决


出现上述错误是因为你使用pip安装mxnet时安装的版本不对,比如安装比较老的版本,这些版本已经被mxnet官方给删除了,不存在pip库中,只需要安装存在的版本即可。


求助,cuda10.1下建立环境失败。
获取代码并安装环境
获取和运行本书代码 讨论区
#2

:+1:小白的福利


#3

很赞的文章。

目前在linux的docker环境中遇到一个问题:
安装读取md文件的插件命令如下:
pip install https://github.com/mli/notedown/tarball/master
然后,将下面这一行加入到Jupyter记事本配置文件(一般在用户主目录下的隐藏文件夹 .jupyter 中的 jupyter_notebook_config.py )的末尾
c.NotebookApp.contents_manager_class = ‘notedown.NotedownContentsManager’
在安装完成后,启动 jupyter notebook ,会出现错误:

	trainer@f7c6756f593f:~/.jupyter$ jupyter notebook
[E 02:18:17.745 NotebookApp] Exception while loading config file /home/trainer/.jupyter/jupyter_notebook_config.py
	Traceback (most recent call last):
	  File "/home/trainer/anaconda3/lib/python3.6/site-packages/traitlets/config/application.py", line 562, in _load_config_files
		config = loader.load_config()
	  File "/home/trainer/anaconda3/lib/python3.6/site-packages/traitlets/config/loader.py", line 457, in load_config
		self._read_file_as_dict()
	  File "/home/trainer/anaconda3/lib/python3.6/site-packages/traitlets/config/loader.py", line 489, in _read_file_as_dict
		py3compat.execfile(conf_filename, namespace)
	  File "/home/trainer/anaconda3/lib/python3.6/site-packages/ipython_genutils/py3compat.py", line 198, in execfile
		exec(compiler(f.read(), fname, 'exec'), glob, loc)
	  File "/home/trainer/.jupyter/jupyter_notebook_config.py", line 606
		c.NotebookApp.contents_manager_class = ‘notedown.NotedownContentsManager’
													   ^
	SyntaxError: invalid character in identifier
[E 02:18:17.748 NotebookApp] Exception while loading config file /home/trainer/.jupyter/jupyter_notebook_config.py
	Traceback (most recent call last):
	  File "/home/trainer/anaconda3/lib/python3.6/site-packages/traitlets/config/application.py", line 562, in _load_config_files
		config = loader.load_config()
	  File "/home/trainer/anaconda3/lib/python3.6/site-packages/traitlets/config/loader.py", line 457, in load_config
		self._read_file_as_dict()
	  File "/home/trainer/anaconda3/lib/python3.6/site-packages/traitlets/config/loader.py", line 489, in _read_file_as_dict
		py3compat.execfile(conf_filename, namespace)
	  File "/home/trainer/anaconda3/lib/python3.6/site-packages/ipython_genutils/py3compat.py", line 198, in execfile
		exec(compiler(f.read(), fname, 'exec'), glob, loc)
	  File "/home/trainer/.jupyter/jupyter_notebook_config.py", line 606
		c.NotebookApp.contents_manager_class = ‘notedown.NotedownContentsManager’
													   ^
	SyntaxError: invalid character in identifier
Traceback (most recent call last):
  File "/home/trainer/anaconda3/bin/jupyter-notebook", line 11, in <module>
	sys.exit(main())
  File "/home/trainer/anaconda3/lib/python3.6/site-packages/jupyter_core/application.py", line 266, in launch_instance
	return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/home/trainer/anaconda3/lib/python3.6/site-packages/traitlets/config/application.py", line 657, in launch_instance
	app.initialize(argv)
  File "<decorator-gen-7>", line 2, in initialize
  File "/home/trainer/anaconda3/lib/python3.6/site-packages/traitlets/config/application.py", line 87, in catch_config_error
	return method(app, *args, **kwargs)
  File "/home/trainer/anaconda3/lib/python3.6/site-packages/notebook/notebookapp.py", line 1507, in initialize
	self.init_webapp()
  File "/home/trainer/anaconda3/lib/python3.6/site-packages/notebook/notebookapp.py", line 1297, in init_webapp
	self.http_server.listen(port, self.ip)
  File "/home/trainer/anaconda3/lib/python3.6/site-packages/tornado/tcpserver.py", line 142, in listen
	sockets = bind_sockets(port, address=address)
  File "/home/trainer/anaconda3/lib/python3.6/site-packages/tornado/netutil.py", line 197, in bind_sockets
	sock.bind(sockaddr)
OSError: [Errno 99] Cannot assign requested address

#4

这个倒不是很清楚什么原因,对jupyter插件安装不是很熟悉,特别是docker下的。你可以另外建个主题帖问问或者到群里问问


#5

这简直就是救命贴


#6

CUDA_VISIBLE_DEVICES=‘0,1,2,3’,使用多gpu的时候,系统会死机,在日志cat /var/log/gpu-manager.log下看到如下信息:Unsupported discrete card vendor: 10de,不知道是不是这个问题引起的。
我的硬件环境是:AMD2950X,128G内存,4*1080ti
软件环境:UBUNTU 18.04,python2.7,cuda10,cudnn,mxnet-cu100


#7

救命贴。。。
不过按照帖子还是遇到了坑:joy:
说下我遇到的坑:我的nVidia驱动不是最新的,我没有按照帖子说的更新驱动,我电脑cuda只支持10.0,之后我直接按照

conda install mkl
conda install cudatoolkit=10.1
pip install mxnet-cu101mkl

然后安装成功了,但是测试时,

 a = mx.nd.ones((2, 3), mx.gpu())
 b = a * 2 + 1
b.asnumpy()

这些代码没法运行。。。
所以。。。一定要按照以上教程一步步执行。。。我这没有按照教程浪费了一晚上时间瞎折腾。。。


#8

给帖子置顶一下:rofl:


#9

感谢!请问这样安装CUDA,以后其他项目,新的环境还需要再次安装CUDA吗


#10

以后的项目如果你用conda的话,最好新建一个环境然后重新安装cuda,但是这个重新安装并不需要额外下载,会复用你之前环境那一个,当然你用现在这个环境也是可以的。


#11

多泄!:grinning::grinning:


#12

感谢楼主大大, 补充一点: 在 sudo ubuntu-drivers devices 之前要先安装下 ubuntu-drivers-common 才能用, 至少在 Ubuntu 18.04 上

sudo apt install ubuntu-drivers-common


#13

请教下,只有32为的电脑,能否安装?或者怎么办? 谢谢:disappointed:


#14

不可以,推荐换电脑


#15


这个错误咋改?求教
每次导入有关mxnet的包的时候就会出现内核死亡,但是会立即重启


#16

我想问一下,原来电脑使用的是Python3.7环境,那创建miniconda环境还是指定版本为3.6吗?


#17

都可以,取决于你想用什么环境,你想用Python 3.6就指定为3.6,用3.7就指定为3.7。miniconda的强大之处在于可以指定任何Python版本。建议3.6