fast.ai で deep learning を勉強しよう(1)準備

Practical Deep Learning for Coders, v3 のサイトで Deep Learning を勉強しましょう。

 fast.aiとは

v3と書かれているように講義は3年目になります。Jeremy HowardUSF で行った約120分の授業14回分(Part1‐7回 Part2-7回)をビデオで公開してくれているのと、その中で育ってきた Deep Learning 用のライブラリーfastaiを公開してくれています。授業を取るための費用として$2,000と書かれていますから、Part1 & 2 で$4,000分を無償公開してくれているというありがたい状態です。この背景には 医療分野の画像診断技術をDeep Learning で提供して、後進国の低収入の人でも高度な画像診断を受けられるようにしたいという Jeremy の思いがあり、その為には、実践で Deep Learning を使える人材を一人でも多く育てたいという事の様です。Jeremyは、その為の会社Enliticも立ち上げていて、次のようなニュースも伝わってきています。

lp-tech.net

kyodonewsprwire.jp

www.marubeni.com

v1では Keras を使用していましたが、今は Pytorch を使うようになっています。v3 は Part1 が2019年、年明け早々公開されました。python3.6以上+Pytorch1.0を使っています。

授業の進め方は、とにかく使ってみようというスタンスで、使えるようになってから、仕組みを理解すれば良いという通常の大学の授業とは逆の流れです。ですので、Deep Learning を使って何かをやりたい人向けです。クラウドpython を使う方法から、授業で使う jupyter nootbook の使い方の説明もあり、deep learning が初めての人でも言われた通りにやっていけば何とかなるイメージです。少々面倒なのが、Linux 環境で行われているため、windows PC では、ところどころ手を加えないと動かないことがあること、そして Python なので、モジュールがどんどんバージョンアップされて、モジュール間の不整合でエラーが出たりすることでしょう。でも一度授業の notebook が動くようになったら、その開発環境をいじらないようにすれば大丈夫です。

初心者相手の基礎から(とはいっても python の文法とかは自習が必要)なので、ある程度知っている人にとっては、まどろっこしい内容かもしれません。Deep Learning の研究をして論文を書きたいという人向きではありませんが、Jeremy が実践の中で取得したノウハウ、ツールの便利な使い方等を教えてくれたりするので、本では学べない内容だと思います。

環境構築: Win10

授業での使用はLinuxですが、自前のWindows10のPCで環境構築を行います。現状の構成は、Anaconda3(Python3.7) + pytorch1.0.0 + fastai1.0.42です。ハードとしては、最低限メモリー8GBは必要です。windowsは当然64bit版です。これは本当の最低限で、勉強をする事は出来るでしょうというレベルです。できればメモリーは16GB以上、GPUNVIDIAがMUSTで、GPUのメモリーも最低6GBは欲しい。GPUのメモリーが少ないと、結局GPUを使わないでCPUを使用した方が速かったりします。Deep Learningは、大量のデータを使用するのでハードディスクの空きは十分確保しましょう。自前PCが貧弱な時には、インターネット環境が整っているならばクラウドのサービスを使うこともできます。その場合には、使用時間で課金されることになります。

Anaconda インストール

AnacondaはPythonのモジュール管理を行うツールで、まずはこれをインストールします。次のサイトから Windows の python3.7版をダウンロードしてインストールします。

Anaconda Python/R Distribution - Anaconda

 インストール時のオプションは recommend のままで良いと言いたいところですが、インストール先のフォルダーは、なるべく浅い場所に設定しましょう。インストール時にスタートメニューに設定されるショートカットのファイルパスが文字数制限260文字を超えてしまい、うまく動かないことがあります。

 (ヒント)文字数制限をなくす方法(レジストリー操作なので自己責任で!)

1. 管理者権限でレジストリエディターを起動。
2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemキーを開く。
3. DWORD値「LongPathsEnabled」を開き、データを「1」に変更。
4. レジストリエディターを終了。
5. PCを再起動。

 GPUを使用する場合

 NVIDIA製グラフィックボードを搭載している時には、CUDAというGPUで計算処理を行う為のライブラリーを組み込みましょう。また、Deep Learning の計算を高速化する cuDNNというライブラリーも入れておく方が良いです。

次のサイトからダウンロードしてインストールしましょう。

  • Operating System : windows 
  • Architecture : X86_64 
  • Version : 10    (Windowsのバージョン)

CUDA Toolkit 10.0 Download | NVIDIA Developer

インストールするCUDAは Version 8, 9, 10 のどれかですが、Pytorch のデフォルトが CUDA9ですので、それが良いと思います。

cuDNNは次のサイトからダウンロードすることになりますが、DEVELOPER向けという事でメンバー登録が必要です。CUDAのバージョンに対応したものをダウンロードして、CUDAのフォルダーにコピーすることで機能します。

NVIDIA cuDNN | NVIDIA Developer

ZIP圧縮されているので、解凍して、それぞれの対応するフォルダーにファイルをコピーするだけです。

CUDA9の場合

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0

の下の、bin, include, lib\x64 にファイルをコピーすることになります。詳しくはサイトを見てください。

fastai用仮想環境の作成

Pythonは様々なライブラリーを組み合わせて動くので、目的ごとに組み込むモジュールとそのバージョンを管理するのが普通です。特に pip と併用しなくてはいけない場合(polyphony とか veriloggen とかは pip が必要でした)には、環境を分けた方が良いです。conda と pip は互換性が無いので、環境を壊してしまう可能性があるためです。

まずはcondaでfastai 用の環境を作ります。

(option)Anaconda に Proxy設定が必要な時

社内LAN等でProxy経由でインターネットにつながっている時には、Anaconda に Proxy 設定をする必要があります。 '.condarc' という名前のファイルを作り、Anaconda をインストールしたフォルダに置きます。

適当なエディターで

proxy_servers:
  http: http://***.***.***:***
  https: https://***.***.***:***

と書いたファイルを作り、適当な名前 hoge.txt で保存。その後、コマンドプロンプトでそのフォルダーを開いて、ファイルの名前をリネイムします。

>ren hoge.txt .condarc

Anaconda Prompt をクリックして コマンドを打ち込むウインドウを表示させ、

(base) C:\Users\username> conda config --show

と打ち込んで表示される設定の中に、今書いた proxy 設定が有る事を確認します。

仮想環境作成(ベースからコピー)

スタートメニューから Anaconda Prompt をクリックして コマンドを打ち込むウインドウを表示させます。

デフォルト環境を fastai という名前でコピーして使いましょう。

(base) C:\Users\username> conda create --name fastai --clone base
(base) C:\Users\username> conda activate fastai
(fastai) C:\Users\username>

 (ヒント)コピーではなくpythonのバージョンを変更する時

(base) C:\Users\username> conda create --name fastai  python=3.7 anaconda

 (ヒント)仮想環境の削除

(base) C:\Users\username> conda remove --name fastai --all

 (ヒント)モジュールの確認

(base) C:\Users\username> conda list

  fastai のインストール

 作成した仮想環境 fastai にモジュールfastai をインストールします。

(fastai) C:\Users\username> conda install -c pytorch -c fastai fastai

 Pytorch のインストール

fastai の インストール時に、pytorch もインストールされていると思いますが、自分の環境に合わせて再インストールします。

pytorch のサイトでインストール時の conda コマンドを確認します。

2019.2.7 現在、stable windows conda python3.7 CUDA9 だと

(fastai) C:\Users\username> conda install pytorch torchvision cudatoolkit=9.0 cudnn -c pytorch

 となります。cudnnも一緒にインストールします。

 jupyter の拡張機能インストール

jupyter notebook は 既にインストールされて、スタートメニューにも登録されていると思いますが、拡張機能をインストールしておきましょう。

(fastai) C:\Users\username> conda install -c conda-forge jupyter_contrib_nbextensions

  以上で、fast.ai を実行するための環境が出来上がりました。

(option)jupyter に Proxy設定が必要な時

jupyter の proxy 設定は、環境変数を設定することで行われます。ユーザーの .ipython フォルダーの下

C:\Users\username\.ipython\profile_default\startup

に、00-startup.py ファイルを作っておいておきます。

import os
os.environ['HTTP_PROXY']="http://***.***.***:***"
os.environ['HTTPS_PROXY']="https://***.***.***:***"

このファイルが起動時に実行されて、環境変数が設定されます。

jupyter Notebook (fastai) をスタートメニューから起動して、セルに

import os
print(['HTTPS_PROXY'])

等と書いて実行すると、設定されていることを確認できます。

Lesson1 準備

Part1 notebook のダウンロード

Part1で使用する notebook を下記からダウンロードします。

GitHub - fastai/course-v3: The 3rd edition of course.fast.ai

使用するnotebookは

course-v3/nbs/dl1/

にあります。

windows用に修正

とりあえずは Lesson1-pets.ipynb をWindows で実行できるように少し修正しておきましょう。.ipynb ファイルは jupyter で開くファイルですので、スタートメニューもしくは Navigator から jupyter を起動(Web ブラウザ上で表示されます)して、そこから開きます。

In [9]: の pat = r'/([^/]+)_\d+.jpg$' を次のように windows 用に修正 / -> [/\\]

  • pat = r'[/\\]([^/\\]+)_\d+.jpg$'

モリー不足のエラーが出た時には In [3]: のbs=64 を小さな値にしてやり直してみてください。bsは、バッチサイズと言って、機械学習時に一度に計算するデータのサイズです。

In [47]: の pat = r"/(\d)/\d+\.png$" 

  • pat = r"[/\\](\d)[/\\]\d+\.png$"

に修正します。

In [42]: 

  • df = pd.read_csv(path/'labels.csv')
    df.head()

で 

  • 'LazyConfigValue' object has no attribute 'lower'

とエラーが出るかもしれませんが、表示だけの問題の様ですから、気にしない事にします。 

環境設定での不具合対処方法

Anacondaのバージョンが大きく変わっています。現在(2019.2.9)の最新バージョンは

 Anaconda3-2018.12-Windows-x86_64.exe

ですが、これで上の操作で上手く行かない時には、前のバージョンをarchiveからダウンロードして使用することをお勧めします。

Anaconda installer archive

Anaconda3-5.3.1-Windows-x86_64.exe

旧バージョンを使用したいわけですから、condaはupgradeしない事と、create時にはcloneを使用しましょう。

Lesson1-pets.ipynbを実行したときに import fastai でエラーが出たり、create_cnnがいつまでたっても終わらないような時には、pytorchをバージョン指定で入れなおしてみてください。

(fastai) C:\Users\username> conda install pytorch=1.0.0 torchvision cudatoolkit=9.0 cudnn -c pytorch

 以下、現時点(2019.2.9)での一番確実と思われる組み合わせです。

  1. Anaconda3-2018.12-Windows-x86_64.exe のインストール
  2. Anaconda Prompt 起動
  3. (base) C:\Users\username> conda create --name fastai --clone base
  4. (base) C:\Users\username> conda activate fastai
  5. (fastai) C:\Users\username> conda install -c pytorch -c fastai fastai
  6. (fastai) C:\Users\username> conda install pytorch=1.0.0 torchvision cudatoolkit=9.0 cudnn -c pytorch
  7. (fastai) C:\Users\username> conda install jupyter_contrib_nbextensions

あと、クローンでできた仮想環境用のスタートメニューのショートカットがうまく動かない事があると思います。その時には

  1. スタートメニューでショートカット(Anaconda Prompt (fastai) 等)を右クリック
  2. その他ー>ファイルの場所を開く
  3. ショートカットを右クリックー>プロパティー
  4. リンク先の項目で、引数部分を""で括る
    %windir%\System32\cmd.exe "/K" "C:\Users\username\Anaconda3\Scripts\activate.bat" "C:\Users\username\Anaconda3\envs\fastai"

とすると、うまく起動するようになると思います。

usernameは自分の環境に合わせて書き換えてくださいね。

GPU使用有無の確認方法

GPUが実際に使われていることの確認はタスクマネージャーではできないので、
ELSA System Graph で行います。

www.elsa-jp.co.jp

 GPUが計算で使われると、Clock, GPU Load, Temperature, Memory Usage, Power Draw すべてが上昇するのが分かると思います。

f:id:feynman911:20190210212220j:plain

 Jupyter Notebook での Home の変更方法

スタートメニューで Jupyter Notebook を右クリック、「その他」、「ファイルの場所を開く」でショートカットのあるフォルダーを開きます。

Jupyter Notebook のショートカットを右クリックしてプロパティーを開きます。

リンク先の最後の「"%USERPROFILE%/"」と書かれている部分を 自分がNoteBook を置くフォルダーに書き換えて保存します。