1.5 硬件和软件要求
本书将要求编码和运行涉及大量数值运算的任务,如涉及大量矩阵的乘法。事实证明,在新数据上运行一个预先训练过的网络几乎是当今任何笔记本计算机或台式计算机都能做到的。即使使用一个预先训练好的网络,并对其中一小部分进行重新训练,使其专门用于一个新的数据集,也不一定需要专门的硬件。你可以使用一台当前主流配置的笔记本计算机或台式计算机来完成我们在本书第1部分中所做的一切。
然而,我们预计在第2部分完成更高级示例的完整训练,这将需要一个支持CUDA的GPU。在第2部分中使用的默认配置参数假设GPU具有8GB的RAM(我们建议使用NVIDIA GTX 1070或更高的配置),但如果硬件可用的RAM较少的话,这些参数可以适当调整。需要说明的是:如果你愿意等待的话,这样的硬件配置并不是硬性要求的。但是在GPU上运行至少可以减少一个数量级的训练时间(通常会快40~50倍)。单独来看,计算参数更新所需的操作在现代硬件上(如运行在笔记本计算机的CPU上)执行得非常快,大概为几分之一秒到几秒。但问题是训练需要反复执行这些操作,不断地更新网络参数,以减少训练误差。
适度的大型网络从零开始,在配备一个高性能的GPU的工作站中,基于大型、真实的数据集进行训练,可能需要花费数小时到数天的时间。通过在同一台机器上使用多个GPU,或是在有多个GPU的机器集群中训练,可以缩短花费的时间。由于云计算供应商提供相关服务,这些设备并不像听起来那么让人望而却步。DAWNBench是美国斯坦福大学提出的一项有趣的倡议,旨在提供基于公共数据的、常见的深度学习任务的训练时间和云计算耗时的基准。
如果你在学习第2部分的时候没有GPU,我们建议你查看各种云平台提供的产品,其中许多云平台都提供预装有PyTorch的、支持GPU的Jupyter Notebook,且通常提供一定的免费配额。谷歌的Colaboratory是一个不错的选择。
最后要考虑的是操作系统。PyTorch从发布之初就支持Linux和macOS,并在2018年开始支持Windows。由于目前苹果笔记本计算机没有配备支持CUDA的GPU,因此PyTorch预编译macOS的软件包只支持CPU。在本书中,我们尽量不去假设你在一个特定的操作系统中运行,尽管第2部分的一些脚本表明这些是在Linux下的Bash提示符下运行的,但这些脚本很容易转换为与Windows兼容的格式。为了方便,代码将尽可能地像在Jupyter Notebook上运行一样展示出来。
有关安装信息,请参阅PyTorch官方网站的入门指南。我们建议Windows用户使用Anaconda或Miniconda进行安装。用户若使用其他操作系统,如Linux,通常有很多可行的选择,其中pip是Python最常用的包管理器。我们提供了一个名为requirements.txt的文件,pip可以按照该文件来安装依赖项。当然,有经验的用户可以自由地采用与你首选的开发环境最兼容的方式安装软件包。
第2部分还需要一些下载带宽和磁盘空间。在第2部分中,癌症检测项目所需要的原始数据大约需要60GB的下载空间,解压后大约需要120GB的空间,压缩包可以在解压之后删除。另外,鉴于性能的原因一些数据需要被缓存,训练时还将需要80GB的空间。因此系统至少需要200GB的可用磁盘空间用于训练。虽然可以使用网络存储来实现此目的,但如果访问网络存储的速度慢于访问本地磁盘的速度,那么可能会对训练速度造成影响。最好本地SSD上有一些空间用来存储数据,以便快速检索。
使用Jupyter Notebook
我们假设你已经安装了PyTorch和其他依赖项,并且已经验证了一切正常。在前面章节中,我们提到了跟随书中代码进行操作的可行性,在示例代码中,我们大量使用Jupyter Notebook。Jupyter Notebook在浏览器中显示为一个页面,通过它,我们可以交互式地运行代码。代码由内核执行,内核是一个运行在服务器上的进程,它随时准备接收要执行的代码并返回结果,然后在页面上以内联方式呈现结果。Notebook在内存中维护内核的状态,就像代码求值期间定义的变量一样,直到内核被终止或重新启动。我们与Notebook交互的基本单元是单元格:页面上的输入框。我们在这里输入代码,然后让内存对其进行执行(通过菜单中的命令或按<Shift+Enter>组合键)。我们可以在Notebook中添加多个单元格,新的单元格能够识别我们在之前的单元格中创建的变量。代码执行后,单元格最后一行返回的值将输出在单元格正下方,绘图也是如此。通过混合源代码、运算结果和Markdown格式的文本单元格,我们可以生成漂亮的交互式文档。你可以在项目网站(Jupyter官网)上阅读关于Jupyter Notebook的所有信息。
此时,你需要从GitHub上下载的Jupyter Notebook代码的根目录下启动Notebook服务器。具体如何启动服务取决于你的操作系统以及你安装Jupyter Notebook的方式和位置。如果你有任何问题,可以在本书的论坛上提问[5]。一旦启动了Jupyter Notebook,你的默认浏览器将会弹出一个本地Notebook文件列表。
注意
Jupyter Notebook是一个通过代码来表达和研究想法的强大工具。尽管我们认为它很适合本书的用例,但它并不合适所有用例。我们认为,集中精力消除分歧和最小化认知开销是很重要的,毕竟每个人的想法都可能是不同的。
书中所有代码清单的完整代码都可以在本书网站以及GitHub代码仓库中找到。