GPU を通じて Pandas のパフォーマンスを高速化するもう 1 つのデータ処理ツールです。

GPU を通じて Pandas のパフォーマンスを高速化するもう 1 つのデータ処理ツールです。

NVIDIA の RAPIDS cuDF は、データの読み込み、結合、集約、フィルタリング、その他のデータ処理操作に使用できる Python GPU DataFrame ライブラリです。 cuDF は、Apache Arrow 列ストレージを備えた非常に効率的な C++/CUDA データフレーム ライブラリである libcudf に基づいており、GPU 並列処理と高帯域幅のメモリ速度を最大限に活用するために、低レベルの計算最適化に NVIDIA CUDA を利用する GPU アクセラレーション Pandas API を提供します。下の図の通りです。

同時に、cuDF には、GPU 上で Pandas コードを実行でき、Pandas に似た API をサポートし、必要に応じて CPU 上の Pandas に自動的に切り替えて他の操作を実行できる「コード変更ゼロ」の Pandas アクセラレータ (cudf.pandas) が含まれています。

つまり、cuDF の良い使用例は並列処理を置き換えることです。Pandas の処理が遅い場合は、cuDF に切り替えて、面倒な並列処理を記述する必要がなくなります。

以下は、cuDF を使用して Pandas API データ処理操作を高速化するサンプル コードです。

 %load_ext cudf.pandas # 启用Pandas API的GPU加速功能import pandas as pd """在GPU上对列进行数学运算、分组计算以及滚动求和操作,利用GPU加速""" df = pd.read_csv("/path/to/file") df["col_a"] = df["col_b"] * 100 df.groupby("col_a").mean() df.rolling(window=3).sum() """这是一个cuDF不支持的操作,会自动切换到CPU执行""" df.apply(set, axis=1)

次に、cuDF の使用方法を説明する例として、Python 3.10 と Nvidia T4 GPU を使用してコード全体を実行します。

環境の準備

  • Cuda 11.2 以上
  • Nvidia ドライバー 450.80.02+
  • Pascal アーキテクチャ以上 (計算能力 >= 6.0)

設定を確認する

まず、NVIDIA GPU を使用していることを確認する必要があります。

 !nvidia-smi

cuDFライブラリをインストールする

!pip install cudf-cu11 --extra-index-url=https://pypi.nvidia.com

ライブラリのインポート

import cudf cudf.__version__

データセットをダウンロードする

!wget https://data.rapids.ai/datasets/nyc_parking/nyc_parking_violations_2022.parquet

データ分析には標準のPandasライブラリを使用する

import pandas as pd # 读取指定的5列数据df = pd.read_parquet( "nyc_parking_violations_2022.parquet", columns=["Registration State", "Violation Description", "Vehicle Body Type", "Issue Date", "Summons Number"] ) # 查看随机抽样的10行数据,并将结果显示出来df.sample(10)

コード ブロックに実行時間の計算を追加します。

 %%time #用于计算下面的代码块的执行时间# 读取指定的5列数据df = pd.read_parquet( "nyc_parking_violations_2022.parquet", columns=["Registration State", "Violation Description", "Vehicle Body Type", "Issue Date", "Summons Number"] ) """对"Registration State"和"Violation Description"这两列进行计数,并按照"Registration State"分组,选择每个分组中出现次数最多的"Violation Description",最后,对结果进行排序并重置索引""" (df[["Registration State", "Violation Description"]] .value_counts() .groupby("Registration State") .head(1) .sort_index() .reset_index() )

 %%time #计算下面的代码块的执行时间"""按照"Vehicle Body Type"进行分组,并使用agg方法对"Summons Number"进行计数,然后将计数结果重命名为"Count",最后,按照计数结果降序排序。 """ (df .groupby(["Vehicle Body Type"]) .agg({"Summons Number": "count"}) .rename(columns={"Summons Number": "Count"}) .sort_values(["Count"], ascending=False) )

cudf.pandas ライブラリを使用したデータ分析

次に、cudf.pandas 拡張機能を使用して以前の Pandas コードを再実行します。通常、モジュールをインポートする前に、ノートブックに cudf.pandas 拡張機能を読み込む必要があります。したがって、同様の操作をシミュレートするには、カーネルを再起動することをお勧めします。

 get_ipython().kernel.do_shutdown(restart=True) %load_ext cudf.pandas %%time import pandas as pd df = pd.read_parquet( "nyc_parking_violations_2022.parquet", columns=["Registration State", "Violation Description", "Vehicle Body Type", "Issue Date", "Summons Number"] ) (df[["Registration State", "Violation Description"]] .value_counts() .groupby("Registration State") .head(1) .sort_index() .reset_index() )

コードブロックの実行時間からわかるように、同じ操作の場合、cudf.pandas の計算速度が大幅に高速です。

 %%time (df .groupby(["Vehicle Body Type"]) .agg({"Summons Number": "count"}) .rename(columns={"Summons Number": "Count"}) .sort_values(["Count"], ascending=False) )

パフォーマンス分析

パフォーマンス分析は、プログラム実行の効率を評価するために使用される方法です。コード実行時間、リソース使用率、パフォーマンスのボトルネックなどの側面を分析することで、開発者がプロ​​グラムのパフォーマンスを理解し、最適化するのに役立ちます。 cudf.pandas は、GPU アクセラレーション コンピューティングをより有効に活用できるように、コードのどの部分が GPU で実行され、どの部分が CPU で実行されるかを判断するのに役立つパフォーマンス分析ツールも提供します。

注: Google Colab で実行している場合、パフォーマンス分析ツールを初めて実行すると 10 秒以上かかることがあります。これは、Colab のデバッガーがパフォーマンス分析のために組み込みの Python 関数 sys.settrace と対話する必要があるためです。セルを再度実行すると、この問題を解決できます。

次のコードでは、%%cudf.pandas.profile コマンドを使用してコードを cudf.pandas パフォーマンス分析ツールに送信し、GPU でのコード実行を分析して、パフォーマンスのボトルネックと最適化スペースを特定します。

 %%cudf.pandas.profile #创建DataFrame small_df small_df = pd.DataFrame({'a': [0, 1, 2], 'b': ["x", "y", "z"]}) #重复拼接small_df = pd.concat([small_df, small_df]) axis = 0 #对small_df进行最小值计算,并在循环中改变计算的轴向for i in range(0, 2): small_df.min(axis=axis) axis = 1 #对small_df按照"a"列进行分组,并统计"b"列的计数counts = small_df.groupby("a").b.count()

<<:  Xing Bo 氏のチームの LLM360 は、大規模なモデルを真に透明化する総合的なオープンソース プロジェクトです。

>>: 

ブログ    

推薦する

アルゴリズムモデルの自動ハイパーパラメータ最適化手法

ハイパーパラメータとは何ですか?学習モデルには、一般的に 2 種類のパラメータがあります。1 つはデ...

AI推論の進化

AI推論市場はここ3、4年で劇的に変化しました。以前は、エッジ AI は存在すらせず、推論機能のほと...

2021年のAI展望

人工知能は進歩し続け、企業の運営方法や私たち自身の日常の経験を変えています。実際、AI はほぼすべて...

顔認証決済は時代遅れですか?アマゾンはわずか0.3秒で手動支払いをテストした

北京時間9月4日の朝のニュース、ニューヨークポストによると、アマゾンのエンジニアは店内での買い物の精...

...

IDC: 生成型 AI への支出は今後 5 年間で年間 73% 増加し、2027 年には 1,430 億ドルに達する

IDCによると、世界の企業は2023年に160億ドル(ITホーム注:現在は約1169.6億人民元)を...

中国が米国を追い落とすのに40年かかり、特許申請は20年間で200倍に増加した。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

無人運転車の現状はどうなっているのでしょうか?

私たちはここ数年、自動運転車について話し合い、議論してきました。しかし、道路上では見かけません。これ...

今後の企業イノベーションを牽引する10の優れたテクノロジー

エンタープライズ テクノロジーの将来は、業界を変えるほどの大きな革新をもたらすでしょう。 5G から...

...

2021年、AIはどんな未来を迎えるのでしょうか?

人工知能は新しい時代の「電気」であると主張する人もいます。市場調査会社IDCのデータによると、AIハ...

生成AIはスマートホームの触媒となる

ラスベガスで開催される2024年コンシューマー・エレクトロニクス・ショーが終わりに近づく中、LGやサ...

医療用人工知能の分野は新たな状況を迎え、テクノロジー大手は積極的に導入を進めている。

報告書によると、医療における人工知能の主な応用分野の一つである医療ロボットの市場規模は2019年に4...

柯潔はなぜ「負けてカッとなった」と言ったのか!人間対機械の第一ラウンドを説明する8つの質問

4時間以上の対局の末、柯潔はAlphaGoに0.25ポイント差で負けた。対局後、アルファ碁の指導に参...