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

1.前言(广告)

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

BB time:多说几句,现在GitHub上很多《动手学习深度学习》pytorch版本或者是TensorFlow版本,这些都不建议大家去学习,一是项目不完整,这些项目没有完整实现这本书中讲到的所有内容,二是项目作者对于项目的维护很少,里面的坑巨多而且没人填。三是mxnet/gluon,pytorch ,TensorFlow 这三个框架现在越来越像,学会了mxnet,可以直接上手其它两个框架,根本没问题。
《动手学习深度学习》官方版本,由一众大佬精心维护,并且接收小伙伴的反馈,不断更改和新增内容,又有QQ群(群号:925664908)辅助答疑解惑,实在是新手入门深度学习的不二之选。

2.对电脑和操作系统的要求

《动手学习深度学习》使用的深度学习框架是MXNet,对于电脑和操作系统有如下要求:
1.操作系统是64位的; 不能是32位的操作系统。
2.拥有支持cuda的NVIDIA显卡。(可选,可以没有显卡,只用CPU也可以)

总结来讲就是你电脑的系统必须是64位的,不能是32位的,因为mxnet没有32位的安装包。电脑有支持cuda的NVIDIA显卡是最好的,电脑没有显卡也可以,只用CPU就行。点击上面的链接(点击上面的“支持cuda的NVIDIA显卡”这几个字)可以查看你的显卡是否支持cuda。

3.安装miniconda

3.1 Windows系统下安装miniconda

如果你的系统是Linux系统,不要看着一步,直接跳到3.2小节。Windows下安装miniconda很简单,首先下载最新的Windows版本的miniconda 3。推荐到清华大学开源镜像站下载,不要到官网下载,因为官网下载速度非常慢。从清华镜像下载方法如下:
1.首先复制下载地址 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 到浏览器中打开,然后下拉到最底部,找到下面这个软件包:

Miniconda3-latest-Windows-x86_64.exe

单击它便可以将最新的64位miniconda3的安装包下载到你电脑上。下载好后双击运行安装,使用默认的安装选项,即一直点击下一步即可。
安装完成后,打开anaconda prompt这个终端(安装miniconda的时候会自动安装prompt到你电脑上),然后分别执行如下四个命令,将conda和pip的软件源修改成为清华的源,这样的话,使用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
3.2 Linux下安装miniconda

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

Miniconda3-latest-Linux-x86_64.sh

单击它便可以将最新的64位miniconda3的安装包下载到本地。打开终端,切换到刚才下载的miniconda安装包所在目录,执行如下命令来安装:

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的软件源修改成清华的源,这样的话,使用miniconda或者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

4.搭建书本所需的环境

4.1 搭建CPU版本mxnet的运行环境

如果你的电脑没有GPU,那么只需要安装CPU版本的mxnet即可。如果你的电脑包含有GPU,并且想要使用GPU进行计算,直接跳过4.1小节,参考4.3小节。使用CPU版本的mxnet完全可以满足学习本书的绝大部分内容。使用miniconda,在Windows下和Linux下的环境搭建步骤是一样的。Windows下打开anaconda prompt这个终端。如果系统是Linux,则打开命令行终端,然后执行如下命令来创建一个使用Python 3.6的,名为gluon的环境:

conda create -n gluon python=3.6

创建环境成功后,执行如下命令来激活gluon环境:

conda activate gluon

接下来该安装MXNet了,执行如下命令,安装最新的CPU版的mxnet :

pip install mxnet

成功安装MXNet后,接下来,分别执行如下命令,来安装书本中代码用到的其它软件包:

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

到此,环境搭建完毕。

4.2 运行课本的代码

环境搭建好之后,下载课本所需代码的压缩包(下载地址),然后解压。解压之后,打开prompt终端(Windows系统)或者命令行终端(Linux系统),切换到刚才解压文件所在的目录,然后执行如下两条命令来激活gluon环境和打开jupyter notebook:

conda activate gluon
jupyter notebook

打开jupyter notebook之后,点击打开特定的.ipynb文件,便可以查看对应章节和运行相应的代码。

4.3 搭建GPU版本mxnet的运行环境

这里以安装cuda 10版本的mxnet为例。首先确保你的电脑安装了最新的显卡驱动(驱动的安装可以参参考本文附录或者自己到网上搜集安装教程),然后打开prompt终端(Windows系统)或者命令行终端(Linux系统)。然后执行如下命令创建一个名为gluon的环境并且激活它:

conda create -n gluon python=3.6
conda activate gluon

然后执行如下命令来安装cuda 10(注意,mxnet不需要单独安装cudnn,因为mxnet自带cudnn):

conda install cudatoolkit=10.0

安装完之后,便可以安装支持cuda 10的mxnet,执行如下命令来安装:

pip install mxnet-cu100

成功安装MXNet后,接下来,分别执行如下命令,来安装书本中代码用到的其它软件包:

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

安装完之后,环境便搭建完成了。环境搭建完成后,便可以参考4.2小节,运行课本中的代码。

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

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库中,只需要安装存在的版本即可。

附录

1.安装比较新的显卡驱动

显卡驱动应该安装哪个版本,其实取决于你想使用哪个版本的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  -S  nvidia-lts
11赞

:+1:小白的福利

2赞

很赞的文章。

目前在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

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

这简直就是救命贴

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

救命贴。。。
不过按照帖子还是遇到了坑: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()

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

3赞

给帖子置顶一下:rofl:

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

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

多泄!:grinning::grinning:

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

sudo apt install ubuntu-drivers-common

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

不可以,推荐换电脑


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

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

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

楼主你好,我按照教程安装了两遍,但是还是出现了问题,验证的时候显示没有mxnet这个模块

pip install mxnet的时候提示什么?
你可以在Q群问一下

没有显示什么异常,都是正常的,这是安装完的截图