RAPIDS 中 GPU 与 CPU 内存使用情况

Zoo*_*nda 0 python memory pandas rapids

我知道 GPU 和 CPU 有自己的 RAM,但我不明白为什么相同的数据帧在 pandas 和 RAPIDS cuDF 中加载时,内存使用情况截然不同。有人可以解释一下吗?

在此输入图像描述

在此输入图像描述

Nic*_*ker 8

正如 Josh Friedlander 的评论中所述,在 cuDF 中,对象数据类型明确用于字符串。在 pandas 中,这是字符串的数据类型,也是任意/混合数据类型(例如列表、字典、数组等)。这可以解释许多情况下的这种内存行为,但如果两列都是字符串,则无法解释它。

\n

假设两列都是字符串,仍然可能存在差异。在 cuDF 中,字符串列表示为原始字符的单个内存分配、用于处理缺失值的关联空掩码分配以及用于处理行偏移的关联分配,与 Apache Arrow 内存规范一致。因此,这些列中表示的任何内容在 cuDF 中的数据结构中都可能比 Pandas 中的默认字符串数据结构更有效(这基本上一直都是如此)。

\n

以下示例可能会有所帮助:

\n
import cudf\nimport pandas as pd\n\nXc = cudf.datasets.randomdata(nrows=1000, dtypes={"id": int, "x": int, "y": int})\nXp = Xc.to_pandas()\n\nprint(Xp.astype("object").memory_usage(deep=True), "\\n")\nprint(Xc.astype("object").memory_usage(deep=True), "\\n")\nprint(Xp.astype("string[pyarrow]").memory_usage(deep=True))\nIndex      128\nid       36000\nx        36000\ny        36000\ndtype: int64 \n\nid       7487\nx        7502\ny        7513\nIndex       0\ndtype: int64 \n\nIndex     128\nid       7483\nx        7498\ny        7509\ndtype: int64\n\n
Run Code Online (Sandbox Code Playgroud)\n

在 pandas 中使用 Arrow 规范字符串 dtype 可以节省大量内存,并且通常与 cuDF 匹配。

\n