ギークなエンジニアを目指す男

機械学習系の知識を蓄えようとするブログ

Dockerを使って機械学習実行環境(勾配ブースティング、ニューラルネット含む)を30分で構築する - python, Mecab, LightGBM, xgboost, TensorFlow, keras, Pytorch, etc... -

f:id:taxa_program:20190407114851p:plain

こんにちは。takapy(@takapy0210)です。

今日はDockerで機械学習の環境を作成したのでそれの備忘です。

はじめに

機械学習に限らず、PCを使って何かしら(プログラミングなど)を学びたいと思った時に、最初に躓きやすいのが環境構築です。

環境構築で1日潰れてしまった・・・というのはまだマシな方で、環境構築ができなくて勉強そのもの自体を諦めてしまったという話もよく耳にします。

本記事は機械学習を勉強し始めたい方に対して、環境構築の手間を最小限にとどめ、勉強に必要なエネルギーを必要な部分にぶちこめるようにすることを目的としています。
(Dockerについての詳細はリンクを掲載させていただくことで割愛しております)

できること

下記ライブラリを使用できる機械学習環境が、数行のコマンドを実行するだけで構築できます!

pipでインストールできないライブラリ達も結構あり、ローカルで環境構築しようとすると結構大変なのですが、Dockerを使うことでそんな煩わしさから解放されます。とても簡単。Dockerすごい!

ライブラリ 説明
Python 3.6 Python3.6実行環境
TensorFlow ニューラルネットワークライブラリ
keras TensorFlowやTheanoで実行できるニューラルネットワークライブラリ
Pytorch ニューラルネットワークライブラリ
LightGBM Gradient Boosting 機械学習ライブラリ
xgboost Gradient Boosting 機械学習ライブラリ
Catboost Gradient Boosting 機械学習ライブラリ
scikit-learn 機械学習ライブラリ
jupyter 対話型Python実行環境
scipy 科学計算用ライブラリ
simpy 離散シミュレーションライブラリ
matplotlib グラフ描画ライブラリ
japanize-matplotlib matplotlibの日本語対応ライブラリ
numpy 数値計算ライブラリ(ベクトル/行列計算など)
pandas データ解析ライブラリ
plotly オシャレなグラフ描画ライブラリ
seaborn オシャレなグラフ描画ライブラリ
sympy 符号数学ライブラリ
mecab-python3 形態素解析エンジン(mecab-ipadic-neologd対応済)
gensim トピックモデリング用ライブラリ
nltk 自然言語処理・テキストマイニングライブラリ
WordCloud テキスト可視化用ライブラリ
librosa 音声信号処理ライブラリ
Pillow 画像処理ライブラリ
cv 画像処理ライブラリ
h5py HDF5 フォーマットファイル
BeautifulSoup Webスクレイピングライブラリ

などなど・・・詳しくは後述しているDockerfileをご参照ください。

Dockerって何

下記が詳しいです。

qiita.com

qiita.com

qiita.com

Dockerのインストール

googleで検索していただけば、有識者の記事が見つかると思いますので割愛させていただきます。

または下記を参照ください。(下記記事はMacでのインストール手順を記載しております)

www.takapy.work

環境構築方法

Dockerのインストール&起動が終了していることを前提としています。

実質下記2ステップ(2行のコマンドのみ)のみで環境構築が終了します。(所要時間30分程度)

  • Dockerイメージのpull
$ docker pull takapy0210/machine-learning-python3
  • コンテナ起動
$ docker run -it --rm -v $(pwd):/notebooks -p 8888:8888 takapy0210/machine-learning-python3

少し詳しくみていきます。

Dockerイメージのpull

下記コマンドでdockerイメージをpullし、イメージをローカルPCに持ってきてください。

$ docker pull takapy0210/machine-learning-python3

pullできたか確認してみます。

$ docker images

REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
takapy0210/machine-learning-python3   latest              699e8fb72271        About an hour ago   6.37GB

上記のように表示されていれば、無事にpullできています。

コンテナの起動

下記コマンドでコンテナを起動します。

-v $(pwd):/notebooksの部分は、ローカルディレクトリ:dockerディレクトリの対応で、指定したローカルディレクトリをdocker上にマウントすることができるオプションです。$(pwd)と指定することで、docker runコマンドを実行したローカルのディレクトリをマウントできます。

$ docker run -it --rm -v $(pwd):/notebooks -p 8888:8888 takapy0210/machine-learning-python3

そうすると、下記のようなメッセージが表示されます。

[I 02:43:35.525 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 02:43:36.530 NotebookApp] Serving notebooks from local directory: /notebooks
[I 02:43:36.530 NotebookApp] The Jupyter Notebook is running at:
[I 02:43:36.530 NotebookApp] http://(ef5758812c93 or 127.0.0.1):8888/?token=28c6e1fa668e5bd1f9b2ef4463821bc28b14fXXe860f0b60

ブラウザでhttp://localhost:8888にアクセスし、表示されるページに上記で出力されるtokenを入力してLog inしてください。
(上記の例だと28c6e1fa668e5bd1f9b2ef4463821bc28b14fXXe860f0b60の部分)

f:id:taxa_program:20190407131529p:plain

するとjupyter notebookが起動します。

f:id:taxa_program:20190407131648p:plain

jupyter notebookを起動せずに、シェルへログインした状態でコンテナを起動することもできます。

$ docker run -it --rm takapy0210/machine-learning-python3 bash

以上で冒頭で述べたライブラリ達が使用できる環境を構築することができました!!!簡単!

補足

mecab-ipadic-neologdの使用方法

import MeCab

sentence = "8月3日に放送された「中居正広の金曜日のスマイルたちへ」(TBS系)で、1日たった5分でぽっこりおなかを解消するというダイエット方法を紹介。キンタロー。にも密着。"

# 標準
mecab = MeCab.Tagger('')
print(mecab.parse(sentence))

# mecab-ipadic-neologd使用
mecab = MeCab.Tagger ('-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd')
print(mecab.parse(sentence))

出力結果

# 標準
8月    名詞,副詞可能,*,*,*,*,8月,ハチガツ,ハチガツ,,
3   名詞,数,*,*,*,*,3,サン,サン,,
日 名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ,,
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ,,
放送  名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー,,
さ 動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ,,
れ 動詞,接尾,*,*,一段,連用形,れる,レ,レ,,
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ,,
「 記号,括弧開,*,*,*,*,「,「,「,,
中居  名詞,固有名詞,人名,姓,*,*,中居,ナカイ,ナカイ,,
正広  名詞,固有名詞,人名,名,*,*,正広,マサヒロ,マサヒロ,,
の 助詞,連体化,*,*,*,*,の,ノ,ノ,,
金曜日   名詞,副詞可能,*,*,*,*,金曜日,キンヨウビ,キンヨービ,,
の 助詞,連体化,*,*,*,*,の,ノ,ノ,,
スマイル    名詞,一般,*,*,*,*,スマイル,スマイル,スマイル,,
たち  名詞,接尾,一般,*,*,*,たち,タチ,タチ,,
へ 助詞,格助詞,一般,*,*,*,へ,ヘ,エ,,
」 記号,括弧閉,*,*,*,*,」,」,」,,
(   記号,括弧開,*,*,*,*,"(","(","(",,
TBS 名詞,固有名詞,組織,*,*,*,*
系 名詞,接尾,一般,*,*,*,系,ケイ,ケイ,,
)   記号,括弧閉,*,*,*,*,")",")",")",,
で 助詞,格助詞,一般,*,*,*,で,デ,デ,,
、 記号,読点,*,*,*,*,、,、,、,,
1   名詞,数,*,*,*,*,1,イチ,イチ,,
日 名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ,,
たった   副詞,助詞類接続,*,*,*,*,たった,タッタ,タッタ,,
5   名詞,数,*,*,*,*,5,ゴ,ゴ,,
分 名詞,接尾,助数詞,*,*,*,分,フン,フン,,
で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ,,
ぽ 形容詞,接尾,*,*,形容詞・アウオ段,ガル接続,ぽい,ポ,ポ,,
っ 動詞,非自立,*,*,五段・カ行促音便,連用タ接続,く,ッ,ッ,,
こり  動詞,自立,*,*,一段,連用形,こりる,コリ,コリ,こり/懲/懲り,
おなか   名詞,一般,*,*,*,*,おなか,オナカ,オナカ,,
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
解消  名詞,サ変接続,*,*,*,*,解消,カイショウ,カイショー,,
する  動詞,自立,*,*,サ変・スル,基本形,する,スル,スル,,
という   助詞,格助詞,連語,*,*,*,という,トイウ,トユウ,,
ダイエット 名詞,サ変接続,*,*,*,*,ダイエット,ダイエット,ダイエット,,
方法  名詞,一般,*,*,*,*,方法,ホウホウ,ホーホー,,
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
紹介  名詞,サ変接続,*,*,*,*,紹介,ショウカイ,ショーカイ,,
。 記号,句点,*,*,*,*,。,。,。,,
キンタロー 名詞,一般,*,*,*,*,*
。 記号,句点,*,*,*,*,。,。,。,,
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ,,
も 助詞,係助詞,*,*,*,*,も,モ,モ,,
密着  名詞,サ変接続,*,*,*,*,密着,ミッチャク,ミッチャク,,
。 記号,句点,*,*,*,*,。,。,。,,

==========================
# mecab-ipadic-neologd使用
8月3日    名詞,固有名詞,一般,*,*,*,8月3日,ハチガツミッカ,ハチガツミッカ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
放送  名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
さ 動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れ 動詞,接尾,*,*,一段,連用形,れる,レ,レ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
「 記号,括弧開,*,*,*,*,「,「,「
中居正広の金曜日のスマイルたちへ    名詞,固有名詞,一般,*,*,*,中居正広の金曜日のスマイルたちへ,ナカイマサヒロノキンヨウビノスマイルタチヘ,ナカイマサヒロノキンヨービノスマイルタチヘ
」(    記号,一般,*,*,*,*,*
TBS 名詞,固有名詞,一般,*,*,*,TBS,ティービーエス,ティービーエス
系 名詞,接尾,一般,*,*,*,系,ケイ,ケイ
)   記号,一般,*,*,*,*,*
で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
、 記号,読点,*,*,*,*,、,、,、
1日    名詞,固有名詞,一般,*,*,*,1日,ツイタチ,ツイタチ
たった   副詞,助詞類接続,*,*,*,*,たった,タッタ,タッタ
5分    名詞,固有名詞,一般,*,*,*,5分,ゴフン,ゴフン
で 助詞,格助詞,一般,*,*,*,で,デ,デ
ぽっこり    副詞,一般,*,*,*,*,ぽっこり,ポッコリ,ポッコリ
おなか   名詞,一般,*,*,*,*,おなか,オナカ,オナカ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
解消  名詞,サ変接続,*,*,*,*,解消,カイショウ,カイショー
する  動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
という   助詞,格助詞,連語,*,*,*,という,トイウ,トユウ
ダイエット方法   名詞,固有名詞,一般,*,*,*,ダイエット方法,ダイエットホウホウ,ダイエットホウホー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
紹介  名詞,サ変接続,*,*,*,*,紹介,ショウカイ,ショーカイ
。 記号,句点,*,*,*,*,。,。,。
キンタロー。  名詞,固有名詞,一般,*,*,*,キンタロー。,キンタロー,キンタロー
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
も 助詞,係助詞,*,*,*,*,も,モ,モ
密着  名詞,サ変接続,*,*,*,*,密着,ミッチャク,ミッチャク
。 記号,句点,*,*,*,*,。,。,。

中居正広の金曜日のスマイルたちへという比較的新しい単語を識別できていることが分かります。

Dockerfile

GitHubにあげておりますので、適当にcloneするなりカスタマイズするなりしてご利用ください。

github.com

最後に

ステキな機械学習ライフをお過ごしください!!