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’ と設定しているため特徴量の値をbinningする処理で高速化されています。

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

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

いずれにしてもGPUが使える環境なら簡単にできて効果が絶大なのでやらない手はないですね!