数据类型如何影响硬件(CPU / GPU / TPU)性能?

数据挖掘 大数据 表现 硬件
2022-02-16 05:18:47

我目前正在处理一个相对较大的数据集,对此我有一些内存使用问题。我正在处理大多数不同的数据类型:浮点数、整数、布尔值、字符串,其中一些已更改为因子。

从内存使用 (RAM) 的角度来看,当我将列类型从 float64 切换到 float32 时,很清楚会发生什么:内存使用量除以 2。对于将字符串转换为因子,它有点不太清楚,但我得到的一般想法是,关于内存,它们用小整数进行三角化,并在必要时重新映射。这并不重要,因为它们通常通过以某种方式编码为数字列来进行预处理。

现在我想知道的是,数据类型如何影响管道中的计算(预处理、校准)。我不知何故想到将数据类型从 float 64 更改为 float 32 将使 CPU 的计算速度提高两倍,但这似乎变化很大。所以,我想知道,对于重要的事情(预处理、校准),数据类型如何影响硬件性能?

一些澄清/简单的假设:

  • 我的直觉是,如果混合数据类型或在内存使用量过低(使用 float16)时关于收敛性,CPU 中可能会发生一些奇怪的事情。所以让我们假设我们只是在处理 float64 到 float32 的转换。

  • 我正在尝试获得与语言/库/模型无关的答案。如果这很重要,我主要使用 Python + pandas(老实说,我从来没有真正需要在 R 中处理数据类型),Python + cudf 用于 GPU。如果那件事我正在使用 tensorflow + keras 来构建一个 NN。值得注意的是,我打电话给tf.keras.backend.set_floatx('float32'). 同样,我已经小心地确保预处理管道正确处理 float32 数据类型并且代码是矢量化的。

  • 当我使用不同的加速器(GPU / TPU)参与 Kaggle 比赛时,我想得到一个涵盖主要硬件(CPU / GPU / TPU)的答案。我希望答案并不取决于品牌。

1个回答

您从减少精度中看到的性能增益变化可能与使用不同类型的不同框架有关。即使在向下转换数据类型之后,某些操作也会自动向上转换类型。您提到使用 Pandas 和 TensorFlow / Keras。混合这些框架会导致不必要的数据类型重铸。最好使用单个框架以避免重铸。

没有与软件(即语言、库或模型)无关的答案。硬件利用率是特定于软件的。为了获得降低的精度增益,相同的软件堆栈应该贯穿整个建模过程。该软件应针对特定芯片(即 CPU、GPU 或 TPU)而设计。