cudamatをWindowsでビルド

  • 投稿日:
  • by

cudamatのWindows対応版というのがあるんです。

cudamat-INSTALL.md at master · surban-cudamat · GitHub

    1. Run pip install --user -e .

CUDA使えるグラボのマシンはCUDA SDK6.5/VisualStudiwo2013の環境なので、だめもとで試してみました。

Obtaining file:///F:/repogit/cudamat-win

Complete output from command python setup.py egg_info:

Microsoft(R) Program Maintenance Utility Version 12.00.21005.1

Copyright (C) Microsoft Corporation. All rights reserved.

nvcc -O --ptxas-options=-v -o libcudamat.dll --shared cudamat.cu cudamat

_kernels.cu -lcublas

NMAKE : fatal error U1077: '"C:\Program Files\NVIDIA GPU Computing Toolkit\C

UDA\v6.5\bin\nvcc.EXE"' : リターン コード '0xc0000005'

Stop.

----------------------------------------

Command "python setup.py egg_info" failed with error code 2 in F:\repogit\cudama

t-win\

結果はAVでnvccが落ちてnmakeが失敗するという、取り付く島もないものでした。

ここでいろいろググってみたんですが、冷静になって、makefileを眺めてみると・・・

@Makefile.win

cudamat: cudamat.cu cudamat.cuh cudamat_kernels.cu cudamat_kernels.cuh learn.cu learn_kernels.cu learn_kernels.cuh
    nvcc -O --ptxas-options=-v -o libcudamat.dll --shared cudamat.cu cudamat_kernels.cu -lcublas
    nvcc -O --ptxas-options=-v -o libcudalearn.dll --shared learn.cu learn_kernels.cu -lcublas

clean:
    del *.linkinfo *.pyc *.so

えらくさっぱりしています。で、

nvcc -O --ptxas-options=-v -o libcudamat.dll --shared cudamat.cu cudamat_kernels.cu -lcublas

を直接実行すると、エラーが発生しません(笑

さっきググりまくって見つけておいたリンクがビンゴのようでした。

Makefiles and nvcc ★

<https://devtalk.nvidia.com/default/topic/384483/makefiles-and-nvcc/>

For the moment, I fixed this problem in this way: I created a .bat script that launches the NVCC. Such script is called by Nmake without problems.

この人は、mingwのmakeでOKなのにnmakeでNGという切ない状況だったようですね。

エスパー目線で考えるとnmakeが子プロセス起動時に継承するフラグがnvccの都合の悪いものなのかもしれません。一瞬、セキュリティ云々が頭をよぎりましたが、バッチを介するだけで回避できる問題なので、ただ単にnVIDIAの動作確認不足のような気がします。

 

ふと思い出しました。以前CUDA SDK7.5でnvccを使おうとしたらいきなりAVで落ちたために6.5を使う羽目になったことです。nVIDIAに期待しすぎですね・・・

 

さて、上記フォーラムの人は、なにやら凝ったバッチを書いていますが、バッチでコマンドをラップするだけなら、以下のバッチで充分です。

@nvcc_compile.bat

echo NVCC executing...
nvcc %*
echo ..NVCC done

で、makefile.winのnvccをnvcc_compileに書き換えて終わりです。

 

バージョン組み合わせ:

・CUDA SDK6.5

・GPU GTX750Ti

・VisualStudiwo2013

・numpy-1.11.0+mkl-cp27-cp27m-win_amd64.whl(いわゆる非公式版)

・Python2.7(python-2.7.amd64.msi)

・Windows8.1

 

この問題、何年も前に一度トライした気がします。

今回はあっさり解決できました。やりたかったことは以下の人と同じことです。

JuliusのDNNモデルをCUDAで動かす

<http://ch.nicovideo.jp/yoshizo/blomaga/ar788088>

 

やりたかったことはできましたが、i7マシンのCPUと比べると、CUDA版が目覚ましく軽くなるわけでもありませんでした。

なぜならi7マシンにとっては特徴量抽出よりも音声認識の方が重いようでしたし、もともと負荷が上がらないのです。

しかもやや残念なことに、数十分程度の連続運転で、CUDA版は落ちてしまいました。

とりあえずCPU版で進めますかね。