SlideShare a Scribd company logo
1 of 11
並列処理を頑張って、
睡眠時間を確保する
Kaggle Meetup 20170204
@ohnabe
自己紹介
twitter ID : @ohnabe
Kaggle 歴 : 3年くらい (not master 普通の人)
仕事:通信キャリアで Wearable Computing の研究 、異動
により研究員から分析系雑用係へ転身し、メモ帳で SAS
のコードを書く業務を経て、現在は 某 Web 系企業で、
データ分析のエンジニア。
 業務では、主に SQL/Python/R などを使用
如何にして睡眠時間を確保するか
 Kaggler の夜は長い
 でも、仕事もあるし早く寝たい
 早く寝るには
 分身の術を覚える:難易度が高い上に、自分の分身を増やしたところで、効
率が劇的に向上するか疑問。修行の時間が無駄になる可能性もある
 無駄な時間を減らす
処理待ちの間に Twitter の TL を見て、復帰に時間が掛かる
出来るだけ待ち時間がないように、Kaggle,日常生活のタスクを並列化する
 寝てる間に計算機に頑張ってもらう → どっかにエラーがあるんじゃないかという不
安で安眠できない(エラーはなくても結果が気になって安眠できない)
 TL を見る行為はやめれないので、少なくとも TL を見る時間が少なくなるよう
に、処理が早く終わるように頑張る → 並列処理やってみよう!
どの部分を並列処理するか
1. raw データを加工する(data frame にする前の処理)
 たまに、データセットが大きいコンペが存在し、直接 data frame
として読み込めず、何らかの前処理が必要な時がある(Web ペー
ジの html ファイルの中から有害な広告サイトが含まれてるページ
かどうかを判別するなど)
2. data frame にした後、学習器に投入する前の処理
3. 学習器で学習、推定する処理
 Xgboost を始めとし、並列化できるものはほぼオプションで並列
処理できるので、頑張るところがない。
今日は主に 1 の話。2 は。。。
先に 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
1 の話
 1 台の PC にある CPU を複数働かせる環境を想定
 Python でお気軽に頑張る話です、本気の高速化は、C++
などを利用しましょう!
 大量のファイル(数) を並列処理したい
 分散処理のフレームワークを使う
Hadoop, Spark などの疑似分散環境で実行
R, Python からそれぞれコードが書ける
それぞれ、Docker があるのでそれを利用
docker pull !
もうちょっと手軽に
大量のファイルをこんな感じで処理する
 対象のファイルをリストを1ファイルずつ逐次的に処
理するのではなく、複数のファイルを同時に処理し
て計算時間を短縮。I/Oに時間が掛かるのはあきらめ
る。
def exec_sample(target):
with open(target) as f:
…....
for f_name in [ファイル達]:
exec_sample(f)
pool.map(exec_sample, [ファイル達])
並列処理でよろしくやってくれる
やり方その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(‘ファイルパス'))
やり方その2
 iparallel を利用
 Ipython で並列分散処理。
 Jupyter notebook 上で、並列分散処理のクラスタを作れた
りする、一台のローカル環境だと疑似分散環境
$ pip install ipyparallel
$ jupyter notebook --generate-config jupyter のコンフィグファイル作成
コンフィグファイルに、下記を追加
c.NotebookApp.server_extensions.append('ipyparallel.nbextension')
$ jupyter notebook 起動して、Ipython Clusters をポチる
その2の2
ファイルを 1000 個書く処理を 4 並列で実行して、6s ???
分散処理のためのオーバヘッドが大きいと思われる。。。
その他
 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))

More Related Content

Viewers also liked

Regret Minimization in Multi-objective Submodular Function Maximization
Regret Minimization in Multi-objective Submodular Function MaximizationRegret Minimization in Multi-objective Submodular Function Maximization
Regret Minimization in Multi-objective Submodular Function MaximizationTasuku Soma
 
Pythonで実現する4コマ漫画の分析・評論
Pythonで実現する4コマ漫画の分析・評論Pythonで実現する4コマ漫画の分析・評論
Pythonで実現する4コマ漫画の分析・評論esu ji
 
Chainerを使ったらカノジョができたお話
Chainerを使ったらカノジョができたお話Chainerを使ったらカノジョができたお話
Chainerを使ったらカノジョができたお話Hiroki Yamamoto
 
A Method of Speech Waveform Synthesis based on WaveNet considering Speech Gen...
A Method of Speech Waveform Synthesis based on WaveNet considering Speech Gen...A Method of Speech Waveform Synthesis based on WaveNet considering Speech Gen...
A Method of Speech Waveform Synthesis based on WaveNet considering Speech Gen...Akira Tamamori
 
ヒューマンコンピュテーションのための専門家発見(ステアラボ人工知能シンポジウム2017)
ヒューマンコンピュテーションのための専門家発見(ステアラボ人工知能シンポジウム2017)ヒューマンコンピュテーションのための専門家発見(ステアラボ人工知能シンポジウム2017)
ヒューマンコンピュテーションのための専門家発見(ステアラボ人工知能シンポジウム2017)STAIR Lab, Chiba Institute of Technology
 
Duolingo.pptx
Duolingo.pptxDuolingo.pptx
Duolingo.pptxsyou6162
 
Bayesian Nonparametric Motor-skill Representations for Efficient Learning of ...
Bayesian Nonparametric Motor-skill Representations for Efficient Learning of ...Bayesian Nonparametric Motor-skill Representations for Efficient Learning of ...
Bayesian Nonparametric Motor-skill Representations for Efficient Learning of ...Nishanth Koganti
 
自然言語処理分野の最前線(ステアラボ人工知能シンポジウム2017)
自然言語処理分野の最前線(ステアラボ人工知能シンポジウム2017)自然言語処理分野の最前線(ステアラボ人工知能シンポジウム2017)
自然言語処理分野の最前線(ステアラボ人工知能シンポジウム2017)STAIR Lab, Chiba Institute of Technology
 
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章Shushi Namba
 
fastTextの実装を見てみた
fastTextの実装を見てみたfastTextの実装を見てみた
fastTextの実装を見てみたYoshihiko Shiraki
 
A brief introduction to recent segmentation methods
A brief introduction to recent segmentation methodsA brief introduction to recent segmentation methods
A brief introduction to recent segmentation methodsShunta Saito
 
Dropout Distillation
Dropout DistillationDropout Distillation
Dropout DistillationShotaro Sano
 
20170211クレジットカード認識
20170211クレジットカード認識20170211クレジットカード認識
20170211クレジットカード認識Takuya Minagawa
 
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...Deep Learning JP
 
深層強化学習 Pydata.Okinawa Meetup #22
深層強化学習 Pydata.Okinawa Meetup #22深層強化学習 Pydata.Okinawa Meetup #22
深層強化学習 Pydata.Okinawa Meetup #22Naoto Yoshida
 
Binarized Neural Networks
Binarized Neural NetworksBinarized Neural Networks
Binarized Neural NetworksShotaro Sano
 
Variational AutoEncoder
Variational AutoEncoderVariational AutoEncoder
Variational AutoEncoderKazuki Nitta
 

Viewers also liked (19)

Regret Minimization in Multi-objective Submodular Function Maximization
Regret Minimization in Multi-objective Submodular Function MaximizationRegret Minimization in Multi-objective Submodular Function Maximization
Regret Minimization in Multi-objective Submodular Function Maximization
 
Pythonで実現する4コマ漫画の分析・評論
Pythonで実現する4コマ漫画の分析・評論Pythonで実現する4コマ漫画の分析・評論
Pythonで実現する4コマ漫画の分析・評論
 
Chainerを使ったらカノジョができたお話
Chainerを使ったらカノジョができたお話Chainerを使ったらカノジョができたお話
Chainerを使ったらカノジョができたお話
 
A Method of Speech Waveform Synthesis based on WaveNet considering Speech Gen...
A Method of Speech Waveform Synthesis based on WaveNet considering Speech Gen...A Method of Speech Waveform Synthesis based on WaveNet considering Speech Gen...
A Method of Speech Waveform Synthesis based on WaveNet considering Speech Gen...
 
ヒューマンコンピュテーションのための専門家発見(ステアラボ人工知能シンポジウム2017)
ヒューマンコンピュテーションのための専門家発見(ステアラボ人工知能シンポジウム2017)ヒューマンコンピュテーションのための専門家発見(ステアラボ人工知能シンポジウム2017)
ヒューマンコンピュテーションのための専門家発見(ステアラボ人工知能シンポジウム2017)
 
Duolingo.pptx
Duolingo.pptxDuolingo.pptx
Duolingo.pptx
 
Bayesian Nonparametric Motor-skill Representations for Efficient Learning of ...
Bayesian Nonparametric Motor-skill Representations for Efficient Learning of ...Bayesian Nonparametric Motor-skill Representations for Efficient Learning of ...
Bayesian Nonparametric Motor-skill Representations for Efficient Learning of ...
 
自然言語処理分野の最前線(ステアラボ人工知能シンポジウム2017)
自然言語処理分野の最前線(ステアラボ人工知能シンポジウム2017)自然言語処理分野の最前線(ステアラボ人工知能シンポジウム2017)
自然言語処理分野の最前線(ステアラボ人工知能シンポジウム2017)
 
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
 
fastTextの実装を見てみた
fastTextの実装を見てみたfastTextの実装を見てみた
fastTextの実装を見てみた
 
A brief introduction to recent segmentation methods
A brief introduction to recent segmentation methodsA brief introduction to recent segmentation methods
A brief introduction to recent segmentation methods
 
Dropout Distillation
Dropout DistillationDropout Distillation
Dropout Distillation
 
20170211クレジットカード認識
20170211クレジットカード認識20170211クレジットカード認識
20170211クレジットカード認識
 
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
 
深層強化学習 Pydata.Okinawa Meetup #22
深層強化学習 Pydata.Okinawa Meetup #22深層強化学習 Pydata.Okinawa Meetup #22
深層強化学習 Pydata.Okinawa Meetup #22
 
Binarized Neural Networks
Binarized Neural NetworksBinarized Neural Networks
Binarized Neural Networks
 
Prestoクエリログの保存/分析機能の構築 #yjdsnight
Prestoクエリログの保存/分析機能の構築 #yjdsnightPrestoクエリログの保存/分析機能の構築 #yjdsnight
Prestoクエリログの保存/分析機能の構築 #yjdsnight
 
Presto in Yahoo! JAPAN #yjdsnight
Presto in Yahoo! JAPAN #yjdsnightPresto in Yahoo! JAPAN #yjdsnight
Presto in Yahoo! JAPAN #yjdsnight
 
Variational AutoEncoder
Variational AutoEncoderVariational AutoEncoder
Variational AutoEncoder
 

Kaggle meetup 20170204

  • 2. 自己紹介 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 をポチる
  • 10. その2の2 ファイルを 1000 個書く処理を 4 並列で実行して、6s ??? 分散処理のためのオーバヘッドが大きいと思われる。。。
  • 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))