CUDA
GeForce RTX 2080 Tiを使って、ニューラルネットワークの推論でTensorCoreが使えるかを試してみた。TitanVでは、TensorCoreを使うことで、将棋AIの推論が2.57倍高速になった。 2080 Tiにも、TensorCoreが544個搭載されており、TitanVの640個より少ないが、CU…
TitanVを使って、FP32からFP16にするとどれくらい推論が速くなるか試してみた。 また、Geforce 1080 Tiなどのゲーム用のGPUにはFP16のアクセラレータが搭載されていないが、FP16の演算は可能なため、FP32と速度が変わらなければメモリ転送の効率が上がる分だ…
将棋AIをChainerを使用した実装からcuDNNを使用した実装に変更できたので、マルチGPUでの性能を測定した。 Chainerを使用した場合 Python経由でChainerを使用しているPythonのGIL機構によってマルチスレッドの性能に制限がある。 Chainerを使用した場合の、…
モデルの学習にディープラーニングフレームワークのChainerを使用していますが、対局時にChainerで推論を行うと、Python経由で呼び出すためマルチGPUで動かす際、Python経由だとGILによってマルチスレッドの性能が出なくなる。 また、実行環境にPythonが必要…
前回実装した、Chainerで学習したモデルを使用してcuDNNで推論するコードを、マルチGPUで並列に動作するようにした。cuDNNをマルチスレッドで、スレッドに別々のGPUを割り当てて使用する場合、それぞれのスレッドでcudaSetDevice()を呼び出し、GPU IDを指定…
前回実装した、Chainerで学習したモデルを使用してcuDNNで推論するコードを、Residual Network(ResNet)構成にした。推論時には、テンソルの加算を行うだけで特に難しいことはない。 ネットワーク定義(Chainer) ResNetは1ブロックのみで、ブロック内の畳み込…
前回実装した、Chainerで学習したモデルを使用してcuDNNで推論するコードに、dropoutを追加した。dropoutは学習時のみ処理を行うため、推論時には何もしなくてよい。 つまり、推論のネットワーク定義にはdropoutは必要ない。 学習用ネットワーク定義 学習用…
前回実装した、Chainerで学習したモデルを使用してcuDNNで推論するコードに、BatchNormalizationを追加した。BatchNormalizationも、cuDNNにAPIが用意されているため、簡単に使用できる。 ネットワーク定義(Chainer) まず、Chainerで学習するモデルにBatchNo…
昨日の日記の続きです。C++のコードでcuDNNを直接使用して推論を行った場合と、Chainerを使用して推論を行った場合の実行時間の比較を行った。 測定条件 MNISTのtest set images(1000画像)のすべてを推論するのに要する時間を測定 ミニバッチサイズは、100 …
GPUが2枚になったので、ChainerでマルチGPUによる学習を試してみた。MNISTサンプルを使って、実行時間を測定した。 測定条件 CUDA v9.0 cuDNN 7.0.5 ChainerのGitHubレポジトリのexamples/mnistを使用 単体の実行時間はtrain_mnist.pyの実行時間 マルチGPUの…
Chainer v3(cupy v2)がCUDA9に対応したので、バージョンアップしました。 Chainer v3はcuDNNも最新のバージョン7に対応しているので、cuDNNも7にしました。インストール手順は、以前のバージョンと同様です。chainerをバージョンアップする際は、chainerとcu…
2017/2/18追記 1.0正式版がリリースされましたので、この記事の内容は古くなっています。正式版のインストールについてこちらの日記に書きました。先日TensorFlowがWindowsでビルドできるようになったという記事を書いたが、公式からバイナリのインストーラ…
GPUをGeForce GTX 1080に交換したので、CUDAを8.0にバージョンアップした。CUDA7.5でインストールしたChainerが動かなくなったため、CUDA 8.0に対応させるため、再インストールを行った。基本的に、CUDA7.5のときの手順と同じだが、環境変数INCLUDEの設定が…
※公式からWindowsバイナリが提供されたため、この記事の内容はほとんどの人には不要です。GPUをGeForce 1080に交換したので、前回の日記でWindowsでGPUを有効にしてビルドしたTensorFlowを動かしてみた。結果は以下の通り、GPUで実行できた。 tensorflow\mod…
※公式からWindowsバイナリが提供されたため、この記事の内容はほとんどの人には不要です。TensorFlowはビルドツールのBazelがWindowsに対応していないため、Windowsではビルドができなかった。Bash on Windowsを導入することで、Ubuntuのパッケージをバイナ…
※2017/3/15追記 Windows版のリポジトリでビルド済みのバイナリが配布されています。自分でビルドしないでもそちらのバイナリを使用することをお勧めします。 ビルド済みのバイナリのインストール方法とサンプルの実行方法はこちらの日記を参照ください。Wind…
前回の日記で実装した畳み込みのコードに活性化関数を追加しました。活性化関数は、cudnnCreateActivationDescriptorでハンドルを作成し、cudnnSetActivationDescriptorでどの関数を使用するか選択し、cudnnActivationForwardで実行できます。活性化関数とし…
前回の日記でcuDNNで実装した畳み込みにbiasを追加した。畳み込みのバイアスは、フィルターごとに加算する。バイアスは、[1][フィルター数][1][1]の4次元配列となる。cudnnCreateTensorDescriptorで、[1][フィルター数][1][1]の4次元配列を定義する。畳み込…
前回の日記で書いた方法でChainerのコードを調べつつ、WindowsでcuDNNを使用して畳み込みを行うことができたので、方法を示しておく。 使用バージョン Windows 10 CUDA7.5 cuDNN v5 Visual Studio 2015 cuDNN v5を使用するには、CUDA7.5が必要になる。 CUDA7…
SL policy networkをChainerを使って学習した結果を、囲碁プログラムに組み込む際、C++のプログラムからDCNNの実行のためにpythonプログラムを呼ぶとオーバーヘッドが大きい。 できれば、DCNNをC++から実行したい。 順伝播のみであれば、ディープラーニング…