我目前正在处理一个相对较大的数据集,对此我有一些内存使用问题。我正在处理大多数不同的数据类型:浮点数、整数、布尔值、字符串,其中一些已更改为因子。
从内存使用 (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)的答案。我希望答案并不取决于品牌。