From f88df44cb535b29d574cea8161ffc7f61e08c828 Mon Sep 17 00:00:00 2001 From: muli Date: Fri, 31 Aug 2018 22:25:10 +0000 Subject: [PATCH] update appendix --- chapter_appendix/aws.md | 51 +++++++++++++-------------- chapter_appendix/buy-gpu.md | 22 +++++------- chapter_appendix/how-to-contribute.md | 6 ++-- chapter_appendix/jupyter.md | 12 +++---- 4 files changed, 43 insertions(+), 48 deletions(-) diff --git a/chapter_appendix/aws.md b/chapter_appendix/aws.md index 6d5960a..ae93cf7 100644 --- a/chapter_appendix/aws.md +++ b/chapter_appendix/aws.md @@ -1,7 +1,6 @@ # 使用AWS运行代码 -当本地机器的计算资源有限时,我们可以通过云计算服务获取更强大的计算资源来运行本书中的深度学习代码。本节将介绍如何在AWS(亚马逊的云计算服务)上申请实例并通过Jupyter notebook运行代码。本节中的例子基于申请含一个K80 GPU的“p2.xlarge”实例和安装CUDA8.0及相应GPU版本的MXNet(mxnet-cu80)。申请其他类型的实例或安装其他版本的MXNet的方法同本节类似。 - +当本地机器的计算资源有限时,我们可以通过云计算服务获取更强大的计算资源来运行本书中的深度学习代码。本节将介绍如何在AWS(亚马逊的云计算服务)上申请实例并通过Jupyter notebook运行代码。本节中的例子基于申请含一个K80 GPU的“p2.xlarge”实例和安装CUDA及相应GPU版本的MXNet。申请其他类型的实例或安装其他版本的MXNet的方法同本节类似。 ## 申请账号并登陆 @@ -47,7 +46,7 @@ EC2提供了大量的有着不同配置的实例。如图11.11所示,在第二 如图11.16所示,当实例状态(Instance State)变绿后,右击实例并选择“Connect”,这时就可以看到访问该实例的方法了。例如在命令行输入 -``` +```bash ssh -i "/path/to/key.pem" ubuntu@ec2-xx-xxx-xxx-xxx.y.compute.amazonaws.com ``` @@ -60,66 +59,66 @@ ssh -i "/path/to/key.pem" ubuntu@ec2-xx-xxx-xxx-xxx.y.compute.amazonaws.com 如果你登录的是一个GPU实例,需要下载并安装CUDA。首先,更新并安装编译需要的包: -``` +```bash sudo apt-get update && sudo apt-get install -y build-essential git libgfortran3 ``` -然后,访问Nvidia官网(https://developer.nvidia.com/cuda-80-ga2-download-archive )获取正确版本的CUDA8.0的下载地址,如图11.17所示。 +Nvidia一般每年会更新一次CUDA大版本。这里我们下载作者写本书时的最新版本CUDA 9.1。访问Nvidia官网(https://developer.nvidia.com/cuda-91-download-archive )获取正确 版本的CUDA 9.1的下载地址,如图11.17所示。 -![获取CUDA8.0的下载地址。](../img/cuda.png) +![获取CUDA9.0的下载地址。](../img/cuda.png) -获取下载地址后,我们将下载并安装CUDA8.0,例如 +获取下载地址后,我们将下载并安装CUDA9.0,例如 -``` -wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run -sudo sh cuda_8.0.61_375.26_linux-run +```bash +wget https://developer.download.nvidia.com/compute/cuda/9.1/secure/Prod/local_installers/cuda_9.1.85_387.26_linux.run +sudo sh cuda_9.1.85_387.26_linux.run ``` 点击“Ctrl+C”跳出文档浏览,并回答以下几个问题。 -``` +```bash accept/decline/quit: accept -Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26? +Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26? (y)es/(n)o/(q)uit: y Do you want to install the OpenGL libraries? (y)es/(n)o/(q)uit [ default is yes ]: y Do you want to run nvidia-xconfig? (y)es/(n)o/(q)uit [ default is no ]: n -Install the CUDA 8.0 Toolkit? +Install the CUDA 9.1 Toolkit? (y)es/(n)o/(q)uit: y Enter Toolkit Location - [ default is /usr/local/cuda-8.0 ]: + [ default is /usr/local/cuda-9.1 ]: Do you want to install a symbolic link at /usr/local/cuda? (y)es/(n)o/(q)uit: y -Install the CUDA 8.0 Samples? +Install the CUDA 9.1 Samples? (y)es/(n)o/(q)uit: n ``` 当安装完成后,运行下面的命令就可以看到该实例的GPU了。 -``` +```bash nvidia-smi ``` 最后,将CUDA加入到库的路径中,以方便其他库找到它。 -``` -echo "export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:/usr/local/cuda-8.0/lib64" >>.bashrc +```bash +echo "export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:/usr/local/cuda-9.1/lib64" >>.bashrc ``` ## 获取本书代码并安装GPU版的MXNet 我们已在[“安装和运行”](../chapter_prerequisite/install.md)一节中介绍了Linux用户获取本书代码并安装运行环境的方法。首先,安装Linux版的Miniconda(网址:https://conda.io/miniconda.html ),例如 -``` +```bash wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh ``` 这时需要回答下面几个问题: -``` +```bash Do you accept the license terms? [yes|no] [no] >>> yes Do you wish the installer to prepend the Miniconda3 install location @@ -129,7 +128,7 @@ to PATH in your /home/ubuntu/.bashrc ? [yes|no] 安装完成后,运行一次`source ~/.bashrc`让CUDA和conda生效。接下来,下载本书代码、安装并激活conda环境 -``` +```bash mkdir gluon_tutorials_zh && cd gluon_tutorials_zh curl https://zh.gluon.ai/gluon_tutorials_zh.tar.gz -o tutorials.tar.gz tar -xzvf tutorials.tar.gz && rm tutorials.tar.gz @@ -137,18 +136,18 @@ conda env create -f environment.yml source activate gluon ``` -默认环境里安装了CPU版本的MXNet。现在我们将它替换成GPU版本的MXNet(1.2.1 版)。 +默认环境里安装了CPU版本的MXNet。现在我们将它替换成GPU版本的MXNet。因为CUDA的版本是9.1,所以安装`mxnet-cu91`。一般来说,如果CUDA版本是x.y,那么相应安装`mxnet-cuxy`。 -``` +```bash pip uninstall mxnet -pip install mxnet-cu80==1.2.1 +pip install mxnet-cu91 ``` ## 运行Jupyter notebook 现在,我们可以运行Jupyter notebook了: -``` +```bash jupyter notebook ``` @@ -158,7 +157,7 @@ jupyter notebook 由于创建的实例并没有暴露8888端口,我们可以在本地命令行启动ssh从实例映射到本地8889端口。 -``` +```bash # 该命令须在本地命令行运行。 ssh -i "/path/to/key.pem" ubuntu@ec2-xx-xxx-xxx-xxx.y.compute.amazonaws.com -L 8889:localhost:8888 ``` diff --git a/chapter_appendix/buy-gpu.md b/chapter_appendix/buy-gpu.md index 7aac2a1..09a8e66 100644 --- a/chapter_appendix/buy-gpu.md +++ b/chapter_appendix/buy-gpu.md @@ -2,24 +2,23 @@ 深度学习训练通常需要大量的计算资源。GPU目前是深度学习最常使用的计算加速硬件。相对于CPU来说,GPU更便宜且计算更加密集。一方面,相同计算能力的GPU的价格一般是CPU价格的十分之一。另一方面,一台服务器通常可以搭载8块或者16块GPU。因此,GPU数量可以看作是衡量一台服务器的深度学习计算能力的一个标准。 -本节主要针对购买一两台自用GPU服务器的个人用户介绍一些GPU购买须知。如果你是拥有100台机器以上的大公司用户,通常可以考虑Nvidia Tesla P100或者V100,详情请咨询数据中心维护人员。如果你是拥有10到100台机器的实验室和中小公司用户,如果预算充足,可以考虑Nvidia DGX-1,否则可以考虑购买如Supermicro之类的性价比较高的服务器。 - - ## 选择GPU 目前独立GPU主要有AMD和Nvidia两家厂商。其中Nvidia在深度学习布局较早,对深度学习框架支持更好。因此,目前大家主要会选择Nvidia的GPU。 -Nvidia有面向个人用户(例如GTX系列)和企业用户(例如Tesla系列)的两类GPU。这两类GPU的计算能力相当。然而,面向企业用户的GPU通常使用被动散热并增加了内存校验,从而更适合数据中心,并通常要比面向个人用户的GPU贵上10倍。因此,个人用户通常选用GTX系列的GPU。 +Nvidia有面向个人用户(例如GTX系列)和企业用户(例如Tesla系列)的两类GPU。这两类GPU的计算能力相当。然而,面向企业用户的GPU通常使用被动散热并增加了内存校验,从而更适合数据中心,并通常要比面向个人用户的GPU贵上10倍。 + +如果你是拥有100台机器以上的大公司用户,通常可以考虑针对企业用户的Nvidia Tesla系列。如果你是拥有10到100台机器的实验室和中小公司用户,预算充足的情况下可以考虑Nvidia DGX系列,否则可以考虑购买如Supermicro之类的性价比较高的服务器,然后再购买安装GTX系列的GPU。 -Nvidia一般每一两年发布一次新版本的GPU,例如最近的GTX 1000系列。每个系列中会有数个不同的型号,分别对应不同的性能。 +Nvidia一般每一两年发布一次新版本的GPU,例如2017年发布的是GTX 1000系列。每个系列中会有数个不同的型号,分别对应不同的性能。 GPU的性能主要由以下三个参数构成: -1. 计算能力。通常我们关心的是32位浮点计算能力。当然,特殊情况下也可考虑其他的计算能力,例如用16位浮点训练,用8位整数预测。 +1. 计算能力。通常我们关心的是32位浮点计算能力。16位浮点训练也开始流行,如果只做预测的话也可以用8位整数。 2. 内存大小。当模型越大,或者训练时的批量越大时,所需要的GPU内存就越多。 3. 内存带宽。只有当内存带宽足够时才能充分发挥计算能力。 -对于大部分用户来说,只要考虑计算能力就可以了。我们建议GPU内存尽量不小于4GB。但如果GPU要同时显示图形界面,那么推荐的内存大小至少为6GB。至于内存带宽,通常厂家已在设计时考虑。 +对于大部分用户来说,只要考虑计算能力就可以了。GPU内存尽量不小于4GB。但如果GPU要同时显示图形界面,那么推荐的内存大小至少为6GB。内存带宽通常相对固定,选择空间较小。 图11.19描绘了GTX 900和1000系列里各个型号的32位浮点计算能力和价格的对比。其中价格为Wikipedia的建议价格。 @@ -27,24 +26,21 @@ GPU的性能主要由以下三个参数构成: 我们可以从图11.19中读出两点信息: -1. 在同一个系列里面,价格和性能大体上成正比。 +1. 在同一个系列里面,价格和性能大体上成正比。但后发布的型号性价比更加,例如980 TI和1080 TI。 2. GTX 1000系列比900系列在性价比上高出2倍左右。 -如果大家继续比较GTX较早的系列,也可以发现类似的规律。据此,我们推荐大家在能力范围内,尽可能买较新的GPU。如果预算充足,直接买最新的GPU。如果预算相对有限,购买入门的1050TI也是个不错的选择。 +如果大家继续比较GTX较早的系列,也可以发现类似的规律。据此,我们推荐大家在能力范围内尽可能买较新的GPU。 ## 整机配置 -通常,我们主要用GPU做深度学习训练。因此,不需要购买高端的CPU。至于整机配置,尽量参考网上推荐的中高档的配置就好。 - -不过,考虑到GPU的功耗、散热和体积,我们在整机配置上也需要考虑以下三个额外因素。 +通常,我们主要用GPU做深度学习训练。因此,不需要购买高端的CPU。至于整机配置,尽量参考网上推荐的中高档的配置就好。不过,考虑到GPU的功耗、散热和体积,我们在整机配置上也需要考虑以下三个额外因素。 1. 机箱体积。GPU尺寸较大,通常考虑较大且自带风扇的机箱。 2. 电源。购买GPU时需要查一下GPU的功耗,例如50W到300W不等。购买电源要确保功率足够,并不会过载机房的供电。 3. 主板的PCIe卡槽。推荐使用PCIe 3.0 16x来保证充足的GPU到主内存的带宽。如果搭载多块GPU,要仔细阅读主板说明,以确保多块GPU一起使用时仍然是16x带宽。注意,有些主板搭载4块GPU时会降到8x甚至4x带宽。 - ## 小结 * 在预算范围之内,尽可能买较新的GPU。 diff --git a/chapter_appendix/how-to-contribute.md b/chapter_appendix/how-to-contribute.md index 3c05730..42010db 100644 --- a/chapter_appendix/how-to-contribute.md +++ b/chapter_appendix/how-to-contribute.md @@ -22,7 +22,7 @@ 第三步,点击图11.21右方的“Clone or download”绿色按钮,并点击红框中的按钮复制位于你用户名下的代码库地址。按[“安装和运行”](../chapter_prerequisite/install.md)介绍的方法进入命令行模式。假设我们希望将代码库保存在本地的“~/repo”路径之下。进入该路径,键入`git clone `并粘贴位于你用户名下的代码库地址。执行命令 -``` +```bash # 将 your_Github_ID 替换成你的 Github 用户名。 git clone https://github.com/your_Github_ID/gluon-tutorials-zh.git ``` @@ -32,7 +32,7 @@ git clone https://github.com/your_Github_ID/gluon-tutorials-zh.git 第四步,编辑本地路径下的本书代码库。假设我们修改了`~/repo/gluon-tutorials-zh/chapter_deep-learning-basics/linear-regression.md`文件中的一个错别字。在命令行模式中进入路径`~/repo/gluon-tutorials-zh`,执行命令 -``` +```bash git status ``` @@ -42,7 +42,7 @@ git status 确认将提交该修改的文件后,执行以下命令 -``` +```bash git add chapter_deep-learning-basics/linear-regression.md git commit -m 'fix typo in linear-regression.md' git push diff --git a/chapter_appendix/jupyter.md b/chapter_appendix/jupyter.md index d5c3cf0..627bcb5 100644 --- a/chapter_appendix/jupyter.md +++ b/chapter_appendix/jupyter.md @@ -52,7 +52,7 @@ 如果你希望为本书内容做贡献,需要修改在GitHub上markdown格式的源文件(.md文件非.ipynb文件)。通过notedown插件,我们就可以使用Jupyter notebook修改并运行markdown格式的源代码。Linux/macOS用户可以执行以下命令获得GitHub源文件并激活运行环境。 -``` +```bash git clone https://github.com/mli/gluon-tutorials-zh cd gluon-tutorials-zh conda env create -f environment.yml @@ -61,7 +61,7 @@ source activate gluon # Windows 用户运行 activate gluon 下面安装notedown插件,运行Jupyter notebook并加载插件: -``` +```bash pip install https://github.com/mli/notedown/tarball/master jupyter notebook --NotebookApp.contents_manager_class='notedown.NotedownContentsManager' ``` @@ -70,13 +70,13 @@ jupyter notebook --NotebookApp.contents_manager_class='notedown.NotedownContents 首先,执行下面命令生成Jupyter notebook配置文件(如果已经生成可以跳过)。 -``` +```bash jupyter notebook --generate-config ``` 然后,将下面这一行加入到Jupyter notebook配置文件的末尾(Linux/macOS上一般在`~/.jupyter/jupyter_notebook_config.py`) -``` +```bash c.NotebookApp.contents_manager_class = 'notedown.NotedownContentsManager' ``` @@ -87,7 +87,7 @@ c.NotebookApp.contents_manager_class = 'notedown.NotedownContentsManager' 有时候,我们希望在远端服务器上运行Jupyter notebook,并通过本地电脑上的浏览器访问。如果本地机器上安装了Linux或者macOS(Windows通过putty等第三方软件也能支持),那么可以使用端口映射: -``` +```bash ssh myserver -L 8888:localhost:8888 ``` @@ -97,7 +97,7 @@ ssh myserver -L 8888:localhost:8888 我们可以通过ExecutionTime插件来对Jupyter notebook的每个代码单元的运行计时。以下是安装该插件的命令。 -``` +```bash pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user jupyter nbextension enable execute_time/ExecuteTime -- GitLab