LoginSignup
0
0

More than 1 year has passed since last update.

SHAP GPUtree explainer をインストールしてみた

Posted at

SHAPの計算に14日かかります、と言われて、それならGPU版を試そうと思ったのですが、資料が少なくビルドに手間取ったのでメモ代わりです。以下では、NVIDIA CUDAがインストール済みで、GPU環境が使用できるものとして記載しています。

SHAP GPUTreeの説明はこちら。ちなみにNVIDA CUDAオンリーです。これを読めば、多分わかる人は判るのでしょうね。
https://shap.readthedocs.io/en/latest/example_notebooks/api_examples/explainers/GPUTree.html

実行環境など(2022/09/28時点での情報)

使用した構成及び環境は以下の通りです。
Windows10
Anaconda Navigator 2.3.0
他の情報は以下の通り。ついでに、nvccが通ることを確認しています。

import sys
import torch
print("Python ==",sys.version)
print("PyTorch ==", torch.__version__)
print("CUDA available", torch.cuda.is_available())
print("CUDA ==", torch.version.cuda)
!nvcc --version

Python == 3.9.12 (main, Apr 4 2022, 05:22:27) [MSC v.1916 64 bit (AMD64)]
PyTorch == 1.11.0
CUDA available True
CUDA == 11.3
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:41:42_Pacific_Daylight_Time_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0

上記SHAPリンクの説明にもありますが、pipやcondaでSHAPをインストールするのではなく、git clone してコンパイルする必要があります。環境に依存すると思いますが、上の環境でしか試しておりませんので、注意してください。

事前準備

envは別に作成するか、shapがインストールされている場合は外した環境を作成しておいたほうが無難です。
注:コンパイルに失敗すると、なぜかAnaconda3が立ち上がらなくなるので、試す場合は、復旧ができるようにバックアップした状態、あるいは別環境を作成してお試しください。

コンパイラのインストール

コンパイラは、vs_BuildTools.exeを使用しましたが、現時点で最新版の2022ではなく、2017か2019版が必要です。コンパイルのログにこっそりエラーで出ていました。以前のバージョンの入手はこちらから。私は2019を使用しました。
https://visualstudio.microsoft.com/ja/vs/older-downloads/
起動すると、おなじみのVisual Studio Installerが現れるので、Visual Studio Toolsの変更ボタンから、表示されるMSVCまたはC++ Build Toolsを選択して、インストールしてください。

コンパイラへのpath設定

インストール後、cl.exeの場所を調べて、システムの詳細設定から、システムの環境変数のpathを通しておきます。例えば、x64のcl.exeの場合は以下のpathにありました。
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x64
path確認は、DOS窓を新規に立ててclが起動すればOKです。
image.png

SHAPのクローン

https://github.com/slundberg/shap
をクローンします。どれでもOKですが、私の場合にはgit入れてなかったので、colabでGoogleドライブにクローンして、そこからローカルにコピーしました。

%cd /content/drive/MyDrive
!git clone https://github.com/slundberg/shap.git

コンパイル

Anacondaから、目的の環境のPowershell promptを起動します。cloneされたフォルダへ移動して、

PS C:\Users\shap>python setup.py install --user

を実行します。コンパイルログで、fatalやerrorの無いことを確認してください。
書き込みの競合エラーが発生した場合は、以下のフォルダを削除して、再度コンパイルを試してみてください。前のバージョンのshapが残っているとエラーになるようで、事前に外すように書かれていましたが、それでも何故か残る場合があるようです。

C:\Users\user\AppData\Roaming\Python\Python39\site-packages\shap-0.41.0-py3.9-win-amd64.egg

動作確認

まず、コンパイルしたPowershellからpythonを起動して、

>>>import sys
>>>import shap

として、特にエラーが無ければ、コンパイルは正常に完了していると思います。問題がある場合は、この時点で、何らかのエラーメッセージが出てきます。
次に、実際のサンプルプログラムでお試しください。ただ、1分程度で実行できるデータ量では、差が出ないようです。恐らくテンソルのメモリコピーあたりで時間をとられているのだと思いますが、場合によってGPU版の方が遅かったりします。
私の場合、3倍強速くなったという感じですね。下図で、上がGPU版、下が通常版です。
image.png

その他

TQDMの表示が出ませんでした。これは、どれくらい進歩しているのか、ハングアップしてるのか、全く分からないので結構不便です。
GPUメモリの使用量は0.1GBで、本当にGPU版かと思うぐらいですが、早くはなっているので、間違いは無いのでしょう。しかし、それでも本来の目的に必要な計算は4日以上かかりそうで、ちょっと微妙ですね。
以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0