MXNet をWindowsのPythonで使いたい
Deep Learning で学習をしていると、何かと時間がかかるのが気になるということで、
現在のところ高速に動くのはMXNetかCNTKということで、MXNet のインストールを試みた。
本家のドキュメントは若干古かったりして、あれ?と思うところがあったので、
自分が構築した手順を備忘録として書いてみました。
ダウンロード
windows の prebuild 版の最新版は以下のサイトからDLできる
まずは、vc12, vc14 のどちらかの関連ライブラリパッケージをダウンロードする
- vc12 base package
- vc14 base package
python3.5 が vc14 でビルドされているので、それに合わせて vc14 base package (約73MB)を選択する。
次に本体の prebuild版 をダウンロードする。cuda の準備ができていると思うので、gpu版(約18MB)をダウンロードする。
7z 形式の圧縮なので、http://forest.watch.impress.co.jp/library/software/7zip/
とかで解凍ツールをダウンロードしておく。
- 2017XXXX_mxnet_x64_vc14_cpu.7z
- 2017XXXX_mxnet_x64_vc14_gpu.7z
展開
ドキュメントでは c:\mxnet に展開すると書いている。
自分は適当に以下のようなフォルダを作成して展開した。
c:\work\mxnet
vc14 base package の 7z を展開。
- 3rdparty/
- include/
- lib/
- python/
- LICENSE
- README.txt
- setuenv.cmd
が含まれていた。3rdparty/cudnn/Readme.txt を見ると、自分で cudnn をDLして配置しろと書いてある。今回は cudnn 5.1 を設定する。
ちなみに 3rdparty/cudart/ を見ると、 cudart64_80.dll とあるので、CUDA8.0 64bit + cudnn 5.1 の組み合わせになる(ダウンロードされるバージョンによってアップデートされる)
- cudnn-8.0-windows10-x64-v5.1.zip
をDLして 3rdparty/cudnn の以下に展開したファイルをコピーした。
次に、2017XXXX_mxnet_x64_vc14_gpu のファイルを展開したものを
prebuildbase_win10_x64_vc14 にコピーする。ここまでの状態で
c:\work\mxnet\prebuildbase_win10_x64_vc14\
- 3rdparty/
- build/
- include/
- lib/
- nnvm/
- python/
- LICENSE
- README.txt
- setupenv.cmd
となっている。
Python 環境の設定
ドキュメントには setupenv.cmd を実行して、python/setup.py でインストールするとなっているが、まずは mxnet 用の仮想環境での利用を想定する。
windows の場合の仮想環境は、anaconda が便利。全部入りのものをダウンロードしてみ良いが、最低限の状態からインストールをする場合には、miniconda が良い。opencv のパッケージの関係で、使用するpythonは 3.5 とした。
conda による仮想環境設定
仮想環境名は -n で指定して、ここでは mxnet にした(任意で構わない)。
その後に、python=3.5 でバージョンを3.5 指定。numpy, scipy, cython は必要なのでインストール時に設定。ipython はテストで使いやすいので、ついでにインストール。
conda create -n mxnet python=3.5 numpy scipy cython ipython
ダウンロードされて、インストール先は c:\Anaconda3\envs\mxnet などになる。
無事に設定されると、この仮想環境を利用するコマンドプロンプトから
activate mxnet
で仮想環境を利用する状態になる。
MXNET のPATH 設定
setupenv.cmd を見ると、3rdparty のフォルダへのパス設定がPATH に加えられる。しかし、既に PATH の文字列が 1024 を越えている場合には失敗する。
ここでは、以下のフォルダの 絶対パスを環境変数 PATH に加える必要がある。
- 3rdparty\openblas\bin
- 3rdparty\gnuwin
- 3rdparty\vc
- 3rdparty\opencv
- 3rdparty\cudart
- 3rdparty\cudnn\bin
- lib\
要は、これらのPATH を設定するスクリプトを作成した。 c:\work\mxnet\mxnetenv.bat というファイルとして
set MXNET_HOME=c:\work\mxnet\prebuildbase_win10_x64\vc14
set MXNET_DEPEND=%MXNET_HOME%\3rdparty
set MXNET_PATH=%MXNET_DEPEND%\openblas\bin;%MXNET_DEPEND%\gnuwin;%MXNET_DEPEND%\vc;%MXNET_DEPEND%\opencv;%MXNET_DEPEND%\cudart;%MXNET_DEPEND%\cudnn\bin;%MXNET_HOME%\lib
set PATH=%MXNET_PATH%;%PATH%
を作成。MXNET_HOMEは各自のパスに設定しなおす。
mxnet を使う場合には、この mxnetenv.bat を起動してからおく。
python パッケージとしてインストール
ここまでの段階で python パッケージとしてインストールする準備ができた。c:\work\mxnet に展開したものとして書いているが、適宜読み替えて下さい。
activate mxnet
cd c:\work\mxnet
mxnetenv.bat
cd %MXNET_HOME%\python
python setup.py install
意味は、
- 先程設定した仮想環境 python 3.5 の mxnet に切り替え
- インストールしたフォルダに移動
- 環境変数PATHにmxnet の3rdparty の依存ライブラリパスを追加
- python フォルダに移動
- setup.py を使って 仮想環境の site-package にインストール
すると、他の足りてないライブラリなどをダウンロードしながら設定が開始されてインストールが完了します。
テスト
ここで、インストールできているかどうか確認します。
仮想環境の状態で、pythonを起動
import mxnet as mx
a = mx.nd.ones((2,3))
print((a*2).asnumpy())
エラーがなければ以下のようになる(ここでは、ipythonを使った)
(mxnet) c:\work\mxnet> ipython
In [1]: import mxnet as mx
In [2]: a = mx.nd.ones((2, 3));
In [3]: print ((a*2).asnumpy());
[[ 2. 2. 2.]
[ 2. 2. 2.]]
検証環境の追加
このままだと、何をするにも不便なのでOpenCV3 と jupyter をインストールしました。
conda install -c menpo opencv3
conda install jupyer matplotlib
(OpenCV3 のパッケージは標準ではない。現時点では python3.6 用は配布されていないので、3.5 を使うことになった理由がここにある)
jupyter-notebook
で、jupyter を立ち上げて、「New」-「Python3」で新しいファイルを作成して、先程のテストコマンドが通るかどうかをテスト。
あと、MXNetのtutorial では、グラフを描画するサンプルもあるので、
事前にgraphviz をインストールしたほうが良いです。
さいごに
これで、最新版の mxnet を使えるようになっていると思いますが、mnist などのテストは次の機会ということで・・・