Windows PCで機械学習環境を作る方法まとめ

機械学習を始めて学習・開発環境は色々と試しました。
素人状態から手探りで始めて、転職でPCが変わったり、自宅PCを変えたり、自身のスキルが向上したり、世間の技術が進歩したりと多くの状況が変わり、私の機械学習向け学習・開発環境も変わっていきました。
今回の「機械学習向け学習・開発環境」は**Python実行環境を意味しています**。Rなどの言語は対象としていません。
マックは使ったことがないので、今回の記事では記載していません。参考程度になるかもしれませんが・・・

# まとめ
簡単なまとめです。

|方法|概要|メリット|デメリット|
|:-:|:-:|:--|:--|
|Google Colaboratory|手軽に使える|・すぐ使える<br>・GPU/TPUが使える|・ファイルI/Oが面倒<br>・Jupyterでない形式の開発ができない<br>・Python以外のソフトのインストールが面倒/できない|
|Anaconda|GUI操作なので扱いやすい|CLIに慣れない人にも優しい|・ディスク使用量が大きい<br>・condaを使ったPythonパッケージ管理が非常に面倒|
|Miniconda|小さくCLIで操作するAnaconda|ディスク使用量が小さい|・GUIがない<br>・condaを使ったPythonパッケージ管理が非常に面倒|
|Pyenvとvenv(Ubuntu)|動作が軽いUbuntu用環境|ディスク使用量が小さい|・GUIがない<br>・仮想環境有効化時のコマンドが長い<br>・仮想OS上で動かすのが面倒|

# [1. Google Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)
クラウド上で使用できるJupyter環境。無料でお手軽だが、細かいことには向いていない。
今でも関数の使用法調査やサンプルプログラム作成によく使っています。
記事[「Google Colaboratory概要と使用手順(TensorFlowもGPUも使える)」](https://qiita.com/FukuharaYohei/items/18bc4465923bdda81826)参照。

## メリット
**すぐに簡単に利用できます**。
TensorFlowやMatplotlibなどよく使うパッケージはインストールされているし、pipで追記インストールもできます。
**無料で特別な設定もなくGPU・TPUが使えます**。
**GitHubとも簡単に連携**できます。GitHubからクローンしたり、Pushしたりできます。

## デメリット
**ファイルI/Oが面倒**。ローカルPCからもGoogle Driveからもファイル読み書きできるのですが、ローカルとは通信が発生してしまうので、時間がかかり、Google Driveにいちいち置いたりしておくのも少し面倒。
**Jupyter形式のみ**なので、ノートブックではないPythonが書けないです。といっても勉強時にはJupyter形式で十分なことが多いですが。
**Python以外のソフトのインストールが面倒/できない**。例えば、MongoDBも使いたいなどとしたときにインストールできるのかわかります(できそうな気もしますが)。仮にできても、毎回環境が作成されるような仮想環境には適当でないと思います。
あと、会社からはネットワーク上接続を許していないこともあるような気がします。

# [2. Anaconda](https://www.anaconda.com/)
非常に人気のあるデータサイエンティスト向けソフトです。
**使いやすくPython学習の入り口としてとてもおすすめ**。慣れてくるとGUIや無駄についてくるパッケージが邪魔で、condaでのパッケージ管理も鬱陶しく感じます。
記事[「TensorFlowをWindowsにインストール Python初心者でも簡単だった件」](https://qiita.com/FukuharaYohei/items/d8f82c827e0bae70096a)参照。

## メリット
**GUIで操作ができる**ので、CLIに不慣れでも問題なし。
いくつかのパッケージが最初からインストールされているので環境構築の手間が少し省ける。

## デメリット
できるだけcondaを使ってパッケージ管理をすべきなのですが、**condaで最新のパッケージを探すのが面倒**。記事[「condaとpip：混ぜるな危険」](http://onoz000.hatenablog.com/entry/2018/02/11/142347)参照。
ディスクを結構使用してしまう

# [3. Miniconda](WindowsにMinicondaインストール(2018年))
AnacondaをMiniに(軽量化)したソフト。GUIがないのでCLIに慣れていない人には使いにくい。Anacondaだと3GBのディスク容量が必要なのに比べると400MBくらいまで軽量化されている。

記事[「WindowsにMinicondaインストール(2018年)」](https://qiita.com/FukuharaYohei/items/cf72049b2a97687037bb)参照

## メリット
**そこそこ軽い**

## デメリット
できるだけcondaを使ってパッケージ管理をすべきなのですが、**condaで最新のパッケージを探すのが面倒**(Anacondaと同じ)。
GUIがない


# 4. [Pyenv](https://github.com/pyenv/pyenv)と[venv](https://docs.python.org/ja/3/library/venv.html)
PyenvでPythonバージョンを管理し、venvでパッケージ管理をする。
Linux向けの環境です。そもそもTensorFlowなどの世界は、Windowsをサポートしていないものが多かったり、チュートリアルがなかったりとWindowsに優しくないです。なので、VMwareやOracle Virtual Boxなどの仮想化でUbuntuを使います。
PyenvはWindowsでは使えないので、Linux仮想化前提です。

記事[「UbuntuにpyenvとvenvでPython開発環境構築」](https://qiita.com/FukuharaYohei/items/2820f7bda6678ce26ea7)参照

※最近気づいたのですが、この方式よりvirtualenv使う方が一般的なようです。チュートリアルではvirtualenv向けにかかれているのが多いです。ただ、Pyenvとvenvでも不都合がないので、この方式を使っています。

## メリット
**OS Linuxだと多くチュートリアル・開発環境設定がそのまま実行可能**
**軽い**

## デメリット
Windowsの場合、**仮想化が必要**(pyenvをwindows用にフォークした[pyenv-win](https://github.com/pyenv-win/pyenv-win)があればこれでもいいかも)
GUIがない

# WindowsからLinuxを使う場合
## [WSL(Windows Subsystem for Linux)](https://ja.wikipedia.org/wiki/Windows_Subsystem_for_Linux)
WSL2は使ったことがなく、WSL1についてです。
起動が早かったりするのがいいのですが、よくわからないエラーに遭遇することが多かったです。Linux初心者としては、原因追求に時間がかかってしまい、そんなことをしたくなかったので使うのをやめました。

## Docker
Dockerも試しましたが、開発環境が重くなっていくとDockerのメリットがないので使うのをやめました。

## Virtual Box
Virtual Box上でUbuntuを使っています。
特に問題もないのですが、個人的にVMWareの方が好きです。

## VMWare
VMware上でUbuntuを使っています。
特に問題もなく、一番使っています。

## クラウドサービス
Google Cloud Platformの AI Platformを使っています。訓練時のみ課金されるのが好きです。
記事[「Google AI Platform - Cloud ML Engineを初心者が動かして理解(前半)」](https://qiita.com/FukuharaYohei/items/b9421c2d2837e14eb049)参考。