Skip to content

Commit

Permalink
revise from publisher (d2l-ai#1089)
Browse files Browse the repository at this point in the history
* revise from publisher

* d2l api

* post_latex

* revise from publisher

* revise ch11

* Delete d2l-Copy1.bib

* clear cache

* rm d2lbook clear

* debug anchor

* keep original d2l doc

Co-authored-by: Ubuntu <ubuntu@ip-172-31-12-66.us-west-2.compute.internal>
Co-authored-by: Aston Zhang <22279212+astonzhang@users.noreply.github.com>
Co-authored-by: Aston Zhang <asv325@gmail.com>
  • Loading branch information
4 people committed Aug 10, 2022
1 parent a0aed56 commit f6f7a3c
Show file tree
Hide file tree
Showing 127 changed files with 1,053 additions and 1,074 deletions.
8 changes: 4 additions & 4 deletions chapter_appendix-tools-for-deep-learning/aws.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 使用Amazon EC2实例
:label:`sec_aws`

在本节中,我们将向你展示如何在原始Linux机器上安装所有库。回想一下, :numref:`sec_sagemaker`中,我们讨论了如何使用Amazon SageMaker,而在云上自己构建实例的成本更低。本演示包括三个步骤
本节将展示如何在原始Linux机器上安装所有库。回想一下, :numref:`sec_sagemaker`讨论了如何使用Amazon SageMaker,而在云上自己构建实例的成本更低。本演示包括三个步骤

1. 从AWS EC2请求GPU Linux实例。
1. 安装CUDA(或使用预装CUDA的Amazon机器映像)。
Expand Down Expand Up @@ -44,7 +44,7 @@
:width:`700px`
:label:`fig_ubuntu`

EC2提供了许多不同的实例配置可供选择。对于初学者来说,这有时会让人感到困惑。 :numref:`tab_ec2`列出了不同合适的计算机。
EC2提供了许多不同的实例配置可供选择。对初学者来说,这有时会让人感到困惑。 :numref:`tab_ec2`列出了不同合适的计算机。

:不同的EC2实例类型

Expand Down Expand Up @@ -152,7 +152,7 @@ echo "export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:/usr/local/cuda/lib64" >> ~/.ba

## 安装库以运行代码

要运行本书的代码,只需在EC2实例上为linux用户执行 :ref:`chap_installation`中的步骤,并使用以下提示在远程linux服务器上工作
要运行本书的代码,只需在EC2实例上为linux用户执行 :ref:`chap_installation`中的步骤,并使用以下提示在远程linux服务器上工作

* 要在Miniconda安装页面下载bash脚本,请右击下载链接并选择“copy Link address”,然后执行`wget [copied link address]`
* 运行`~/miniconda3/bin/conda init`, 你可能需要执行`source~/.bashrc`,而不是关闭并重新打开当前shell。
Expand Down Expand Up @@ -185,7 +185,7 @@ jupyter notebook

由于云服务是按使用时间计费的,你应该关闭不使用的实例。请注意,还有其他选择:

* “Stopping”(停止)实例意味着你可以重新启动它。这类似于关闭常规服务器的电源。但是,停止的实例仍将按保留的硬盘空间收取少量费用
* “Stopping”(停止)实例意味着你可以重新启动它。这类似于关闭常规服务器的电源。但是,停止的实例仍将按保留的硬盘空间收取少量费用
* “Terminating”(终止)实例将删除与其关联的所有数据。这包括磁盘,因此你不能再次启动它。只有在你知道将来不需要它的情况下才这样做。

如果你想要将该实例用作更多实例的模板,请右击 :numref:`fig_connect`中的例子,然后选择“Image”$\rightarrow$“Create”以创建该实例的镜像。完成后,选择“实例状态”$\rightarrow$“终止”以终止实例。下次要使用此实例时,可以按照本节中的步骤基于保存的镜像创建实例。唯一的区别是,在 :numref:`fig_ubuntu`所示的“1.选择AMI”中,你必须使用左侧的“我的AMI”选项来选择你保存的镜像。创建的实例将保留镜像硬盘上存储的信息。例如,你不必重新安装CUDA和其他运行时环境。
Expand Down
2 changes: 1 addition & 1 deletion chapter_appendix-tools-for-deep-learning/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
如果你发现笔误、无效的链接、一些你认为我们遗漏了引文的地方,
代码看起来不优雅,或者解释不清楚的地方,请回复我们以帮助读者。
在常规书籍中,两次印刷之间的间隔(即修订笔误的间隔)常常需要几年,
但这本书的改进通常需要几个小时到几天的时间
但这本书的改进通常需要几小时到几天的时间
由于版本控制和持续自动集成(CI)测试,这一切颇为高效。
为此,你需要向gihub存储库提交一个
[pull request](https://github.com/d2l-ai/d2l-en/pulls)
Expand Down
20 changes: 10 additions & 10 deletions chapter_appendix-tools-for-deep-learning/d2l.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,46 +24,46 @@

## 模型

```eval_rst
```eval_rst
.. autoclass:: Module
:members:
:members:
.. autoclass:: LinearRegressionScratch
:members:
.. autoclass:: LinearRegression
:members:
:members:
.. autoclass:: Classification
:members:
```

## 数据

```eval_rst
```eval_rst
.. autoclass:: DataModule
:members:
:members:
.. autoclass:: SyntheticRegressionData
:members:
:members:
.. autoclass:: FashionMNIST
:members:
```

## 训练

```eval_rst
```eval_rst
.. autoclass:: Trainer
:members:
:members:
.. autoclass:: SGD
:members:
```

## 公用

```eval_rst
```eval_rst
.. autofunction:: add_to_class
.. autofunction:: cpu
Expand All @@ -73,7 +73,7 @@
.. autofunction:: num_gpus
.. autoclass:: ProgressBoard
:members:
:members:
.. autoclass:: HyperParameters
:members:
Expand Down
2 changes: 1 addition & 1 deletion chapter_appendix-tools-for-deep-learning/index.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 附录:深度学习工具
:label:`chap_appendix_tools`

为了充分利用《动手学深度学习》,我们将在本附录中介绍不同工具
为了充分利用《动手学深度学习》,本书将在本附录中介绍不同工具
例如如何运行这本交互式开源书籍和为本书做贡献。

```toc
Expand Down
2 changes: 1 addition & 1 deletion chapter_appendix-tools-for-deep-learning/jupyter.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ c.NotebookApp.contents_manager_class = 'notedown.NotedownContentsManager'
ssh myserver -L 8888:localhost:8888
```

以上是远程服务器`myserver`的地址。然后我们可以使用http://localhost:8888 访问运行Jupyter Notebook的远程服务器`myserver`在下一节中,我们将详细介绍如何在AWS实例上运行Jupyter Notebook。
以上是远程服务器`myserver`的地址。然后我们可以使用http://localhost:8888 访问运行Jupyter Notebook的远程服务器`myserver`下一节将详细介绍如何在AWS实例上运行Jupyter Notebook。

### 执行时间

Expand Down
2 changes: 1 addition & 1 deletion chapter_appendix-tools-for-deep-learning/sagemaker.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 使用Amazon SageMaker
:label:`sec_sagemaker`

深度学习应用程序可能需要很多计算资源,这很容易超出你的本地计算机所能提供的范围。云计算服务允许你使用功能更强大的计算机更轻松地运行本书的GPU密集型代码。本节将介绍如何使用Amazon SageMaker运行本书的代码。
深度学习程序可能需要很多计算资源,这很容易超出你的本地计算机所能提供的范围。云计算服务允许你使用功能更强大的计算机更轻松地运行本书的GPU密集型代码。本节将介绍如何使用Amazon SageMaker运行本书的代码。

## 注册

Expand Down
38 changes: 19 additions & 19 deletions chapter_appendix-tools-for-deep-learning/selecting-servers-gpus.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,46 +5,46 @@

## 选择服务器

通常不需要购买具有多个线程的高端CPU,因为大部分计算都发生在GPU上。这就是说,由于Python中的全局解释器锁(GIL),CPU的单线程性能在我们有4-8个GPU的情况下可能很重要。所有的条件都是一样的,这意味着核数较少但时钟频率较高的CPU可能是更经济的选择。例如,当在6核4GHz和8核3.5GHz CPU之间进行选择时,前者更可取,即使其聚合速度较低。一个重要的考虑因素是,GPU使用大量的功率,从而消耗大量的热量。这需要非常好的冷却和足够大的机箱来使用GPU。如有可能,请遵循以下指南:
通常不需要购买具有多个线程的高端CPU,因为大部分计算都发生在GPU上。这就是说,由于Python中的全局解释器锁(GIL),CPU的单线程性能在有4-8个GPU的情况下可能很重要。所有的条件都是一样的,这意味着核数较少但时钟频率较高的CPU可能是更经济的选择。例如,当在6核4GHz和8核3.5GHz CPU之间进行选择时,前者更可取,即使其聚合速度较低。一个重要的考虑因素是,GPU使用大量的功率,从而消耗大量的热量。这需要非常好的冷却和足够大的机箱来使用GPU。如有可能,请遵循以下指南:

1. **电源**。GPU使用大量的电源。每个设备预计高达350W(检查显卡的*峰值需求*而不是一般需求,因为高效代码可能会消耗大量能源)。如果你的电源不能满足需求,你会发现系统变得不稳定
1. **电源**。GPU使用大量的电源。每个设备预计高达350W(检查显卡的*峰值需求*而不是一般需求,因为高效代码可能会消耗大量能源)。如果电源不能满足需求,系统会变得不稳定
1. **机箱尺寸**。GPU很大,辅助电源连接器通常需要额外的空间。此外,大型机箱更容易冷却。
1. **GPU散热**如果你有大量的GPU,你可能需要投资水冷。此外,即使风扇较少,也应以“公版设计”为目标,因为它们足够薄,可以在设备之间进气。如果你购买的是多风扇GPU,安装多个GPU时,它可能太厚而无法获得足够的空气,你将遇到热气流
1. **PCIe插槽**。在GPU之间来回移动数据(以及在GPU之间交换数据)需要大量带宽。我们建议使用16通道的PCIe 3.0插槽。如果你安装了多个GPU,请务必仔细阅读主板说明,以确保在同时使用多个GPU时16$\times$带宽仍然可用,并且你使用的是PCIe3.0,而不是用于附加插槽的PCIe2.0。在安装多个GPU的情况下,一些主板的带宽降级到8$\times$甚至4$\times$。这部分是由于CPU提供的PCIe通道数量限制。
1. **GPU散热**如果有大量的GPU,可能需要投资水冷。此外,即使风扇较少,也应以“公版设计”为目标,因为它们足够薄,可以在设备之间进气。当使用多风扇GPU,安装多个GPU时,它可能太厚而无法获得足够的空气。
1. **PCIe插槽**。在GPU之间来回移动数据(以及在GPU之间交换数据)需要大量带宽。建议使用16通道的PCIe 3.0插槽。当安装了多个GPU时,请务必仔细阅读主板说明,以确保在同时使用多个GPU时16$\times$带宽仍然可用,并且使用的是PCIe3.0,而不是用于附加插槽的PCIe2.0。在安装多个GPU的情况下,一些主板的带宽降级到8$\times$甚至4$\times$。这部分是由于CPU提供的PCIe通道数量限制。

简而言之,以下是构建深度学习服务器的一些建议
简而言之,以下是构建深度学习服务器的一些建议

* **初学者**。购买低功耗的低端GPU(适合深度学习的廉价游戏GPU,功耗150-200W)。如果幸运的话,你当前的计算机将支持它
* **初学者**。购买低功耗的低端GPU(适合深度学习的廉价游戏GPU,功耗150-200W)。如果幸运的话,大家现在常用的计算机将支持它
* **1个GPU**。一个4核的低端CPU就足够了,大多数主板也足够了。以至少32 GB的DRAM为目标,投资SSD进行本地数据访问。600W的电源应足够。买一个有很多风扇的GPU。
* **2个GPU**。一个4-6核的低端CPU就足够了。你可以瞄准64 GB的DRAM并投资于SSD。对于两个高端GPU,你将需要1000瓦的功率。对于主板,请确保它们具有*两个*PCIe 3.0 x16插槽。如果可以,请使用PCIe 3.0 x16插槽之间有两个可用空间(60毫米间距)的主板,以提供额外的空气。在这种情况下,购买两个具有大量风扇的GPU。
* **4个GPU**确保你购买的CPU具有相对较快的单线程速度(即较高的时钟频率)。你可能需要具有更多PCIe通道的CPU,例如AMD Threadripper。你可能需要相对昂贵的主板才能获得4个PCIe 3.0 x16插槽,因为它们可能需要一个PLX来多路复用PCIe通道。购买带有公版设计的GPU,这些GPU很窄,并且让空气进入GPU之间。你需要一个1600-2000W的电源,而你办公室的插座可能不支持。此服务器可能在运行时*声音很大,很热*你不想把它放在桌子下面。建议使用128 GB的DRAM。获取一个用于本地存储的SSD(1-2 TB NVMe)和RAID配置的硬盘来存储数据。
* **8 GPU**你需要购买带有多个冗余电源的专用多GPU服务器机箱(例如,每个电源为1600W时为2+1)。这将需要双插槽服务器CPU、256 GB ECC DRAM、快速网卡(建议使用10 GBE),并且你需要检查服务器是否支持GPU的*物理外形*。用户GPU和服务器GPU之间的气流和布线位置存在显著差异(例如RTX 2080和Tesla V100)。这意味着你可能无法在服务器中安装消费级GPU,因为电源线间隙不足或缺少合适的接线(本书一位合著者痛苦地发现了这一点)。
* **2个GPU**。一个4-6核的低端CPU就足够了。可以考虑64 GB的DRAM并投资于SSD。两个高端GPU将需要1000瓦的功率。对于主板,请确保它们具有*两个*PCIe 3.0 x16插槽。如果可以,请使用PCIe 3.0 x16插槽之间有两个可用空间(60毫米间距)的主板,以提供额外的空气。在这种情况下,购买两个具有大量风扇的GPU。
* **4个GPU**确保购买的CPU具有相对较快的单线程速度(即较高的时钟频率)。可能需要具有更多PCIe通道的CPU,例如AMD Threadripper。可能需要相对昂贵的主板才能获得4个PCIe 3.0 x16插槽,因为它们可能需要一个PLX来多路复用PCIe通道。购买带有公版设计的GPU,这些GPU很窄,并且让空气进入GPU之间。需要一个1600-2000W的电源,而办公室的插座可能不支持。此服务器可能在运行时*声音很大,很热*不想把它放在桌子下面。建议使用128 GB的DRAM。获取一个用于本地存储的SSD(1-2 TB NVMe)和RAID配置的硬盘来存储数据。
* **8 GPU**需要购买带有多个冗余电源的专用多GPU服务器机箱(例如,每个电源为1600W时为2+1)。这将需要双插槽服务器CPU、256 GB ECC DRAM、快速网卡(建议使用10 GBE),并且需要检查服务器是否支持GPU的*物理外形*。用户GPU和服务器GPU之间的气流和布线位置存在显著差异(例如RTX 2080和Tesla V100)。这意味着可能无法在服务器中安装消费级GPU,因为电源线间隙不足或缺少合适的接线(本书一位合著者痛苦地发现了这一点)。

## 选择GPU

目前,AMD和NVIDIA是专用GPU的两大主要制造商。NVIDIA是第一个进入深度学习领域的公司,通过CUDA为深度学习框架提供更好的支持。因此,大多数买家选择NVIDIA GPU。

NVIDIA提供两种类型的GPU,针对个人用户(例如,通过GTX和RTX系列)和企业用户(通过其Tesla系列)。这两种类型的GPU提供了相当的计算能力。但是,企业用户GPU通常使用强制(被动)冷却、更多内存和ECC(纠错)内存。这些GPU更适用于数据中心,通常成本是消费者GPU的十倍。

如果你是一个拥有100个服务器的大公司,你应该考虑英伟达Tesla系列,或者在云中使用GPU服务器。对于实验室或10+服务器的中小型公司,英伟达RTX系列可能是最具成本效益的。你可以购买超微或华硕机箱的预配置服务器,这些服务器可以有效地容纳4-8个GPU。
如果是一个拥有100个服务器的大公司,则应该考虑英伟达Tesla系列,或者在云中使用GPU服务器。对于实验室或10+服务器的中小型公司,英伟达RTX系列可能是最具成本效益的,可以购买超微或华硕机箱的预配置服务器,这些服务器可以有效地容纳4-8个GPU。

GPU供应商通常每一到两年发布一代,例如2017年发布的GTX 1000(Pascal)系列和2019年发布的RTX 2000(Turing)系列。每个系列都提供几种不同的型号,提供不同的性能级别。GPU性能主要是以下三个参数的组合:

1. **计算能力**通常我们追求32位浮点计算能力。16位浮点训练(FP16)也进入主流。如果你只对预测感兴趣,还可以使用8位整数。最新一代图灵GPU提供4-bit加速。不幸的是,目前训练低精度网络的算法还没有普及
1. **内存大小**随着你的模型变大或训练期间使用的批量变大,你将需要更多的GPU内存。检查HBM2(高带宽内存)与GDDR6(图形DDR)内存。HBM2速度更快,但成本更高
1. **内存带宽**只有当你有足够的内存带宽时,你才能最大限度地利用你的计算能力。如果使用GDDR6,请追求宽内存总线。
1. **计算能力**通常大家会追求32位浮点计算能力。16位浮点训练(FP16)也进入主流。如果只对预测感兴趣,还可以使用8位整数。最新一代图灵GPU提供4-bit加速。不幸的是,目前训练低精度网络的算法还没有普及
1. **内存大小**随着模型变大或训练期间使用的批量变大,将需要更多的GPU内存。检查HBM2(高带宽内存)与GDDR6(图形DDR)内存。HBM2速度更快,但成本更高
1. **内存带宽**当有足够的内存带宽时,才能最大限度地利用计算能力。如果使用GDDR6,请追求宽内存总线。

对于大多数用户来说,只需看看计算能力就足够了。请注意,许多GPU提供不同类型的加速。例如,NVIDIA的Tensor Cores将操作符子集的速度提高了5$\times$。确保你的库支持这一点。GPU内存应不小于4GB(8GB更好)。尽量避免将GPU也用于显示GUI(改用内置显卡)。如果无法避免,请添加额外的2GB RAM以确保安全。
对于大多数用户,只需看看计算能力就足够了。请注意,许多GPU提供不同类型的加速。例如,NVIDIA的Tensor Cores将操作符子集的速度提高了5$\times$。确保所使用的库支持这一点。GPU内存应不小于4GB(8GB更好)。尽量避免将GPU也用于显示GUI(改用内置显卡)。如果无法避免,请添加额外的2GB RAM以确保安全。

:numref:`fig_flopsvsprice`比较了各种GTX 900、GTX 1000和RTX 2000系列的(GFlops)和价格(Price)。价格是维基百科上的建议价格。

![浮点计算能力和价格比较](../img/flopsvsprice.svg)
:label:`fig_flopsvsprice`

我们可以看到很多事情
由上图,可以看出很多事情

1. 在每个系列中,价格和性能大致成比例。Titan因拥有大GPU内存而有相当的溢价。然而,通过比较980 Ti和1080 Ti可以看出,较新型号具有更好的成本效益。RTX 2000系列的价格似乎没有多大提高。然而,它们提供了更优秀的低精度性能(FP16、INT8和INT4)
2. GTX 1000系列的性价比大约是900系列的两倍
1. 在每个系列中,价格和性能大致成比例。Titan因拥有大GPU内存而有相当的溢价。然而,通过比较980 Ti和1080 Ti可以看出,较新型号具有更好的成本效益。RTX 2000系列的价格似乎没有多大提高。然而,它们提供了更优秀的低精度性能(FP16、INT8和INT4)
2. GTX 1000系列的性价比大约是900系列的两倍
3. 对于RTX 2000系列,浮点计算能力是价格的“仿射”函数。

![浮点计算能力和能耗](../img/wattvsprice.svg)
Expand All @@ -55,7 +55,7 @@ GPU供应商通常每一到两年发布一代,例如2017年发布的GTX 1000
## 小结

* 在构建服务器时,请注意电源、PCIe总线通道、CPU单线程速度和散热。
* 如果可能,你应该购买最新一代的GPU
* 如果可能,应该购买最新一代的GPU
* 使用云进行大型部署。
* 高密度服务器可能不与所有GPU兼容。在你购买之前,请检查一下机械和散热规格。
* 高密度服务器可能不与所有GPU兼容。在购买之前,请检查一下机械和散热规格。
* 为提高效率,请使用FP16或更低的精度。
Loading

0 comments on commit f6f7a3c

Please sign in to comment.