我目前正在为我的 ML 应用程序构建一个服务器。将要使用的神经网络包括用于地标检测的 CNN、用于分割的 UNET++(也主要是 CNN)和用于物体检测的 CNN。
我必须最小化的最重要的性能指标是推理时间,因为我将在不同的线程上并行运行多个网络,并且只有 1/4 秒的时间用于推理。
我还需要尽可能保持较高的准确度,否则我当然可以将网络规模缩小到最小。
我应该关注哪些性能指标。例如,TFLOP 的数量是否最重要?如果资金不受限制,这将对我找到选择哪种 GPU/TPU 来实现 CNN 的最快推理时间大有帮助。
我非常感谢每一个回答!
答案1
显卡的 TFLOP 分数取决于通过它传输的数据类型。由于“快速而粗糙”,神经网络处理往往使用半精度 (FP16) 数据类型。
通常,消费级显卡针对的是单精度数据(32 位,FP32),这是最常用于游戏目的。
显卡通常还会列出双精度(FP64)TFLOP 值,这些值通常是 FP32 的一半,这通常是由于数据量增加了一倍。
这可能会让您认为 FP16 数据的处理速度应该是 FP32 的两倍,但情况并非总是如此,因为处理单元的内部寄存器是 32 位的,要以两倍的速度工作,您需要将两个 FP16 值打包到 FP32 寄存器中。并非所有显卡都能执行在单个 FP32 中使用两个 FP16 单元所需的数据打包,因此较小的数据类型没有任何好处。几年前,显卡制造商“限制”消费级显卡的 FP16 性能,以迫使开发人员使用确实具有这种优化的工作站或科学卡,这引起了小小的骚动。
哪种显卡“最好”很大程度上取决于您的数据集,而这只有您自己才知道。TFLOPS 可以很好地指示处理能力,但您必须首先知道您拥有哪种类型的数据(FP16/FP32),以及您的显卡是否经过优化,可以在较小的数据类型上完成双倍的工作。
内存带宽也是一个因素,带宽越高,等待数据的时间就越少。
如需更多信息,我建议阅读Nvidia 深度学习 SDK文件指出:
与更高精度的 FP32 与 FP64 相比,半精度(也称为 FP16)数据减少了神经网络的内存使用量,从而允许训练和部署更大的网络,并且 FP16 数据传输所需的时间比 FP32 或 FP64 传输更短。
单精度(也称为 32 位)是一种常见的浮点格式(在 C 衍生的编程语言中为 float),64 位称为双精度(double)。
深度神经网络 (DNN) 已在许多领域取得突破,包括图像处理和理解、语言建模、语言翻译、语音处理、游戏玩法等。为了实现这些结果,DNN 的复杂性不断增加,这反过来又增加了训练这些网络所需的计算资源。降低所需资源的一种方法是使用低精度算法,这具有以下好处。
减少所需的内存量
半精度浮点格式 (FP16) 使用 16 位,而单精度 (FP32) 使用 32 位。降低所需内存可以训练更大的模型或使用更大的小批量进行训练。
缩短训练或推理时间
执行时间可能对内存或算术带宽敏感。半精度将访问的字节数减半,从而减少了在内存受限层上花费的时间. NVIDIA GPU 提供高达与单精度相比,半精度算术吞吐量提高了 8 倍,从而加快了数学受限层的速度。
您的需要很大程度上取决于您正在训练的模型。您需要确定您的模型是受内存(大小或速度)还是数学限制,并据此做出决定。