ChainerXについては既存の記事を見てください。
Chainerの新しいバックエンドになり、CPUの影響が大きい学習が高速化されます。
現在、ChainerXはマージされたばっかりというのもあり、Linuxでしか動作しません。
ですが世の中の全てのユーザーの環境がLinuxというわけでもありません。
Windowsの人もいます。ということで、WindowsでChainerXを使用してみようとしました。
公式のリポジトリのバージョンでは動作しないので、フォークして改造しています。
いずれ、公式にPRを送る予定です。
PRを送りました。
公式にマージされました。
公式のリポジトリでも動作しますが、下記のリポジトリでWindows対応を開発しています。
ここからクローンしてください。
コンパイラにはVisualStudio2017の標準のコンパイラではコンパイルできなかったのでLLVMを使用しています。
LLVMの64bitを使用しています。下記のリンクからインストールするとVisualStudioでもLLVMが選択できるようになります。
クローンしたchainerと同じ階層にディレクトリを作成し、cmakeでコンパイルします。
CUDAを使用しない場合はOFFにしてください。
cmake -G"Visual Studio 15 2017 Win64" -T llvm -D CHAINERX_BUILD_CUDA=ON -D DEFAULT_CHAINERX_ENA
BLE_BLAS=OFF -D CHAINERX_BUILD_PYTHON=ON ..\chainer\chainerx_cc\
VisualStudioのプロジェクトが生成されるのでReleaseでコンパイルします。
コンパイルすると、chainerx\python\Release
に _core.pyd
が生成されます。
インストールですが、そのあたりの変更がこの記事を書くまでに間に合わなかったので手動で使用できるようにします。
setup.pyに対応しました。これらのことをしなくともCHAINERX_BUILD_CUDAとCHAINER_BUILD_CHAINERXを環境変数を設定してsetup.pyを実行すればインストールされます。
chainerのリポジトリの
chainer
chainermn
chainerx
これらをChainerを使用するディレクトリにコピーします。_core.pyd
は chainerxのディレクトリの中にコピーします。
適当にChainerXを使用するコードを書きます。
import chainerx as chx
x = chx.array([[0, 1, 2], [3, 4, 5]], dtype=chx.float32)
print(x.shape)
print(x.dtype)
print(x.device)
動きました!
CUDAを有効にしてコンパイルすれば、CUDAも使用できます。
import chainerx as chx
x = chx.array([[0, 1, 2], [3, 4, 5]], dtype=chx.float32, device='cuda:0')
print(x.shape)
print(x.dtype)
print(x.device)
まだWindows版は個人的に開発中ということもあり、
実は動かないケースもあると思いますがその時は連絡していただけると助かります。
早めに公式にPRを送る予定です。
公式にPRを送りました。
OS固有の問題以外はテストも通っていますが、不具合が発生する場合は連絡して抱けると助かります。