18年10月にデータマイニング推進部に中途入社したY.Saと申します。これまでは主にシステムの運用やSQLを使用してシステムテストなどを経験してきました。talks、5~10分程度の短い発表)を行ったり、勉強会に参加しています。2018という勉強会で紹介されていたNVIDIAが開発したRAPIDSというライブラリ群の1つ、cuDFというライブラリについて紹介します。コードを使った実例に入る前にNVIDIAとGPUについてすこし紹介します。Unit)を開発して販売しているアメリカの企業です。GPUは大量の単純な計算を高速に行うことが求められる場面で使われる演算装置で、使い方によっては、GPUはCPUよりも高速に演算できるなど優れた性能を発揮します。機械学習・ディープラーニングなどデータ分析においてこれまでもGPUは使われてきましたが、一部の工程に過ぎませんでした。今回紹介するcuDFは、エンドツーエンドでGPUを使用できるRAPIDSというプラットフォームの中でデータの読み込みを担うライブラリです。NVIDIAはGPUメーカーなので、GPUの仕様場面を増やすことを狙っているのだと思います。2018に参加した際にGPUを使用したプラットフォームとしてRAPIDSが紹介されていました。RAPIDSのサイトはコチラ→https://rapids.ai/RAPIDSの中でデータを読み込んだ後のDataFrameの機能を担うのがcuDFになります。cuDFのGithubはコチラ→https://github.com/rapidsai/cudf環境について環境についてはAWS上にEC2インスタンスを建て、その中にNVIDIADocker2環境を構築し、JupyterLab経由でローカルPCから接続しています。その際AWSのコンソール上のセキュリティグループ設定でJupyterLabを使用するのに必要なポート(8888、8787、8786など)の通信を許可してください。V100を積んだp3.2xlargeを選択しました。デフォルトではインスタンスの申請の制限がかかっているためサポートセンター経由で制限を解除してください。公式の環境構築については以下に記載があります。https://rapids.ai/documentation.htmlcuDFは現在開発中のライブラリになりますので、読者の皆様におかれましては、環境構築手順は公式のページを参照されるのが一番かと思います。それでは実際のコードを見ていきたいと思います。サンプルコードの流れ以下では1.データ読み込みをCPUを使用したPandasとGPUを使用したcuDFで速度の比較を行います。2.XGBoostを用いて訓練データの学習を行います。3.結果考察4.まとめといった構成で紹介します。Kaggleなどで大きなサイズのcsvを探しましたが、手ごろなデータがありませでした。そこでsklearnのmake_classificationを利用してデータセットを生成することにします。巨大なデータセットを作成しているため環境によってはメモリエラーなどスペックが足りない場合があります。1000"""n_samples:行数n_features:カラムの数n_classes:2クラス分類なので2を指定n_clusters_per_classrandom_state:乱数。pd.merge(X,y,left_index=True,right_index=True)分割前後のデータでyの割合が変わらないようにtrain_test_splitを使用して層化サンプリングを行います。SEED)&amp;lt;h1&amp;gt;trainとtestに分割して保存する。44s分割後のサイズを確認します。1001)分割の割合を確認します。float64ほぼ50対50で分割できていることがわかります。次にファイルサイズを確認します。trainとtestが560MBと1.3GB程度のcsvファイルとして生成できていることが確認できます。train.csvPandasとcuDFでそれぞれcsvを読み込んで比較したいと思います。scuDFはcsvを読み込む際、カラム名とデータ型を指定する必要があるため、Pandasのカラムと型を使用します。s大雑把な比較ですがcsv読み込みに関してはPandasよりcuDFを使用した方が遥かに速いことがわかります。PandasのDataFrameを読み込んでXGBoostで学習Pandasのdfを読み込んでXGBoostでtrainのセットを学習してtestセットで評価してみます。冒頭にも書いたのですが、残念ながらRAPIDS版XGBoostはエラーとなってしまったため、通常のXGBoostをインストールして使用しています。先ほどと同様にcuDFのdfを読み込んでXGBoostでtrainのセットを学習してtestセットで評価してみます。通常のXGBoostではcuDFをそのまま読み込めないため、numpyに変換した上で読み込みます。train_cu[['target']]#cuDFはカラムを削除すると大元のDataFrameが変更されるようです。test_cu%%time#numpyに変換してxgboostで学習します。AUCの評価結果が異なることがわかります。同じ変形をしているつもりですが、有効桁数の問題などで、PandasとcuDFでは変換結果が異なるようです。cuDFX_train_cu.as_matrix()[0][0]-0.012074360798521127数値の末尾まで見ていくと数値が異なることがわかります。まとめcuDFの良い点は、GPUを使用しているのでCPUを使用したPandasよりもcsvの読み込みが速いことです。・DataFrameを読み込む際に、型とカラム名を自動的に判定してくれないので、事前に定義する必要があるのは少し面倒だと感じました。・nvidia-dockerにインストールされたrapidsai版のXGBoostが動作しなかったため、一旦アンインストールして、conda経由で通常のXGBoostを再インストールする必要があったこと・現在開発中のようですがrapidsaiのライブラリに教師あり学習のライブラリがないことなどが挙げられます。・現在のスタンダードであるscikit-learn、PandasなどのライブラリとAPI形式を似せる・Anaconda経由ですべて環境構築できるなど、難易度が下がるようになると広く使われるようになると思います。今後に期待を込めて本記事を結びたいと思います。bookでGithubでも公開しております。気になったり、興味が湧いた記事があったら、なんでもコメントしてみてね。コーポレートサイトの問い合わせ欄からでも大丈夫だよ。reserved.1週間IT業界を覗いてみませんか?詳細はこちら。