用法#

要使用 cudf.pandas,请在导入或使用 pandas 之前 通过以下任一方法启用它:

  1. 使用 Jupyter/IPython magics:%load_ext cudf.pandas

  2. 从命令行执行 Python 脚本时:python -m cudf.pandas script.py

  3. 从脚本或 Python 解释器中:import cudf.pandas; cudf.pandas.install()

有关每种方法的更多信息,请参阅以下说明。

Jupyter Notebook 或 IPython 用法#

在 notebook 或 IPython 会话开始时加载 cudf.pandas 扩展。之后,只需 import pandas,操作就会使用 GPU。

%load_ext cudf.pandas

import pandas as pd

URL = "https://github.com/plotly/datasets/raw/master/tips.csv"
df = pd.read_csv(URL)                 # uses the GPU
df["size"].value_counts()             # uses the GPU
df.groupby("size").total_bill.mean()  # uses the GPU
df.apply(list, axis=1)                # uses the CPU (fallback)

命令行用法#

从命令行,使用 -m cudf.pandas 运行你的 Python 脚本。

python -m cudf.pandas script.py

这将使 import pandas 在零代码改动的情况下使用 cudf.pandas 加速。

导入用法#

启用 cudf.pandas 的另一种方法是通过显式导入。如果你正在运行一个无法控制命令行标志的脚本,这是另一种以最少代码改动启用 cudf.pandas 的选项。务必确保在导入 pandas 之前 调用 cudf.pandas.install()。这在 Jupyter notebook 或 IPython 环境中也有效。

import cudf.pandas
cudf.pandas.install()

import pandas as pd

使用 multiprocessingconcurrent.futures#

要在脚本中使用工作池(例如 multiprocessing.Poolconcurrent.futures.ProcessPoolExecutor)与 cudf.pandas,必须在工作进程和控制脚本中都加载 cudf.pandas 模块。最可靠的方法是在脚本顶部,在其他任何操作之前,以编程方式安装 cudf.pandas。例如:

# This is equivalent to python -m cudf.pandas, but will run on the
# workers too. These two lines must run before pandas is imported,
# either directly or transitively.
import cudf.pandas
cudf.pandas.install()

from multiprocessing import Pool

with Pool(4) as pool:
    # use pool here
    ...

性能分析 cudf.pandas#

cudf.pandas 会尽可能尝试使用 GPU,并在某些操作中回退到 CPU。使用 cudf.pandas.profile magic 运行代码会生成一份报告,显示哪些操作使用了 GPU,哪些使用了 CPU。这有助于你识别代码中可以重写以更适合 GPU 的部分。

使用函数性能分析器#

首先,启用 cudf.pandas

%load_ext cudf.pandas
import pandas as pd

接下来,使用 IPython/Jupyter magic cudf.pandas.profile

%%cudf.pandas.profile
df = pd.DataFrame({'a': [0, 1, 2], 'b': [3, 4, 3]})

df.min(axis=1)
out = df.groupby('a').filter(
    lambda group: len(group) > 1
)

这会在单元格运行后给出性能分析输出,如下所示。

cudf-pandas-profile

当某个操作回退到使用 CPU 时,通常是因为 cuDF 尚未实现该操作。性能分析器会生成一个方便的链接,用于向 cuDF 团队报告缺失的功能。

使用行性能分析器#

有一个行性能分析器,通过 IPython/Jupyter magic cudf.pandas.line_profile 激活。

%%cudf.pandas.line_profile
df = pd.DataFrame({'a': [0, 1, 2], 'b': [3, 4, 3]})

df.min(axis=1)
out = df.groupby('a').filter(
    lambda group: len(group) > 1
)

行性能分析器的输出显示源代码以及每行在 GPU 和 CPU 上执行所花费的时间。

cudf-pandas-line-profile

从命令行进行性能分析#

要对从命令行运行的脚本进行性能分析,传递 --profile 参数:

python -m cudf.pandas --profile script.py

cudf.pandas CLI 特性#

python 解释器提供输入的几种方式也适用于 python -m cudf.pandas,例如 REPL、-c 标志以及从 stdin 读取。

执行 python -m cudf.pandas 不带脚本名将进入一个 REPL(read-eval-print loop),其行为类似于正常的 python 解释器。

-c 标志接受一个代码字符串来运行,例如:

$ python -m cudf.pandas -c "import pandas; print(pandas)"
<module 'pandas' (ModuleAccelerator(fast=cudf, slow=pandas))>

用户也可以从 stdin 提供要执行的代码,例如:

$ echo "import pandas; print(pandas)" | python -m cudf.pandas
<module 'pandas' (ModuleAccelerator(fast=cudf, slow=pandas))>