DEVGRU

プログラミングと競馬予想について書きます

機械学習環境をAnaconda使わずに作ってみる(Ubuntu 16.04)

前記事で書いたとおり、Anaconda でバシッと色んな物が入って嬉しいんですが、一方でAnacondaを使わずにそれをするにはどの程度の労力がかかるのか、試してみたいと思います。

team-6.hatenablog.jp

team-6.hatenablog.jp

事前設定

  • OS は Ubuntu 16.04 64bit
  • build-essential,gitは導入済み。
  • scikit-lean, Pandas, tensorflow, matplotlib, Jupyter Notebook を使えるようにする。

インストール

TensorFlow, Jupyter Notebook 以外

sudo apt install python3.5 python3-pip python3-sklearn python3-matplotlib python3-pandas

TensorFlow

Installing TensorFlow on Ubuntu  |  TensorFlow の通りに進めます。

sudo apt-get install python3-pip python3-dev python3-virtualenv
virtualenv --system-site-packages -p python3 my-tensorflow
source my-tensorflow/bin/activate
easy_install -U pip
pip3 install --upgrade tensorflow 

MUSTなのはapt-getpip3ですね。

補足

AnacondaもTensorFlowはデフォルトで入ってなくて、conda install tensorflowが必要でした。 なので、TensorFlowに関してはAnaconda と手間はそんなに変わらないかも。

Jupyter Notebook

以下の通りに進めます。

jupyter.org

pip3 install --upgrade pip
pip3 install jupyter

こっちもMUSTは2行目だけですね。

問題?

私がUbuntu 16.04を使ってしまっているせいで、Pythonのバージョンがちょっと古い(3.5)です。 OSアップデートするか、pyenv等のインストーラで3.6.2を入れればいいのですが、 後者は.debパッケージが使えなくなりmatplotlibのリビルドが必要になりそうです(試していない、実はいける? 誰かおしえて)。

Installing — Matplotlib 2.0.2 documentation

また、aptから入れたパッケージのバージョンがちょっと古い(scikit-learnが0.17)です。 これはpipから入れれば問題ないのか…

感想

何も考えずに一発でいろいろ入るAnacondaはやっぱり便利(別記事で書いたトレードオフがあるにせよ)。 怠惰バンザイ。

一方で、試したインストール方法も最適化の余地はあるので、 インストーラみたいなの作っておきたい気もする。


退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

入門 Python 3

入門 Python 3

Anacondaの利用は是か非か?(またはそれでも私がAnacondaを“今“使う理由)

先日の投稿で、少しフィードバックをいただけた(ありがとうございます!)ので、それに対する反応です。

team-6.hatenablog.jp

フィードバックその1

コメント欄より。

引用されていたので反応しておきますと、こういう理由からAnacondaもいまは問題があると思っています。 http://ymotongpoo.hatenablog.com/entry/2017/02/02/182647

一次情報含め非常に詳しく書かれていますが、 要約すると、パッケージングにデフォルトのwheelではなく、独自のcondaを用いているAnacondaはデフォルトに歩み寄って欲しい、というお話です。

これについてはおっしゃるとおりで、wheelでできることをわざわざ別のパッケージシステムを構築してしまっているのはエネルギーの無駄ですね。 wheel一本になれば嬉しい人は多いはず。

フィードバックその2

今Pythonで機械学習・ディープラーニングする環境を作るならpyenv系一択だよね(※個人の感想です) - DEVGRU

Pythonで機械学習っぽいことやってるけどvenvとpipで必要なもの全部動いてるし環境のメンテに手間もかかってない。MacとLinuxで同じようにできてる。Anacondaが必須という前提に同意できないのでそもそも本題に入れない…

2017/08/23 23:08
b.hatena.ne.jp

Anaconda が機械学習に必須、という前提に少し乱暴なものがあるのは事実です。そのあたりはあの記事は雑でしたね。 確かに、numpyやscikit-learn, TensorFlow、Keras、matploblib、Jupyter Notebook があれば機械学習やディープラーニングについて大抵のことはできます。

それでも“私”が“今”Anacondaを使う理由

何も考えずとも必要なものの多くがすぐに使える状態で入ってきてくれるから、でしょうか。怠惰ですね。

パッケージシステムに問題がありますが、でも直近は困りません。

Anacondaじゃなくても機械学習やディープラーニングはできます、でもAnacondaのほうが何もせずともいろいろ入ってくるのでお得です。

特筆するべきはNumba とmatplotlibです。Numbaは@jitつけた関数を高速に実行してくれます。

github.com

依存ライブラリがあるためか、

The easiest way to install numba and get updates is by using the Anaconda Distribution: https://www.continuum.io/downloads

と、公式がAnaconda使うと楽だよ、と言ってしまっており、実際その下を見ると少々面倒なインストール手順となっています。

パフォーマンスが必要な場面でスッと@jitが使えるのは嬉しいです。

また、matplotlibも事情は同じのようです。

Installing — Matplotlib 2.0.2 documentation

こちらはOSのパッケージツールでもインストールはできますが、Anacondaはそれすら不要です。

いちいちインストールしなくてもいいなら、その浮いた手間で、本当にやりたいことに時間を割くことができます。

本当にみんながほしいもの

みんなが本当に欲しいものは、実行すれば必要なものが全部入るrequirements.txtや、またはwheelベースでコミコミのPythonディストリビューション、 もしくは私が想像できていないソリューションがあるかもしれません。

ただ、それらは現状は見当たらず(あったら教えて!)、結局、多少の問題を認めつつも“今”はAnaconda(とpyenv)を使ったり勧めたりするわけです。

あと1年もすればAnacondaよりもっと問題の少ないソリューションが出てくると思います。出てくるといいな。

蛇足

以下の本もPythonのインストールはAnaconda+pyenvになってました。

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

やはり、説明・手順が簡単なことは価値なんだと思います。

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

入門 Python 3

入門 Python 3

詳細!Python 3 入門ノート

詳細!Python 3 入門ノート

実践 Python 3

実践 Python 3

今Pythonで機械学習・ディープラーニングする環境を作るならpyenv系一択だよね(※個人の感想です)

ちょっと煽ったタイトルですが、これから言いたいことを一言で言うとそういうことです。 またPython環境構築界隈の混沌が深まりそうで申し訳ないですが、自身の中ではそういう結論です。

まず、先に数件の別サイトの記事を紹介したいと思います。

qiita.com

qiita.com

ymotongpoo.hatenablog.com

上記ではpyenv不要では?という議論がされています。

斜め読みした感じだと、「Pythonのバージョンを複数インストールして切り替える需要あるか?」 という点で、pyenv不要ということらしいです。 不要なら使わないに越したことはありませんね。

さて、機械学習・ディープラーニングするにはAnacondaが必須なのは異論のないところだと思いますが、 Anacondaのバージョンアップではこれに含まれるライブラリが非互換なAPI更新がちょくちょくあります。

また、バージョンアップ前後のライブラリでパフォーマンスを測りたい、とか。

すると、「Anacondaのバージョンを複数インストールして切り替える需要」が出てくるわけで。

こちらの方もそんな感じで、pyenv + Anacondaな環境をセットアップする方法を紹介しています。

qiita.com

とすると、この場合はpyenv必要じゃね?となってくるわけです。

あともう一点、Anacondaはcurlとかの割と標準にあるコマンドを自身の中に持っていて、 普通にインストールすると/usr/bin/curlではなくAnacondaのものを使わせようとしてしまう現象があります。

これはAnacondaが悪いんですが、pyenvはそこのところを面倒見てくれていて、 Anaconda以外のPythonが有効なときはきちんと/usr/bin/curlを見るようにしてくれています。

asdf-vmのPythonプラグインはそこのところを見てくれなかったので、私はpyenvに乗り換えました。 以下参照。

team-6.hatenablog.jp

また、最近のpyenvがいい(と僕が思っている)ところは、いろんなものが1つの親コマンドにまとまっていることです。

  1. インストーラ・アンインストーラ
  2. バージョンマネージャ
  3. 環境マネージャ

1.,2. はpyenv一択だと思いますが、3.は議論が別れるところでしょう。

最近は公式のvenvが出てきたので、そちらを使う向きがあるでしょうが、pyenvのほうが補完が聞いたり、 bin/activateなんて謎コマンドではなくpyenv activate hogeで済むので嬉しいです。hogeの場所はpyenvが管理してくれます。

内部では、condaがあればそれを使うようです。これもまた議論が別れるところですね。

Pythonの仮想環境構築 2017.01版 - YAMAGUCHI::weblog にて、以下のような引用がありますが、

PythonにはThe Zen of Pythonという、Python自体の考え方や、それから派生したPythonで開発する上での指標となるものがあります。見たことがない人は次のコマンドで確認してください。 (略) 今回の話につながるところでいくと、次の3つがあります。

Simple is better than complex. (シンプルなのは複雑であることよりも良い)
There should be one– and preferably only one –obvious way to do it.(1つだけ、できれば唯一、の明らかな方法があれば良い)
If the implementation is hard to explain, it’s a bad idea.(その実装の説明が難しいなら、そのアイデアは良くない)

ツールに関してもそうです。シンプルなものがあればそれを使おう、なるべくシンプルな構成にしよう、という考え方です。

単一のツールで済むというのは、上記にそれほど反しないと思います。

そんなpyenv系(pyenv + pyenv-virtualenv, ついでにAnaconda)の使い方です。

# Install pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec "$SHELL"

# Install pyenv-virtualenv
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
exec "$SHELL"

# Install Anaconda
pyenv install -l # インストール可能なバージョン一覧を表示する、pyenv install までタイプしてTABでもいい
pyenv install anaconda3-4.4.0 # めっちゃ時間かかる
pyenv local anaconda3-4.4.0 # .python-version が作成され、カレントディレクトリのPythonのバージョンが固定される

# Create new environment
pyenv virtualenv anaconda3-4.4.0 my-env
# 追加パッケージのインストールが始まる

pyenv activate my-env # my-envの有効化
pyenv deactivate # 環境の無効化

綺麗に操作がpyenvでまとまっていますね!

パッケージ管理についてはpipcondaかに分かれてしまいますが、それは致し方ないでしょう。

将来的にはどうなるかわかりませんが、“今”Pythonで“機械学習・ディープラーニングする環境”を作るならpyenv系一択だと思います(※個人の感想です)。

入門 Python 3

入門 Python 3

詳細!Python 3 入門ノート

詳細!Python 3 入門ノート

実践 Python 3

実践 Python 3

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング