Kaggle meetup 201702042. 自己紹介
twitter ID : @ohnabe
Kaggle 歴 : 3年くらい (not master 普通の人)
仕事:通信キャリアで Wearable Computing の研究 、異動
により研究員から分析系雑用係へ転身し、メモ帳で SAS
のコードを書く業務を経て、現在は 某 Web 系企業で、
データ分析のエンジニア。
業務では、主に SQL/Python/R などを使用
3. 如何にして睡眠時間を確保するか
Kaggler の夜は長い
でも、仕事もあるし早く寝たい
早く寝るには
分身の術を覚える:難易度が高い上に、自分の分身を増やしたところで、効
率が劇的に向上するか疑問。修行の時間が無駄になる可能性もある
無駄な時間を減らす
処理待ちの間に Twitter の TL を見て、復帰に時間が掛かる
出来るだけ待ち時間がないように、Kaggle,日常生活のタスクを並列化する
寝てる間に計算機に頑張ってもらう → どっかにエラーがあるんじゃないかという不
安で安眠できない(エラーはなくても結果が気になって安眠できない)
TL を見る行為はやめれないので、少なくとも TL を見る時間が少なくなるよう
に、処理が早く終わるように頑張る → 並列処理やってみよう!
4. どの部分を並列処理するか
1. raw データを加工する(data frame にする前の処理)
たまに、データセットが大きいコンペが存在し、直接 data frame
として読み込めず、何らかの前処理が必要な時がある(Web ペー
ジの html ファイルの中から有害な広告サイトが含まれてるページ
かどうかを判別するなど)
2. data frame にした後、学習器に投入する前の処理
3. 学習器で学習、推定する処理
Xgboost を始めとし、並列化できるものはほぼオプションで並列
処理できるので、頑張るところがない。
今日は主に 1 の話。2 は。。。
5. 先に 2 の話
Python なら pandas で作成した data frame に対して、
dask を利用して並列処理
Dask については、@sinhrks さんの下記のページをご参照ください
Python Dask で 並列 DataFrame 処理
http://sinhrks.hatenablog.com/entry/2015/09/24/222735
R なら parallel パッケージ?
こちらについては、福島 真太朗さんの Rによるハイパフォーマンス
コンピューティングをご参照ください
https://www.amazon.co.jp/dp/toc/4883379353/ref=dp_toc?_encoding
=UTF8&n=465392
6. 1 の話
1 台の PC にある CPU を複数働かせる環境を想定
Python でお気軽に頑張る話です、本気の高速化は、C++
などを利用しましょう!
大量のファイル(数) を並列処理したい
分散処理のフレームワークを使う
Hadoop, Spark などの疑似分散環境で実行
R, Python からそれぞれコードが書ける
それぞれ、Docker があるのでそれを利用
docker pull !
もうちょっと手軽に
8. やり方その1
Multiprocessing モジュールを利用
from multiprocessing import Pool
Import os
def exec_sample(target_f):
with open(target_f, "rb") as f:
…....
if __name__ == '__main__':
p= Pool(4) #同時に立ち上げるプロセス数(頑張って並列してくれる数)を指定
%%time
p.map(write_power, os.listdir(‘ファイルパス'))
9. やり方その2
iparallel を利用
Ipython で並列分散処理。
Jupyter notebook 上で、並列分散処理のクラスタを作れた
りする、一台のローカル環境だと疑似分散環境
$ pip install ipyparallel
$ jupyter notebook --generate-config jupyter のコンフィグファイル作成
コンフィグファイルに、下記を追加
c.NotebookApp.server_extensions.append('ipyparallel.nbextension')
$ jupyter notebook 起動して、Ipython Clusters をポチる
11. その他
dask は、data frame 以外にも array の計算(sum など)について
も、並列処理が可能。
詳細は、@sinhrks のさん下記を参照ください
Python Dask.Array で 並列 / Out-Of-Core 処理
http://sinhrks.hatenablog.com/entry/2015/12/13/215858
joblib でも並列処理可能
dask.distributed では、ipyparallel と同様にクラスタを作って、並
列分散処理ができる
何も考えずに、data frame のデータを勝手に並列処理してくれ
る世界が早く来て欲しい。
joblib.Parallel(n_jobs = 4)(joblib.delayed(exec_sample)(i) for i in range(10))