Closed5
cuDF が Google Colab に統合されたので試す

前提知識
Google Colab とは
- Google が提供するクラウドのノートブックの実行環境
- 無料で GPU が使えたりする
cuDF とは
- NVIDIA RAPIDSが提供するデータフレーム処理用のライブラリ
- GPU により Pandas と比較して高速に処理を実行できる

試してみる
GPU の有効化
Google Colab でランタイム > ランタイムのタイプを変更 > ハードウェアアクセラレータから GPU のランタイムに接続
cuDF.pandas のロード
以下をノートブックで実行する
%load_ext cudf.pandas
pandas の実行
あとは普段通りに
import pandas as pd
をして、pandas の処理を書くだけ

処理時間の比較
せっかくなので処理時間を比較してみる
以下のそこそこでかいテーブル同士の結合にかかる時間を比較する
import pandas as pd
import numpy as np
# データフレームのサイズ
n_rows = 10**5 # 10万行
n_cols = 10 # 10列
# ランダムなデータを持つデータフレームを生成
df1 = pd.DataFrame(np.random.rand(n_rows, n_cols), columns=[f'col{i}' for i in range(n_cols)])
df2 = pd.DataFrame(np.random.rand(n_rows, n_cols), columns=[f'col{i}' for i in range(n_cols)])
df1['key'] = np.random.randint(0, 1000, size=n_rows)
df2['key'] = np.random.randint(0, 1000, size=n_rows)
pandas
2.23 s ± 153 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
cuDF
91.6 ms ± 11.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
20倍程度速くなった

感想
- めちゃくちゃ簡単
-
%load_ext cudf.pandas
を加えるだけで pandas のコードは変える必要ないので、既存のコードを高速に動かしたいときにかなり便利そう
このスクラップは2024/05/15にクローズされました