PyTorchの環境作ってIntelliJ IDEAで動かすところまで

pyenv + Anaconda + PyTorch + IntelliJ IDEA 環境を構築するときの手順メモです。

Anacondaで環境揃えてた所にIntelliJ IDEAからも触れるようにしたいなぁと思った人用です。果たしてどれだけ需要があるのやら。。。

# 前提
- MacBook Pro 2016（High Sierra）で構築しています。
- Windows10な環境でも一応同じような手順でできることは確認してます。

# Anaconda入れる
## windowsの場合
以下からwindows用のAnaconda(python3系)をダウンロードして、インストールします。
https://www.anaconda.com/download/#windows
もろもろの環境がセットされているので楽です。

## Macの場合
PythonやAnacondaぐらいしか触らないという場合は、同じように以下からダウンロードしてインストールでもよいです。
https://www.anaconda.com/download/#macos

が、他にも色々開発していたり、複数のpythonバージョンの共存を気にする場合はpyenvなどの環境分離ツールを使っておくと安全です。
特にAnacondaはシステムのデフォルトpythonのPATHなんかを上書きしたりするので注意が必要です。
今回は、Mac自体のpython（2系がデフォルトで入っている）を生かしつつ、開発用のプロジェクトディレクトリのみAnacondaで導入される3系を使うようにしています。

### pyenv入れる

まずMacで定番のパッケージ管理ツールhomebrewを入れておきます。
これ。
[Homebrew](https://brew.sh/index_ja.html)

```bash:homebrew
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

続いてhomebrewでpyenvをインストール
これ。
[pyenv](https://github.com/pyenv/pyenv)

```bash:pyenv
$ brew update
$ brew install pyenv
```

インストール可能なリストを表示

```bash:anaconda
$ pyenv install --list

3.6.4
3.7.0b2
3.7-dev
anaconda-1.4.0
・・・
anaconda3-5.1.0

$ pyenv install anaconda3-5.1.0
```
3.x.xみたいなのはpythonのバージョンです。pythonだけインストールしたい場合はこちら。
今回はanaconda3-5.x.xを選択します。
インストール後、現在インストールされている内容をversionsで確認してみます。

```bash:確認
$ pyenv versions
* system
  anaconda3-5.1.0

$ mkdir qiita
$ cd qiita
$ pyenv local anaconda3-5.1.0
```

特定のディレクトリ下だけにanaconda環境を反映したい場合は、そのディレクトリで`pyenv local anaconda3-5.1.0`のように設定をするとOKです。
デフォルト設定自体を変えたい場合は`local`のところを`global`で。

# PyTorch入れる
続いて機械学習ライブラリであるPyTorchを入れてみます。
といっても公式サイトにあるように１、２行で終わりです。
https://pytorch.org/

今回はAnacondaを使っているので、package managerはcondaを選びましょう。

```bash:pytorch_mac
conda install pytorch torchvision -c pytorch
```
CUDAあるなしで少し変わりますね。
windowsの場合はAnaconda promptから実行しましょう。

# IntelliJ IDEAで開く

PyCharmの場合はpython用なので何も問題なしです。
IntelliJ IDEAをお使いの場合は、pythonプライグインをインストールしておきます。
<img width="677" alt="スクリーンショット 2018-06-20 2.49.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/83530/23d88089-386b-a1b5-235e-eff83dfe102e.png">

次に先ほど諸々設定したディレクトリを開き、プロジェクトの設定（File -> Project structure）を開きます。
Project SDKというところに何も設定されていない状態かと思いますので、Python環境の設定を行います。
Newをクリック

<img width="694" alt="スクリーンショット 2018-06-20 3.13.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/83530/49b3e867-3af9-b18e-a301-2dd9c6ece897.png">

<img width="754" alt="スクリーンショット 2018-06-20 3.41.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/83530/87ff1cf6-8710-100d-11b5-a98a69d1db97.png">

Existing environmentの所に自動的に設定したanacondaの設定が出て来ます。
（出てこない場合もありましたが、再起動したり、後述のScientific Modeなどに切り替えてたりすると認識されました。もしくはそれでもダメなら手動設定）
そちらを選択してOKを押すと、環境の読み込みがバックグラウンドで実行されます。

## コード書いて確認

pythonファイルを追加し、動作確認を行います。
PyTorchのような機械学習ライブラリを使う場合、コードを書いては消してというような試行錯誤を行うことが多いので、適したモードに切り替えます。
[Scientific Mode](https://www.jetbrains.com/help/idea/matplotlib-tutorial.html)というもので、JupterNotebookとかspyderとかに近い使い勝手になります。すごい。

View -> Scientific Mode　で切り替わります。ついでにTool -> Python Consoleも表示しておくといい感じです。

ではpythonファイルを作成して、以下を記述。

```python:sample
from __future__ import print_function
import torch
import matplotlib.pyplot as plt

#%%
x = torch.empty(5, 3)
print(x)

#%%
plt.plot([1,2,4,2])
plt.show()
```

`#%%`という記述でブロックの区切り目が作れます。そしてCtrl+Enterで、現在カーソルがあるブロックのみを実行できるので便利です。
また、カーソルがある一行だけを実行というのもできます。ショートカットは"Execute selection"あたりで検索すると出てきます。
<img width="738" alt="スクリーンショット 2018-06-20 4.05.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/83530/9f71730c-c316-bf03-452d-7104e553fb3f.png">

これで、ソースコード＋コンソールで対話的に実行＋グラフやドキュメント表示+変数の中身確認ができる環境ができました。~~何これ強化版spyder~~

<img width="998" alt="スクリーンショット 2018-06-20 4.09.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/83530/9ee87da8-dba7-4a07-9c73-1209967e9220.png">

環境設定周りはもっとうまくできそうな気もしますが、ひとまず既存のプロジェクトをIntelliJに認識さすということをしたかったので、ザクっとやった手順メモでした。

### 補足とか言い訳
- PyTorch動かすだけならAnacondaいらない可能性...
- IntelliJ IDEA上でプロジェクト作成＆PyTorchインストールしたら、何も難しい設定いらない可能性...

既存のプロジェクトがある所に後からIntelliJ導入したので。。。