2016年12月1日木曜日

WindowsでDeepLearning・その2

さて,昨日の段階で,

    **************************************************
    *** WARNING: Include files not found: ['cudnn.h']
    *** WARNING: Skip installing cudnn support
    *** WARNING: Check your CFLAGS environment variable
    **************************************************
というエラーが出て終わっていたので,FIXを目指す. https://github.com/pfnet/chainer/issues/1699 を見てみたけど,どうも最後まで解決はしていないらしい.

とにかく問題はcuDNNがうまくインストールされていないことらしいということで, あたりがついてきたので,その辺を調べてみる.

どうやらcuDNNは中身を C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0 以下に上書きする必要があったようだ. http://qiita.com/okuta/items/f985b9da6de33a016a75

cuDNNを無事ダウンロードできた人は、展開したファイルをC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5に上書きしてください。
cuDNNv3の場合、cudnn64_70.dllがCUDA\v7.5\binフォルダに、cudnn.hがCUDA\v7.5\includeフォルダにcudnn.libがCUDA\v7.5\lib\x64に入っていれば大丈夫です。

これで再び

>pip install chainer --no-cache-dir -vvvv
でインストールすると,エラーは発生せずに無事インストールできた.

が,実行してみると

>python train_mnist.py --gpu 0

GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20

Traceback (most recent call last):
  File "C:\usr\Python35\lib\site-packages\cupy\cuda\compiler.py", line 49, in _run_nvcc
    return subprocess.check_output(cmd, cwd=cwd, stderr=subprocess.STDOUT)
  File "C:\usr\Python35\lib\subprocess.py", line 626, in check_output
    **kwargs).stdout
  File "C:\usr\Python35\lib\subprocess.py", line 708, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['nvcc', '--preprocess', '-Xcompiler', '/wd 4819', '-m64', 'C:\\Users\\***\\AppData\\Local\\Temp\\tmp_ak8290o\\kern.cu']' returned non-zero exit status 2

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "train_mnist.py", line 107, in 
    main()
  File "train_mnist.py", line 104, in main
    trainer.run()
  File "C:\usr\Python35\lib\site-packages\chainer\training\trainer.py", line 292, in run
    entry.extension(self)
  File "C:\usr\Python35\lib\contextlib.py", line 77, in __exit__
    self.gen.throw(type, value, traceback)
  File "C:\usr\Python35\lib\site-packages\chainer\reporter.py", line 90, in scope
    yield
  File "C:\usr\Python35\lib\site-packages\chainer\training\trainer.py", line 289, in run
    update()
  File "C:\usr\Python35\lib\site-packages\chainer\training\updater.py", line 170, in update
    self.update_core()
  File "C:\usr\Python35\lib\site-packages\chainer\training\updater.py", line 182, in update_core
    optimizer.update(loss_func, *in_vars)
  File "C:\usr\Python35\lib\site-packages\chainer\optimizer.py", line 392, in update
    loss = lossfun(*args, **kwds)
  File "C:\usr\Python35\lib\site-packages\chainer\links\model\classifier.py", line 67, in __call__
    self.y = self.predictor(*x)
  File "train_mnist.py", line 24, in __call__
    h1 = F.relu(self.l1(x))
  File "C:\usr\Python35\lib\site-packages\chainer\links\connection\linear.py", line 91, in __call__
    self._initialize_params(x.size // x.shape[0])
  File "C:\usr\Python35\lib\site-packages\chainer\links\connection\linear.py", line 77, in _initialize_params
    initializer=self._W_initializer)
  File "C:\usr\Python35\lib\site-packages\chainer\link.py", line 180, in add_param
    data = initializers.generate_array(initializer, shape, self.xp)
  File "C:\usr\Python35\lib\site-packages\chainer\initializers\__init__.py", line 45, in generate_array
    initializer(array)
  File "C:\usr\Python35\lib\site-packages\chainer\initializers\normal.py", line 94, in __call__
    Normal(s)(array)
  File "C:\usr\Python35\lib\site-packages\chainer\initializers\normal.py", line 31, in __call__
    loc=0.0, scale=self.scale, size=array.shape)
  File "cupy/core/core.pyx", line 1107, in cupy.core.core.ndarray.__setitem__ (cupy\core\core.cpp:22267)
  File "cupy/core/core.pyx", line 1336, in cupy.core.core.elementwise_copy (cupy\core\core.cpp:49642)
  File "cupy/core/elementwise.pxi", line 771, in cupy.core.core.ufunc.__call__ (cupy\core\core.cpp:40576)
  File "cupy/util.pyx", line 35, in cupy.util.memoize.decorator.ret (cupy\util.cpp:1261)
  File "cupy/core/elementwise.pxi", line 579, in cupy.core.core._get_ufunc_kernel (cupy\core\core.cpp:37190)
  File "cupy/core/elementwise.pxi", line 32, in cupy.core.core._get_simple_elementwise_kernel (cupy\core\core.cpp:27744)
  File "cupy/core/carray.pxi", line 87, in cupy.core.core.compile_with_cache (cupy\core\core.cpp:27431)
  File "C:\usr\Python35\lib\site-packages\cupy\cuda\compiler.py", line 131, in compile_with_cache
    base = _empty_file_preprocess_cache[env] = preprocess('', options)
  File "C:\usr\Python35\lib\site-packages\cupy\cuda\compiler.py", line 94, in preprocess
    pp_src = _run_nvcc(cmd, root_dir)
  File "C:\usr\Python35\lib\site-packages\cupy\cuda\compiler.py", line 56, in _run_nvcc
    raise RuntimeError(msg)
RuntimeError: `nvcc` command returns non-zero exit status.
command: ['nvcc', '--preprocess', '-Xcompiler', '/wd 4819', '-m64', 'C:\\Users\\*****\\AppData\\Local\\Temp\\tmp_ak8290o\\kern.cu']
return-code: 2
というわけで,実行時エラー.
さて,ここからどうするか・・・

2016年11月30日水曜日

WindowsでDeepLearning・その1

Windows10でDeepLearningを目指す.
基本的に,
http://qiita.com/akrian/items/953082aa8f00479dbb01
を参考にする.

まずは,Python3.x系のインストール.
2.7系とどちらを入れるべきか悩んだけど,参考ページが3.5なので同じものを.

https://www.python.org/downloads/
から,Python3.5.2 Windows x86-64 web-based installerを選択してDL.
そして,インストール.





Visual Studio CommunityをDL
https://www.visualstudio.com/ja/downloads/
最新版でいいのかな.
さすがMicrosoft.いきなりInstallが始まったぞ.



かなり長時間のインストール後,再起動.

続いてCudaを導入.
https://developer.nvidia.com/cuda-downloads



cuDNNをインストール

Pycudaをインストール

Windows環境変数を追加

Chainerのインストール

と調子よくインストールが完了していったが,
・Chainerのサンプルファイルを実行
でこけた.

GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20

Traceback (most recent call last):
  File ".\train_mnist.py", line 107, in <module>
    main()
  File ".\train_mnist.py", line 56, in main
    chainer.cuda.get_device(args.gpu).use()  # Make a specified GPU current
  File "C:\usr\Python35\lib\site-packages\chainer\cuda.py", line 180, in get_device
    check_cuda_available()
  File "C:\usr\Python35\lib\site-packages\chainer\cuda.py", line 85, in check_cuda_available
    raise RuntimeError(msg)
RuntimeError: CUDA environment is not correctly set up
(see https://github.com/pfnet/chainer#installation).CuPy is not correctly installed. Please check your environment, unin
stall Chainer and reinstall it with `pip install chainer --no-cache-dir -vvvv`.
だそうで.

試しに,
> pip install chainer --no-cache-dir -vvvv
としてみたけど,案の定ダメ.

http://hurikake.hatenadiary.jp/entry/2016/09/26/232246
を参考にして,
いろいろ試した結果,pathが有効になっていなかった.
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin
へのPathが有効になっていなかった.

ログインしなおして再チャレンジ.
今度は,
distutils raises an error: Unable to find vcvarsall.bat
だそうな.
http://www.regentechlog.com/2014/04/13/build-python-package-on-windows/
によると,
C/C++などのビルドが必要なファイルを含むPythonパッケージをWindows環境下でインストールしようとすると「Unable to find vcvarsall.bat」とエラーがでることがあります。

Pythonパッケージにビルドが必要なファイル(pure Python以外のC/C++など)が指定されている場合はインストール時にコンパイルが必要ですが、Windows環境ではデフォルトでPython本体をコンパイルしたVC++と同じバージョンのVC++を呼ぼうとします。そのため、Python本体をコンパイルしたバージョンのVC++がないとエラーになります。
なるほど.
調べてみると,
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.version
'3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]'
>>>
ということで,MSC v.1900->VS13でコンパイルしたことが分かる.
・・・と思ったけど,
http://stackoverflow.com/questions/33323172/vcvarsall-bat-needed-for-python-to-compile-missing-from-visual-studio-2015-v-1
によると, vcvarsall.bat がないことがあるらしい.
調べてみたら,確かに
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\vcvarsall.bat 
はない.
http://stackoverflow.com/questions/33323172/vcvarsall-bat-needed-for-python-to-compile-missing-from-visual-studio-2015-v-1#comment63185046_35243904
を参考に,
c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\vsvars32.batをコピーして,vcvarsall.batとリネームしてみる.

とりあえず動いたけど,
GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20

C:\usr\Python35\lib\site-packages\chainer\cuda.py:90: UserWarning: cuDNN is not enabled.
Please reinstall chainer after you install cudnn
(see https://github.com/pfnet/chainer#installation).
  'cuDNN is not enabled.\n'
というわけで,cuDNNは使えていないらしい.
そのうえ,実行も失敗している.

う~む・・・
いずれにせよ,今日は時間がないので,ここまで.


2016年2月1日月曜日

2006年の節分まで恵方巻なんてなかった!?クックパッドデータを使って調べてみた.

節分が近づいてきました.
で,最近は恵方巻きとか太巻きとか節分に食べる訳ですが,子供の頃そんな風習無かったよな~としか思えない.

マスコミに踊らされているとか,コンビニ戦略だ,とか色々言われているけど,一体いつから恵方巻きとか太巻きとかが節分に食べられるようになったのか気になる.
というわけで,クックパッドとNIIによって提供されているクックパッドレシピデータを使って調べてみた.データは1998年から2014年まである.

とりあえず,レシピのタイトルに「恵方巻き」「太巻き」が入っているレシピを検索し,いつ投稿されたのかを調べる.ただし,全体の投稿数と比較しないと何とも言えないので,
「一日に投稿されたレシピの内,恵方巻き・太巻きが含まれている割合」
を各日ごとに検出してみた.



ちゃんとピークは2月ごとに訪れているらしい.
んでもって,最初のピークは2003年2月.

う~ん,2003年より前はクックパッドのデータにどれほど統計的意味があるか分からないレベルなので,何とも言えないかな.
ただ,別途調べた「雑煮」だと2000年からピークが出ているので,それに比べるとやはり節分に太巻きという風習は2000年代初頭はそれほどメジャーなイベントでは無かったのかも知れない.

なお,恵方巻のみだと2006年が初出.恵方巻きという言葉自体は2006年くらいから使われ始めたもののようだ.
それまでは一件もレシピがないみたいだけど、誰がこの名前つけたんだろう?




というわけで,思ったより太巻きを食べる風習というのは昔からあったみたいだけど,恵方巻きと言う言葉は最近メジャーになったものらしいということが分かりました.

クックパッドのデータ,近年の食文化の変化を見るには適しているのかも.
論文にはなりづらそうだけど.