##はじめに
以前の記事でAMD製GPUを搭載した自作PCのセットアップを行いました。
今回はそのPCでKaggleのコンペティション『Avito Demand Prediction Challenge』に参加するまでに行ったことを「準備編」としてまとめたいと思います。AMD製GPUでKaggleに挑戦してみたい方に参考にしていただければ幸いです。
大まかな流れは次の通りです。
- Anacondaをインストールする
- LightGBMをインストールする
- グラフ描画ライブラリをインストールする(任意)
- tmuxをインストールする
- Kaggleを学ぶ
- コンペティションにチャレンジする
##環境
Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz 16GB
Radeon RX Vega 56 Air Boost 8GB
Ubuntu 16.04 LTS
##Anacondaをインストールする
前回の記事ではPythonのライブラリを個別にインストールしましたが、今回は様々なライブラリをまとめてインストールできるAnacondaというディストリビューションを使いたいと思います。詳細はGithubを参考にしてください。
まずはじめにpyenvをインストールします。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
次にパスを通します。私はzsh
を使っているので~/.zprofile
にパスを通しますが、bash
の方は下記コマンドを~/.bash_profile
に変更して実行してください。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zprofile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zprofile
echo 'eval "$(pyenv init -)"' >> ~/.zprofile
exec $SHELL -l
次にAnacondaをインストールします。
pyenv install --list | grep anaconda
下記のようにインストール可能なバージョンの一覧が表示されます。
anaconda-1.4.0
anaconda-1.5.0
anaconda-1.5.1
.
.
.
anaconda3-5.1.0
anaconda3-5.2.0
最も下に表示されているのが最新のバージョンなので、それを指定してインストールします。
ここではanaconda3-5.2.0
です。
pyenv install anaconda3-5.2.0
しばらく時間がかかりますが、完了したら下記のコマンドを順番に入力して設定を反映させます。
pyenv rehash
pyenv global anaconda3-5.2.0
python --version
このように表示されればインストール完了です。
Python 3.6.5 :: Anaconda, Inc.
##LightGBMをインストールする
LightGBMとはMicrosoftが開発する勾配ブースティング(Gradient Boosting)ライブラリです。勾配ブースティングとはコンペティションでしばしば優勝するほど強力な機械学習モデルで、そのモデルをとても高速に簡単に計算できるようにしたものがLightGBMです。CPUおよびGPUで使うことができ、NVIDIA+CUDA環境ではもちろん、AMD+ROCm(OpenCL)にも対応しています。
インストールに関しては公式GitHubから下記3つのドキュメントを参考にします。
sudo apt update
# AMD GPU package
sudo apt install -y ocl-icd-libopencl1 ocl-icd-opencl-dev
sudo apt install --no-install-recommends git cmake build-essential libboost-dev libboost-system-dev libboost-filesystem-dev
cd /tmp
git clone --recursive https://github.com/Microsoft/LightGBM
cd LightGBM
mkdir build ; cd build
cmake -DUSE_GPU=1 ..
make -j$(nproc)
cd ..
次にPythonで使えるようにします。
pip install lightgbm --install-option=--gpu
しばらく時間がかかると思いますがSuccessfully installed lightgbm-2.1.1
のように表示されればインストール完了です。
##グラフ描画ライブラリをインストールする(任意)
探索的データ解析(EDA)を行う際に便利なグラフ描画ライブラリをインストールしておきます。執筆時点では今回私が使った3つのライブラリを記載しますが、今後、適宜追加していきたいと思います。
ベン図を描画するmatplotlib-venn
pip install matplotlib-venn
動的なグラフを描画できるPlotly
pip install plotly
プロファイリングが簡単にできるpandas-profiling
pip install pandas-profiling
##tmuxをインストールする
tmuxとは1つのターミナルから複数のターミナルを管理するツールです。
また、tmuxはターミナルを閉じても裏側で作業が継続しているので、機械学習モデルを訓練しているときに誤ってターミナルを閉じてしまうといったアクシデントにも対処できます。tmuxの詳しい使い方はドットインストールの『tmux入門』という講座がわかりやすいので、そちらに委ねます。
ここではtmuxのインストール手順を記載します。こちらの記事を参考にしました。
sudo apt update
sudo apt install -y automake build-essential pkg-config libevent-dev libncurses5-dev
git clone https://github.com/tmux/tmux.git /tmp/tmux
cd /tmp/tmux
sh autogen.sh
./configure && make
sudo make install
cd
rm -fr /tmp/tmux
インストールが完了したので、次はtmuxのセッションを作ります。今回はAvito
という名前にしましたが、お好きな名前で構いません。
tmux new -s Avito
以下のコマンドで作成したセッションの一覧を確認できます。
tmux ls
作成したセッションから出る(デタッチ)はCtrl+b
と入力してからd
と打ちます。再度セッションに入る(アタッチ)場合は次のように入力します。
tmux a -t Avito
##Kaggleを学ぶ
私がKaggleに参加するにあたり行ったことは次の3つです。ここからは私個人の体験談を書きたいと思います。よかったら参考にしてください。
- 本を2冊写経する
- Learn Machine Learning series を読む
- 練習用コンペティションに参加する
##1. 本を2冊写経する
私はまず機械学習の基礎を学ぶためにオライリーが出版している次の2冊の本を使いました。1冊目で大枠と基礎をつかみ、2冊目で実践的な技術を学びました。どちらもとてもわかりやすく内容も網羅的なのでおすすめです。Amazonへのリンクを載せておきますが、アフィリエイトではないのでご安心ください。
##2. Learn Machine Learning series を読む
次にKaggleの大まかな流れを知るために先人たちの知恵や技術が詰まったKernelを参考にしました。『Learn Machine Learning series』というKernelではデータサイエンティストのDan BeckerさんがKaggleに必要な基本的なことをまとめてくれています。これを読めばおおよそのKaggleのイメージがつかめると思います。
##3. 練習用コンペティションに参加する
Kaggleにはいくつか練習用のコンペティションが用意されています。これらは常時開催中なのでいつでも参加できます。『Kaggleの練習問題(Regression)を解いてKagglerになる』という記事はとてもまとまっていてわかりやすかったので参考にさせていただきました。本番のコンペティションに参加する前にひとつかふたつほど練習してみるのがおすすめです。
##コンペティションにチャレンジする
ここまでである程度の流れがわかったので、さっそく本番のコンペティション『Avito Demand Prediction Challenge』に参加してみました。しかしこの範囲の内容は長くなりそうなので、ざっくりとした流れの列挙にとどめて詳しくは次回「実践編」という形で続きを書きたいと思います。
- 特徴量を観察する
- ターゲット値を観察する
- 外れ値を除去する
- 欠損値を処理する
- 特徴量をつくる
- モデルを訓練する
- 提出用CSVをつくる
##最後に
今回はAMD製GPUでKaggleに参加する際に必要なライブラリのインストールや私の体験談をまとめました。本番のコンペティションで行った探索的データ解析(EDA)や特徴量エンジニアリング(Feature Engineering)といった実践的な内容は多少長くなりそうなので、改めて「実践編」として記事にしたいと思います。
最後まで読んでいただき、ありがとうございました。