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 は、大規模なモデルを真に透明化する総合的なオープンソース プロジェクトです。

>>: 

推薦する

AIとIoTを活用したスマートサプライチェーン

デジタル時代では、サプライチェーンのインテリジェンスのレベルが企業の生産効率とパーソナライズされたサ...

2020年にはAI技術はさらに環境に優しくなる

人工知能(AI)技術の環境への影響は最近、幅広い注目を集めていますが、これは今後10年間でAIの中心...

ディープラーニングにおける正規化の概要(Python コード付き)

編集者注: 日々の仕事や研究において、データ サイエンティストが遭遇する最も一般的な問題の 1 つは...

教育業界における自動問題解決と適応学習AIの応用

[51CTO.comより引用] 近年、人工知能が大流行し、多くの大企業、中堅企業、中小企業が動き始め...

モデルの過剰適合を防ぐにはどうすればよいですか?この記事では6つの重要な方法を紹介します

バフェット氏は「正確に間違っているよりも、おおよそ正しい方が良い」と述べています。機械学習では、過剰...

...

ソフトウェアとハ​​ードウェアを組み合わせたCDS Shouyun AIクラウドサービスの技術実践

人工知能は新たな変化を先導しています。近年、人工知能はテクノロジー業界から始まり、急速に生活の各分野...

...

...

...

ディープラーニング: オートエンコーダの基礎と種類

ディープラーニングが私たちの社会に大きな影響を与えようとしていることは明らかです。 Mobibit ...

...

...

シリコンチップ上に15万量子ビット:単一スピンの初の光学検出がNature誌に掲載

量子コンピュータは、従来のコンピュータでは解決に数十億年かかる問題を理論的に解決できますが、十分な量...

USTCのニューラルネットワークとエンドツーエンドのトレーニングフレームワークは、教育環境が学生の能力に与える影響を調査する

[[424271]]中国科学技術大学の研究者らは、教育コンテキスト認識型認知診断フレームワークを提案...