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

>>: 

ブログ    
ブログ    
ブログ    

推薦する

コロナウイルスを分類する機械学習はわずか数分で完了

物理学者協会のウェブサイトが28日に伝えたところによると、カナダのコンピューター科学者と生物学者は、...

...

普遍近似定理を理解しなければ、ニューラルネットワークを理解することはできない

ニューラルネットワークの威力を示す証拠文字通り、普遍近似定理はニューラル ネットワークがどのように機...

顔認識技術が明らかに、未来はもうすぐ「手の届くところ」に!

[51CTO.com からのオリジナル記事]昨日の記事「顔認識の威力はどれほどか? AIFR 技術...

人工知能と機械学習の違いを本当に理解していますか?

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

...

...

...

GNNの実装はもはや難しくありません。この記事では、効率的なGNNとスケーラブルなグラフ表現学習の最新の進歩についてまとめています。

グラフ ニューラル ネットワークは、現実世界に適用する場合、メモリ制限、ハードウェア制限、信頼性制限...

AI、ブロックチェーン、ロボット:テクノロジーは仕事の未来をどのように変えるのでしょうか?

編集者注:人工知能、ブロックチェーン、ロボットなどの破壊的な新技術が継続的に発展する中、人々はそれら...

トマシュ・トゥングズ: AI 組織が直面する 4 つの戦略的課題

編集者注: Tomasz Tunguz 氏は RedPoint のパートナーであり、スタートアップが...

リアルタイムで「顔」をぼかす!実践的なチュートリアル

みなさんこんにちは。今日は実践的なチュートリアルを皆さんと共有したいと思います。いつものように、まず...

転移学習により、ディープラーニングは難しくなくなりました...

それほど遠くない過去には、データ サイエンス チームがディープラーニングを効果的に活用するには、いく...

GitHubオープンソース130+スター:PPYOLOシリーズをベースにターゲット検出アルゴリズムを再現する方法をHand in handで教える

物体検出は、コンピューター ビジョンの分野における基本的なタスクです。適切な Model Zoo な...

IBM、次世代AI開発をメインフレームに移行するための更新されたツールスイートをリリース

IBMは木曜日、メインフレーム開発者向けに最近発表した生成型AIコーディング機能をベースに、古いデー...