[備忘録]ディープラーニング with 三種の神器

#誰向けの記事なのか → 主に自分
###２０１９年・新年度心機一転

- これからPython使って機械学習・深層学習(以下ML・DLとする)始めたい人
- Jupyter notebookでやりたい人・始めたい人
- PyTorchを自前GPUで回したい人

**- おまけ -**
最近話題のJupyter Labを入れてみた

#概要・目的
###三種の神器とは
あくまでも個人的三種の神器で、
あんまり突っ込まれると宗教戦争が始まってしまうので、お気にせず。

- Jupyter: 対話型のnotebookが有名, 最近Jupyter Labをリリースし新しいIDE宗主に。
- GPU: DLの必需品。CPUで回すとPCで焼肉できそうになる。
- PyTorch: DLの開発フレームワーク。最近なんだか追い上げがすごくて書き方はChainerとも似てる。

###なぜやるのか
対話型のJupyter notebookと最近PyTorchが流行っているので弄ってみたくなったのと
デスクトップが手に入ったので自前のGPUで回したくなったから。

あとは環境構築が壁になってプログラミング学習・研究が進まないという経験が多々あるのでそんな方の助けになればと思い、忘却の彼方に消える前に書き残すことにしました。

【追記】
あとPerfumeででぃーぷらーにんぐが流行ったから。

###どうやるのか
以下の順番で環境を整えていく

1.Pythonの環境(PowerShell上,今回はanaconda)
2.Jupyter notebook
3.GPU周りとPyTorch

###環境
- Windows10 Pro (64bit　x64)
- intel Core i7-6700 3.4GHz
- NVIDIA GTX Geforce 1060 3GB(Ver 385.54)
- PowerShell 6

#早速やってく
##1.Pythonの環境
###PowerShellの構築(Anaconda promptとか使うぜって方は飛ばして下さい)
多分Windowsであれば最初からPowerShellは入っているかと思いますが
一応現時点(2019/01/01)での最新版(PowerShell 6)をダウンロード・インストールしておきましょう

[まずはダウンロードページへ](https://github.com/PowerShell/PowerShell#get-powershell)

![PowerShell_PowerShell_ PowerShell for every system! - Google Chrome 2019_01_01 2_26_19.png](https://qiita-image-store.s3.amazonaws.com/0/318424/d427d1c9-f7bc-e0ce-60b3-646c9b4b9f24.png)

環境にあったものの
Downloads (Stable)
からダウンロードしましょう

MacやLinux等に関しては[こちら](https://blog.shibata.tech/entry/2017/02/06/202025)を参照してください。

今回はWindows 10 x64 なのでそれに対応したものをダウンロードします。
あとはインストーラーの指示に従って特に変更することなくインストールしてください。

<font color = "Red">**注. Windows7だと幾つか環境の前提が必要となるようです、詳しくは[こちら](https://blog.shibata.tech/entry/2017/12/27/204933)**<font>

実際に使えるか見てみましょう
Cortanaか何かでプログラムを検索してPowerShell6を起動します。

![スクリーンショット (3).png](https://qiita-image-store.s3.amazonaws.com/0/318424/8a0c7d1e-870b-463d-4cce-b69a54479cd9.png)

検索して起動

![選択PowerShell 6 (x64) 2019_01_01 2_49_20.png](https://qiita-image-store.s3.amazonaws.com/0/318424/96070212-d249-6c41-4b45-7c6de824898c.png)

インストール出来てますね、これでPowerShell6の構築は完了です。

###Pythonのダウンロード
[Pythonのダウンロードページ](https://www.python.org/downloads/windows/)で環境にあった物をダウンロードしましょう。

御自分のWindowsナンバリングと何bitかは[こちら](https://support.microsoft.com/ja-jp/help/958406)を参考に確認してください。

今回はWindows10 64bitなので
最新版(2019/01/01時点)のPython3.7.2
(どうやら3.7系だと他の学習フレームワークで不具合が出るそうですが自分はまだ確認できていません)

>Download Windows x86-64 executable installer

を選んでダウンロードします。

###Pythonのインストール
ダウンロードが済んだら
ダウンロードしたexeファイルを実行しインストールします。

以下の画面が出てきたら

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/318424/88bbd6da-e3ab-b2ad-4bba-063c3a657706.png)

> - [ ] Add Python 3.7 to PATH

のチェックボックスにチェックをつけて

Install Now

をクリック、Pythonの世界に飛び込みましょう！
(環境構築のここの部分一番ワクワクするの自分だけでしょうか)

なんたらかんたらSuccefully
みたいなのがでてきてインストール完了です。
上手くいっているか確認してみましょう。

PowerShell 6を起動して

```.py
> python -V
Python 3.7.2
```

となれば完了です。
###Anacondaの環境構築(pipでいいよって方は飛ばしてください)
####なぜAnacondaなのか(飛ばしても可)
正直なところpipコマンドというものを使えば大抵のモジュールはインストールできてしまいます。
(pandasとかnumpyとかmatplotlibとかとか)

Anacondaを入れる必要はないのですが当方バイオ・ケモインフォマティクスが専攻で
conda install でしか入れることのできないRdkitというモジュールを入れたいのでAnacondaを選択しました。

####ダウンロード・インストール
[まずはダウンロードページへ](https://www.anaconda.com/download/)

![Downloads - Anaconda - Google Chrome 2019_01_01 3_12_00.png](https://qiita-image-store.s3.amazonaws.com/0/318424/07bd8789-f7e7-f967-4c2b-0d617bcb08c0.png)

Pythonはとても偉い言語で、さん(3)付けしてPython3と呼ばないとシメられる(全くのウソ、環境の事情です)
らしいのでWindowsのpython3.7の方をダウンロードしましょう。（割と容量があるのでモチ焼いて待ちましょう）

ダウンロードが済んだらインストーラーを起動してデフォルトのまま進めてインストールを開始・完了しましょう。
[詳細な説明はこちら](https://weblabo.oscasierra.net/python-anaconda-install-windows/)

####AnacondaをPowerShell6で使えるようにする
まずはPowerShell6のPATHを登録します。
PowerShell6を起動し

```.py
> $profile
C:\Users\(ユーザー名)\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
```

PowerShell6起動時に読み込まれるスクリプトのパスが表示されます。
((ユーザー名)の部分は皆さんの環境ごとに違いますので今後はそれに合わせて変更してください)
次に表示されたフォルダーを作成します。

```.py
> notepad $profile
```

警告がでますがそのまま白紙のメモ帳で以下の文を追加して保存して下さい。

```.txt
# Anaconda
$Env:Path += ";C:\Users\(ユーザー名)\Anaconda3\Library\bin\"
$Env:Path += ";C:\Users\(ユーザー名)\Anaconda3\Scripts"
```

PowerShell6の権限を設定する
再度PowerShell6を起動すると、「このシステムではスクリプトの実行が無効になっているため、…」というエラーメッセージが表示されます。

実行権限を得るために

```.py
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
```

本当に変更するか聞かれるかもしれませんが、ｙを入力して変更します。
変更できたか確認するため、「Get-ExecutionPolicy」コマンドで現在の状況を確認します。

```.py
> Get-ExecutionPolicy
RemoteSigned
```

となっていれば完了です。
一応これでAnacondaがPowerShell6上で使えるようになったはずです。
再起動して確認してみましょう。

```.py
> conda -V
conda 4.5.12
```

となれば成功です。

変更前もしくは変更されていなければ

```.py
> Get-ExecutionPolicy
Restricted
```
となっています。


####仮想環境を使えるようにする
PowerShell6ではActivateが使えません、
Activateによって仮想環境を立ち上げてPytorchなどRdkitを使えるようにします。
以下のコードを実行します。

```.py
> conda install -n root -c pscondaenvs pscondaenvs
```

動作確認をしましょう。

```.py
> conda create -n 環境名 #環境名はご自由に、なんか聞かれたらｙで。
> avtivate 環境名
(環境名) PS C:\Users\(ユーザー名)> python --version
Python 3.7.2
```

これで完了です。
仮想環境中の操作などは[こちら](https://qiita.com/ozaki_physics/items/985188feb92570e5b82d)がとても参考になります。

**やっとPythonをPowerShell上のAnaconda環境でつかえるようになりました！**

##2.Jupyter notebookの構築
ではでは次は何かと便利なJupyter notebookの構築です。
章に分けるほどの説明量はないのですが使い方とともにやっていきます。

###Ipythonのインストール
####対話型なのは実はIpython

Jupyter notebookでよく見る

```.py
In[1]:1+1
Out[1]:2
```

この形は実はIpythonの対話型なのです。
なのでJupyter notebookを使うにはIpythonが必要です。

PowerShell6を起動し以下のコードを実行します。
（以後仮想環境名は省略しますが各自必要な仮想環境を作ってください）

```.py
> conda install -c anaconda ipython 
```

インストールが完了したら動作確認してみましょう

```.py
> ipython
Python 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.

In []:
```

これで完了です。

###Jupyter notebookのインストール
ついにJupyter notebookのインストールです。
PowerShell6上の目的の環境で

```.py
> conda install -c anaconda jupyter 
```

動作確認をします。

```.py
> jupyter notebook
```

上手く動作すれば以下のような画面が起動するかと思います。
jupyter notebookを停止したい場合は右上のQuitを押して下さい。

![conda-test_ - Google Chrome 2019_01_01 7_48_27.png](https://qiita-image-store.s3.amazonaws.com/0/318424/365baf48-64ac-0179-587d-8aaf86d40a89.png)

新ノートブック(ipynb)を作成したいディレクトリに移動して
右上のNewからPython3を選ぶと以下のように新しくノートブックが作られます。

![conda-test_ - Google Chrome 2019_01_01 7_50_15 (2).png](https://qiita-image-store.s3.amazonaws.com/0/318424/e292aa3f-5646-1c93-9c41-ce3e951e00f5.png)

コードの他にマークダウン方式で解説や補足を加える事ができます。
色々な使い方は[こちら](https://www.procrasist.com/entry/2-100-numpy-exercise)、Jupyter以外の解説も豊富でとても勉強になります。

##3.GPU周りとPyTorch
ついにDL周りの環境構築にはいって行きます、ここからが正念場です。
###GPU周り
具体的には以下の二つを揃えます。

- CUDA ToolKit 10.0 
- cuDNN v7

####下準備
**Visual Studioのインストール**
CUDAのインストールの際にVisual C++のコンパイラを用いるのでインストールしておきます。(Community板でOK)
[インストーラーのダウンロードページ](https://visualstudio.microsoft.com/ja/downloads/)

インストーラーの以下のページでC++に関係するものと御自分の興味のあるものを選んでインストールしましょう。（割と時間かかりますのでおせちでも食べながら待ちましょう）

![install-visual-studio-community.png](https://qiita-image-store.s3.amazonaws.com/0/318424/e0940ea3-1ac7-ba49-89dc-642897352af1.png)

もしかしたら以下の個別のコンポーネントから
”コンパイラ、ビルド ツール、およびランタイム”の項の

>VC++ 2017 version 15.9 v14.16 latest v141 tools

にチェックを入れてインストールすれば良いのかもしれません
（猛者の方教えてください）

![Visual Studio Installer 2019_01_01 8_37_52.png](https://qiita-image-store.s3.amazonaws.com/0/318424/1797d3eb-5fda-01e1-f234-3714353b0fb2.png)


**GPUドライバのインストール（更新）**
次にGPUドライバのインストールです。

ドライバの[ダウンロードページ](https://www.nvidia.co.jp/Download/index.aspx?lang=jp)に行って御自分のGPUにあったドライバをダウンロード・インストールしましょう。
今回自分のGPUはNVIDIA GTX Geforce 1060 3GB Ver385.54なのでこのままではCUDA Toolkit 9.0までしか使えないので最新(2019/01/01時点)版のVer 417.35に更新します。

ちなみに各CUDA Toolkitのドライバのバージョン要件は以下のよう

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/318424/8a0c0725-8d5c-c905-74d9-7617ff1210ca.png)


GPUの詳細の確認方法は[こちら](http://gpccoming.com/graphic-board/check-your-graphic-board-by-directx-tool.html)

ダウンロードが済んだらインストーラーの頭の数字がバージョンのはずなので念のため確認しておきましょう。
![スクリーンショット (11).png](https://qiita-image-store.s3.amazonaws.com/0/318424/b2c13b86-071d-90e6-3e56-aac95a65ad8b.png)

417.35になってますね。ではインストーラーを起動してインストールしましょう。
（これも割とかかるので録画したガキ使を見ましょう）

####CUDA ToolKit 10.0 
下準備が終わったのでCUDAを入れていきます。

[ダウンロードページ](https://developer.nvidia.com/cuda-downloads)に飛んで対応する環境に合わせてダウンロードしましょう。

今回自分の環境はWindows10 (x64)なので以下のようになるかと思います。
![CUDA Toolkit 10.0 Download _ NVIDIA Developer - Google Chrome 2019_01_01 9_16_20.png](https://qiita-image-store.s3.amazonaws.com/0/318424/f9ff85b9-30fb-fade-891c-3ee56cfd4c98.png)

ダウンロードにもインストールにも時間がかかるのでガキ使の続きを見ましょう。
自分は引き出しシリーズが好きです。

インストールが終わると再起動するように言われるので再起動しましょう。

####cuDNN v7
先ほどCUDAを入れた際に以下のようなフォルダーができたかと思います。

![スクリーンショット (4).png](https://qiita-image-store.s3.amazonaws.com/0/318424/5e71d9f6-2de1-d6b6-ef44-53b662574d93.png)

このフォルダー内のbin, include, lib\x64にcuDNNでダウンロードした同フォルダ名中身をコピーしていきます。
まずは[ダウンロードページ(アカウント登録が必要です)](https://developer.nvidia.com/cudnn)へ

<font color="Red">注. 自分がやった時はリンク踏んでもページがなかなか開かなかったので何回か試してみてください<font>

アカウントも作成し無事以下のようなダウンロードページにたどり着いたら先ほどCUDA ToolKit 10.0をインストールしたので

![cuDNN Download _ NVIDIA Developer - Google Chrome 2019_01_01 9_50_53.png](https://qiita-image-store.s3.amazonaws.com/0/318424/e5548301-4181-e684-4174-e9776c8a3623.png)


> Download cuDNN v7.4.2 (Dec 14, 2018), for CUDA 10.0

を選択し御自分の環境に合わせて選んでください、
今回はWindows10を選びます。

zipでダウンロードされるので解凍して中身を確認しましょう

cudaというファイルの中に先ほど触れたbin, include, lib\x64があると思います、
その中に以下のようにポツリとファイルが一つだけ入っています。(以下はbinの例)

![スクリーンショット (6).png](https://qiita-image-store.s3.amazonaws.com/0/318424/c8e574cb-8e5e-c3a8-da48-72f4977d25a4.png)

これらを先述したC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0のbin, include, lib\x64にコピーします。
それぞれの画像の
左(cuDNNのcuda内のbin, include, lib\x64)

のウィンドウから

右(NVIDIA GPU Computing Toolkit\CUDA\v10.0内のbin, include, lib\x64)

それぞれポツリとあったファイルをドラッグアンドドロップして下さい
（ターミナルでも出来そうですが）

![スクリーンショット (8).png](https://qiita-image-store.s3.amazonaws.com/0/318424/6eaa09e3-b636-d40a-750f-70b7bba350df.png)
cudnn64_7.dllをドラッグアンドドロップ
（copyは気にしないでください）
![スクリーンショット (9).png](https://qiita-image-store.s3.amazonaws.com/0/318424/acf38b92-c6c3-ecc4-81fb-60334c19e9a6.png)
cudnn.hをドラッグアンドドロップ
![スクリーンショット (10).png](https://qiita-image-store.s3.amazonaws.com/0/318424/5e07eba6-96f2-c28f-81ce-095d3cd7ff45.png)
cudnn.libをドラッグアンドドロップ

全て管理者権限が必要な操作ですのでご注意ください。

一応PowerShell6でPATHが通ってるか確認しときましょう。
以下のコマンドをPowerShell6上で実行

```
> $env:Path.split(";")
```

![PowerShell 6 (x64) 2019_01_01 10_44_46.png](https://qiita-image-store.s3.amazonaws.com/0/318424/ae001ec6-f263-6d09-4313-25ab48cdf524.png)

こんな感じになってればOKです。

###PyTorch
ついについにPyTorch、早速PowerShell6上でインストール...の前に！
割とPyTorchインストールの際の環境条件は割とシビアでめんどくさいです...
(ここまでかなり細かく解説してきたのもその為)

しかしそこは流石は我らがPyTorch、めちゃんこ[便利なサイト](https://pytorch.org/)が...
ここで自分の環境を入力するとなんと実行するべきコードを生成してくれます！

ご自身の環境に合わせてコードを生成してください。
今回は

Your OS:Windows10
Package:conda
Language:python3.7
CUDA: CUDA Toolkit 10.0
(GPU持ってない！CPUで回す！って方はCUDAの項をNoneにしてください)

こんな感じなので以下のようになります。

![PyTorch - Google Chrome 2019_01_01 10_54_59.png](https://qiita-image-store.s3.amazonaws.com/0/318424/7ec1e276-2795-76ac-9fd4-65f5d752fff6.png)

ここで生成された

>conda install pytorch torchvision cuda100 -c pytorch

をPowerShell6上で今回はPytorchという仮想環境を作って実行します。

```.py
> conda create -n Pytorch 
> avtivate Pytorch
(Pytorch) PS C:\Users\(ユーザー名)> python --version
Python 3.7.2
(Pytorch)> conda install pytorch torchvision cuda100 -c pytorch
```

これも割と時間かかるので猫に餌をあげてきます。

インストールが終わったらPyTorchの仮想環境で動作確認してみましょう

```.py
(Pytorch)> python
>>>import torch
>>>print(torch.cuda.is_available()) #GPUが使えるかどうかTrueと出ればPerfume(成功です)
True
```

ついでに他の神器も入れておきましょう

```.py
(Pytorch)> conda install pandas matplotlib jupyter notebook scipy scikit-learn scikit-image seaborn
#jupyter notebookに関しては二度手間で申し訳ない
(Pytorch)> pip install opencv-python
#(この過程でpython version3.7.1になりますが問題ないはず)
```

こうなればこっちのもんです。

###これであなたもPerfumeになれる。

しかし強いPerfumeになるために今回はJupyterとGPU環境を整えたのでそれらでしっかりPytorchが機能するか確認しましょう！

```.py
(Pytorch)> jupyter notebook
```

![PyTorch - Google Chrome 2019_01_01 13_03_55.png](https://qiita-image-store.s3.amazonaws.com/0/318424/640cc8f1-f006-0ff1-0ef2-ae8aacfae9ce.png)


出来ました！これで完了ですお疲れさまでした！

#追記
Minicondaというものを使って最速で機械学習の環境を揃えることも出来るようです...!
>[機械学習の環境を構築するのにAnacondaをインストールする必要はない。Minicondaを使おう](https://qiita.com/icoxfog417/items/beffb263a7ffb8e5bcad)

当記事のAnacondaの部分をMinicondaに書き換えてれば出来そうですね！

#おまけ：Jupyter Lab 使ってみる
当方ミーハー野郎ですので
IDE（統合開発環境）は
Emacs→Atom→VisualStidio→？
と変遷を経ており、今回はJupyter Labに改宗を考えております。

早速使ってみましょう！

PowerShell6の任意の仮想環境でインストールして起動します。

```.py
> conda install -c conda-forge jupyterlab
> jupyter lab
```

![JupyterLab - Google Chrome 2019_01_01 21_50_56.png](https://qiita-image-store.s3.amazonaws.com/0/318424/3ad4ffcf-2c66-d458-f7a8-ad549ef3e892.png)

**「え、何このタブ」**
めちゃめちゃファイル管理がしやすくなっており
jupyter Lab上でcsvファイルを表示出来るようになってるようです。

しかも元のシンプルなデザインも保っている...

「2019年、改宗します。」

<font color="Red">**注. 膨大なデータを扱わせると動きが不安定になるようです、以下で紹介するサイトによるとデータ量が大きい場合はnotebookで回すといいそうで。**<font>

その他の新機能については[こちらのサイト](https://www.codexa.net/jupyter-lab-beta-review-ml-ide/)の方が先行して紹介して下さっておりますので参考にしてください(参考にさせて頂きました)

#おわりに
くぅ～疲れました、何とか元日に間に合った...

今回Perfumeが紅白でDeepLearningを映像演出に用いたということで急いで書いた記事ですので文章が稚拙だったり、テンションが一定じゃなかったりしてしまい申し訳ありません、間違っているところ等ありましたらご指摘ください。

自分の書いた目的としてはこれでデータ解析屋の仲間がもっと増えて欲しいという事と

>**"機械学習周りをAIと呼び、シンギュラリティやら仕事を奪う"**

という何か凄そうな話をするのもいいと思うのですがそれ以上に自分で触って実際に実装してみて地に足つけて、この技術には何ができて何ができないのか、何をやらせるべきで何をやらせるべきでないのか、自分なりに考えてみて欲しいと生意気な情報系学生として思ったからです。

それでは
**「2019年も"ディープ"な年にしていきましょう」**

#参考資料
以下の文献・サイトを参考に最新のVersionに置き換えて書かせていただきました、各サイト・記事の執筆者の方々には最大限の謝意を申し上げます。

DeepLearning 用 GPU 環境構築 (python framework 環境整備編)
https://qiita.com/kattoyoshi/items/20923cb50951624b312c

Deep Learning 用 GPU 環境構築 (CUDA関連インストール編)
https://qiita.com/kattoyoshi/items/494238793824f25fa489

NVIDIA DEEP LEARNING SDK DOCUMENTATION
https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html

PowerShellでAnacondaを使う方法
https://www.gesource.jp/weblog/?p=8254

Jupyter Labの便利な新機能まとめ -機械学習エンジニアが愛する開発環境（IDE）の決定版
https://www.codexa.net/jupyter-lab-beta-review-ml-ide/

PowerShell 6.0がリリースされました
https://blog.shibata.tech/entry/2018/01/15/010808

Windows 7にPowerShell 6.0をインストールする - 再び
https://blog.shibata.tech/entry/2017/12/27/204933

LinuxへのPowerShellのインストールが簡単になりました
https://blog.shibata.tech/entry/2017/02/06/202025

Anaconda を Windows にインストールする手順
https://weblabo.oscasierra.net/python-anaconda-install-windows/

【初心者向け】Anacondaで仮想環境を作ってみる
https://qiita.com/ozaki_physics/items/985188feb92570e5b82d#%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%81%AE%E5%89%8A%E9%99%A4

Condaの仮想環境をJupyter Notebookから利用する
http://starpentagon.net/analytics/conda_env_jupyter_notebook/

PROCRASIST
https://www.procrasist.com/entry/2-100-numpy-exercise

Visual Studio 2017 のインストール
https://docs.microsoft.com/ja-jp/visualstudio/install/install-visual-studio?view=vs-2017

機械学習の環境を構築するのにAnacondaをインストールする必要はない。Minicondaを使おう
https://qiita.com/icoxfog417/items/beffb263a7ffb8e5bcad

#免責注意事項
このコード・知識を使った環境構築で生じた損益に関しては一切の責任を負いかねますので自己責任で行って下さい。