non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

pytorchによるcycleGANの実装をWindowsで動かした

この記事は@kjunichiの2017年パーソナルアドベントカレンダーの24日目の記事です 。

背景

という記事を目にして、以前、別の場所で見て気になっていた画像処理関係の論文の実装を扱っている記事だと分かり読んでみました。

どうやらpytorchというTensorflowみたいなのがベースになっており、 このリポジトリに立っているissue見るとWindowsでもCUDAを使って動かせるような記述があったので、 Windows10を動かしてNVIDIAGPUが載っている自作PCで動かせそうだったので試してみた。

準備

Python3

Anacondaをインストールしており、これを使用して進めた。

conda create -n pttest python=3.6
activate pttest

として、環境を用意。以降この環境で作業した。

Windows版のpytorchのインストール

conda install -c peterjc123 pytorch

これで、今回使うcycleGANで使用している2.x系のpytorchがインストールされた。

その後、 pytorch-CycleGAN-and-pix2pixの公式READMEに従って、pytorchの他に必要なライブラリをインストール

git clone https://github.com/pytorch/vision
cd vision
python setup.py install
pip install visdom
pip install dominate
git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
cd pytorch-CycleGAN-and-pix2pix

データの入手

WSL大活躍、ubuntu入れて、そこで/mnt/c/..で作業しているディレクトリまで移動して、 公式のシェルスクリプトを実行。 (sudo apt-get unzipが必要だった)

cd /mnt/c/hoge/fuga/pytorch-CycleGAN-and-pix2pix
bash ./datasets/download_cyclegan_dataset.sh maps

これで、必要なデータのDLが行えた。WSLさまさまでした。 (その後、map以外のサンプルukiyoe2photoを試したら、zip展開後のファイル名にWindowsでは問題のある文字が使われているようで、 macOSで展開して、そこからリモートコピーすることで、取得できた)

うごかす

Windowsでの対応が必要だった。

Windows版の説明にちらっと書いてはあったが、意味が分からなかったが動かして分かった。

学習データの読み込み処理などをマルチプロセスで実行して処理速度を稼ぐようだが、 Windows版ではこれを無効にしないとだめらしい。そのための修正が以下

train.pyの修正

from util.visualizer import Visualizer
if __name__ == '__main__': # この一行を入れて、次行以降のインデントを下げる

test.pyの修正

from util import html
if __name__ == '__main__': # この一行を入れて、次行以降のインデントを下げる

実行

python train.py --dataroot ./datasets/maps --name maps_cyclegan --model cycle_gan --no_dropout --loadSize 128 --fineSize 128

多分警告が出るだけとは思うが

動き出すと、ローカルのvisdomのサーバーへのアクセスに失敗したと警告がでてくる。 で、これを解消しようと、

python -m visdom.server

として、visdomのサーバーをたてようとした。 が、

Traceback (most recent call last):
  File "C:\Users\kjw_j\Anaconda3\envs\pttest\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Users\kjw_j\Anaconda3\envs\pttest\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\kjw_j\Anaconda3\envs\pttest\lib\site-packages\visdom\server.py", line 636, in <module>
    download_scripts()
  File "C:\Users\kjw_j\Anaconda3\envs\pttest\lib\site-packages\visdom\server.py", line 616, in download_scripts
    with open(filename, 'wb') as fwrite:
OSError: [Errno 22] Invalid argument: 'C:\\Users\\kjunichi\\Anaconda3\\envs\\pttest\\lib\\site-packages\\visdom/static/fonts/glyphicons-halflings-regular.eot?#iefix'

と、エラーが出て動かない。

そこで、再びWSL登場!。 WSLのubuntuにvisdomを入れて、ここで動かしすことで解決した。

GPUを使用せずに動かす

学習中でもGPUを占有しているようで、じつは別のプロセスでGPU資源を利用出来てしまい、 この状態で、学習中のプログラムがGPU資源を掴もうとして、リソース不足になって途中でGPUエラーで 落としてしまいました。

まぁ、そもそも、viscomのサーバーにWebブラウザでアクセスすれば、途中経過が見れるのですが、 当初はその見方が全く分からず、別途test.pyを動かして確認してました。

そんな中、方法を編み出しました。




epochを途中から指定するには

こうして中断してしまった学習の続きをさせる場合、epochを指定することで、 途中から続けてくれる感じでした。

また、意図的にGPU資源を利用せずとも、Windows版のpytorchだからなのか、学習途中で予期せぬエラーが起きて中断することがありました。




まとめ

WSLのおかげで、データのDLと、visdomのサーバーを動かすことが容易に行えた。

TensorflowのmacOSでのGPUサポートが切れてからはWindows生活が加速してるが、今回使ってるpytorchなら、 MacBook ProでもGPU使えるのか気になった。

関連記事

3年前の記事