kaggle

XGBoostをGPUで計算するとめちゃくちゃ早かった話

先日新規PCを購入しまして、無事GCP課金生活が終了しました。

新規PCはGPUが搭載されいてるので早速環境設定しXGBoostを回してみました。GPU周りの設定は経験も少ないので後々のために記録しておきます。

動作環境

GPUとドライバーの種類は下記の通りです。

GPU:GeForce RTX2080Ti 11GB

Nvidia driver version:430.50

ドライバーは昔GCPで設定した時に残していた記事を参考にダウンロード。

GCPで(ubuntu上で)pytorchを使うまでに色々大変だったので記録しておく今回はpytorchをubuntu(16.04)で使用するのに行ったことに関して備忘録として残しておきます。 なお細かな技術的なこ...

上記の記事ではドライバーの種類を調べた後レポジトリからinstallしていましたが、今回は何故かインストールできなかったのでNvidiaのサイトから.runファイルをわかりやすい位置にダウンロードして下記の手順を実施後インストールしました。

ドライバーをインストールしようとすると英語で色々聞かれるので質問文を調べていくと下記のように選択後、再起動をしたら動作が確認できました。

The distribution-provided pre-install script failed!

→Continue Installation

Would you like to register the kernel module sources with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later.

→YES

Install NVIDIA’s 32-bit Compatibility libraries?

→YES

An incomplete installation of libglvnd was found. Do you want to install a full copy of libglvnd? This will overwrite any existing libglvnd libraries.

→install and overwrite

XGBoostでの計算速度比較

IEEEコンペのデータ・セットを使用しました。(行、列)=(590540, 241)

GPU⇔CPUの切り替えは下記のようにパラメータをいじるだけでとても簡単です。

GPU使用時:47.19秒

CPU使用時:532.69秒

ということでGPUを使うことで計算時間が10分の1になりました。(感動)

何故か結果も変わっていますが、kaggleのディスカッションでもCPU→GPUにすると精度が上がったぞ!という報告もあったので微妙にアルゴリズムが変わっているのかもしれません。GPUの方が結果が良いというのはたまたまだと思いますが…。

めちゃくちゃ早くなりましたが、パラメーターでtree_method=’gpu_hist’ と設定していたため、これはLightGBMと同じように特徴量の値をbinningする高速化処理を使用していることも関係しています。

全ての分岐点を選択する場合はtree_method=”gpu_exact”で指定可能で結果は下記の通り149.47秒ということでやはり遅くなってしまいました。

結果もexactなので過学習が激しくなってしまったように思われます。

いずれにしてもGPUを使う場合3倍程計算速度が変わり、試行回数に大きく影響すると思われるのでやらない手はないですね!