给初学者的深度学习计算机配置指南

深度学习是计算密集型任务,初学者应该如何合理的配置一台电脑来学习深度学习。电脑的CPU,显卡,内存,硬盘如何影响深度学习的性能,我们应该如何用有限的预算来配置满足我们学习需求的电脑,在本文中,我们将分析不同硬件对深度学习性能的影响,告诉你如何配置出适合自己的电脑。
如果你不愿意看太长的理论分析,那我直接在这里先给出结论:
显卡(GPU):RTX4060 Ti 16GB或者RTX4070Ti Super 16GB,rtx 4060 8GB (低预算)
处理器(CPU): Ryzen 5 5600。
内存(RAM):内存是显存4倍。例如,8GB显存 = 32GB内存;如果有2块12GB显存的GPU = 96GB内存。
硬盘/固态硬盘(SSD):固态硬盘。
电源(PSU):将GPU、CPU的功耗相加,再加上100到300瓦来计算所需的总功率;购买电源时确保电源的接口(6+8针)和显卡相适应。
主板:选择选择与显卡PCIE规格相适应的主板。
运行本课程示例代码的最低配置为:
CPU:i5
显卡:GTX1070
内存:8GB
硬盘:120GB
以下为详细分析
GPU
GPU是深度学习应用的核心,其对速度的提升非常显著,因此GPU也是深度学习电脑配置的核心。
由于英伟达(NVIDIA)的GPU,支持 CUDA(Compute Unified Device Architecture),很多深度学习框架(如 TensorFlow、PyTorch、Keras 等)广泛支持 CUDA,从而在英伟达 GPU 上进行高效的计算。且英伟达的GPU有广泛的深度学习生态系统支持、成熟的开发工具和活跃的社区支持。所以在选择GPU时应该选择英伟达的GPU,不应该选择AMD和Intel的GPU,否则因缺乏框架咫尺以及兼容性的问题,影响学习进度。
预算有限的情况下,推荐使用RTX 4060Ti 16GB,这款显卡有着16GB大显存,可以进行更大的模型训练,使用更大的Batch Size,以提高模型的训练效率。在使用stable diffusion这样的文字生成图片的应用上,可以处理高分辨率图像、视频或其他大型数据集,大显存可以更好地支持这些任务,避免由于显存不足而导致的计算瓶颈。且在文字生成视频的应用中,8GB显存的GPU无法完成计算,而16GB显存的显卡可以完成文字生成视频的计算。
如果预算非常紧张,也可以选择二手显卡,但是二手显卡大多被用于加密货币计算,长期高负载高温使用,容易损坏,通常不建议购买。
CPU
为了明智地选择CPU,我们首先需要了解CPU与深度学习之间的关系。CPU在深度学习中究竟起什么作用?当您将深度网络运行在GPU上时,CPU几乎不进行计算,但它仍然负责以下任务:
- 在代码中写入和读取变量
- 执行函数调用等指令
- 在GPU上启动函数调用
- 从数据中创建小批量
- 将数据传输到GPU
所需的CPU核心数量
当您使用三个不同的库训练深度神经网络时,您会发现有一个CPU线程总是处于100%的负载状态(有时另一个线程会在0%到100%之间波动一段时间)。这表明,大多数深度学习库——事实上,大多数软件应用程序——只使用一个线程。这意味着多核CPU在这种情况下几乎没有用处。然而,如果您使用多个GPU并且使用并行化框架如MPI,那么您将需要运行多个程序,这时需要多个线程。通常情况下,每个GPU使用一个线程就足够了,但如果每个GPU使用两个线程,大多数深度学习库的性能会更好;这些库在一个核心上运行,但有时会异步调用函数,这时会使用第二个CPU线程。请记住,许多CPU可以在每个核心上运行多个线程(特别是Intel CPU),因此每个GPU配一个核心通常是足够的,但可能会有些限制。
CPU与PCI-Express
这可是个陷阱!一些新款CPU不支持完整的40条PCIe通道——如果您想构建一个多GPU系统,请避免这些CPU。此外,如果您的主板支持PCIe 4.0,请确保您的处理器实际上也支持PCIe 4.0。
CPU缓存大小
正如我们将看到的,CPU缓存大小在CPU-GPU管道的后期变得不太相关,但我仍然包括了一个简短的分析部分,以确保我们考虑到管道中的每一个可能的瓶颈,并且对整个过程有一个透彻的理解。
CPU缓存通常在购买时被忽视,但实际上它是整体性能谜题中非常重要的一块。CPU缓存是芯片上非常小的一部分内存,离CPU非常近,可以用于高速计算和操作。CPU通常有一层层的缓存,从小而快的缓存(L1、L2)到慢而大的缓存(L3、L4)。作为一名程序员,您可以将其视为一个哈希表,其中每个条目是一个键值对,您可以在特定键上进行非常快速的查找:如果找到了这个键,就可以对缓存中的值进行快速的读写操作;如果没有找到这个键(称为缓存未命中),CPU就需要等待RAM赶上来,然后从那里读取值——这是一个非常缓慢的过程。反复的缓存未命中会导致性能显著下降。高效的CPU缓存过程和架构通常对CPU性能至关重要。
CPU确定其缓存过程的方式非常复杂,但通常可以假设反复使用的变量、指令和RAM地址将保留在缓存中,而不太频繁使用的项则不会。
在深度学习中,同一内存在每个小批量中被反复读取,然后被发送到GPU(内存只是被覆盖),但是否可以将其存储在缓存中取决于小批量的大小。对于128大小的小批量,我们有MNIST的0.4MB和CIFAR的1.5MB,这将适合大多数CPU缓存;但对于ImageNet,我们有超过85MB的小批量,这对最大的缓存来说也是太大了(L3缓存限制在几MB)。
由于数据集通常太大,无法完全放入缓存,因此每个新的小批量都需要从RAM中读取新数据——无论如何都会不断访问RAM。
RAM内存地址保留在缓存中(CPU可以在缓存中进行快速查找,指向RAM中数据的确切位置),但这仅在整个数据集适合RAM时才适用,否则内存地址会改变,并且缓存不会带来任何加速效果(如果使用固定内存也许可以防止这种情况,但正如您将在后面看到的那样,这并不重要)。
其他深度学习代码部分——如变量和函数调用——将受益于缓存,但这些一般数量很少,并且很容易适应几乎任何CPU的小而快的L1缓存。
根据这一推论,可以得出结论:CPU缓存大小应该不太重要,接下来部分的进一步分析也与此结论一致。
所需的CPU时钟频率
当人们想到快速CPU时,他们通常首先想到的是时钟频率。4GHz比3.5GHz更好,真的是这样吗?对于比较相同架构的处理器,例如“Ivy Bridge”,这一点通常是正确的,但在不同处理器之间并不总是有效的比较方法。而且,它也不一定是性能的最佳衡量标准。
对于深度学习来说,CPU几乎没有什么计算任务:增加几个变量,评估一些布尔表达式,调用GPU上的一些函数或程序中的函数——所有这些都依赖于CPU核心时钟频率。
虽然这种推理看起来合理,但事实是,当我运行深度学习程序时,CPU使用率达到了100%,那么问题出在哪里呢?我做了一些CPU核心降频实验以找出答案。
那么为什么在CPU核心时钟频率相对不重要的情况下,CPU使用率会达到100%呢?答案可能是CPU缓存未命中:CPU不断忙于访问RAM,但同时CPU必须等待RAM以较慢的时钟频率赶上来,这可能导致了一个矛盾的忙碌等待状态。如果这种情况属实,那么降低CPU核心频率不会导致性能的显著下降——正如您在上面看到的实验结果。
此外,CPU还执行其他操作,如将数据复制到小批量中,并准备将数据复制到GPU,但这些操作依赖于内存时钟频率,而不是CPU核心时钟频率。现在我们来看一下内存。
直接内存访问(DMA)
CPU与其RAM只能通过DMA与GPU通信。第一步,在CPU RAM和GPU RAM中分别保留一个特定的DMA传输缓冲区;第二步,CPU将请求的数据写入CPU侧的DMA缓冲区;第三步,保留的缓冲区被传输到GPU RAM中,CPU无需任何帮助。您的PCIe带宽为8GB/s(PCIe 2.0)或15.75GB/s(PCIe 3.0),因此您应该根据上面的分析选择具有良好峰值传输限额的RAM,对吗?
不一定。软件在这里起到了很大的作用。如果您以巧妙的方式进行一些传输操作,您将能够使用更便宜的较慢内存。下面是具体方法。
RAM大小
您应该至少拥有与GPU相同大小的RAM。您可以使用更少的RAM,但可能需要一步一步地传输数据。不过根据我的经验,拥有更多的RAM会更方便。
心理学告诉我们,注意力是一种随着时间推移而耗竭的资源。RAM是为数不多的能够节省您注意力资源的硬件之一,这样您可以将精力集中在更难的编程问题上。如果您拥有更多的RAM,您就可以避免这些瓶颈,节省时间,并将精力集中在更紧迫的问题上。尤其是在Kaggle竞赛中,我发现额外的RAM对于特征工程非常有用。所以如果您有足够的资金,并且进行大量的预处理,那么额外的RAM可能是一个不错的选择。
硬盘/固态硬盘(SSD)
在某些情况下,硬盘可能会成为深度学习的一个显著瓶颈。如果您的数据集很大,通常其中一部分会在SSD/硬盘上,一部分会在RAM中,还有两个小批量在GPU RAM中。为了持续为GPU提供数据,我们需要以与GPU处理速度相同的速度提供新的小批量。
为此,我们需要使用与异步小批量分配相同的理念。我们需要异步读取包含多个小批量的文件——这非常重要!如果不进行异步处理,您将显著降低性能(5-10%),并使您精心设计的硬件优势无效。
参考资料:https://philliplakis.medium.com/a-starter-hardware-guide-to-deep-learning-19e8ddd34d0e