用法#
要使用 cudf.pandas
,请在导入或使用 pandas 之前 通过以下任一方法启用它:
使用 Jupyter/IPython magics:%
load_ext cudf.pandas
从命令行执行 Python 脚本时:
python -m cudf.pandas script.py
从脚本或 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
使用 multiprocessing
或 concurrent.futures
#
要在脚本中使用工作池(例如 multiprocessing.Pool
或 concurrent.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
)
这会在单元格运行后给出性能分析输出,如下所示。
当某个操作回退到使用 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 上执行所花费的时间。
从命令行进行性能分析#
要对从命令行运行的脚本进行性能分析,传递 --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))>