TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

2018-01-01から1年間の記事一覧

Aperyでやねうら王のPackedSfenValueを読み込む

世界コンピュータ将棋選手権のアピール文章にも書いたが、マルチGPUで動かす場合、GPUごとに異なるモデルをロードすることで、モデルごとに誤る確率が独立とすると複数モデルが同時に誤る確率は、単一のモデルを使用する場合より低くなるため精度の向上が期…

将棋AIの進捗 その22(探索と評価の直列化)

前回、ねね将棋が世界コンピュータ将棋選手権で高い探索速度を出していたので、バリューの計算中に末端ノードから新しく探索を行う方法で簡易な実装をして実験を行った。 しかし、末端ノードから新しく探索を始めると、新しく始めた探索のバリューの計算され…

将棋AIの進捗 その21(探索の深さ)

dlshogiでは、MCTSの末端ノードでバリューを計算し、その値をバックアップしているが、GPUでバリューの計算が終わるまで待機している。 バリューの計算が終わる前に次の探索を始めると、ノードにバーチャルロスのみが反映された状態で、勝敗の推定値が反映さ…

第28回世界コンピュータ将棋選手権 出場結果

第28回世界コンピュータ将棋選手権に参加してきました。dlshogiは、一次予選に7位で通過しましたが、二次予選では1勝8敗で24チーム中最下位という結果でした。dlshogiは、今回注目されていたCrazy Shogiと同じくモンテカルロ木探索とディープラーニングを組…

dlshogi(wcsc28版)のビルド済みファイル公開

dlshogiの第28回世界コンピュータ将棋選手権バージョンのビルド済みファイルを公開しました。第5回将棋電王トーナメントバージョンは、Chainerの環境構築が必要でしたが、USIエンジンの実行のみであれば不要になっています。 CUDA、cuDNNはライセンス上の問…

USIエンジンをAWSのWindowsインスタンスで実行する

以前にAWSのWindowsサーバで、GPUを増やしても探索速度を上げられなかったということを書きましたが、後からバグがあって1個のGPUしか使っていなかったがわかりました。 バグを修正したバージョンで、p3.8xlargeで4GPUを使うと自宅のGPU2枚のPCより少し探索…

AWSのWindows AMIにsshで接続する

AWSのWindows AMIで作成したインスタンスにsshで接続する方法についてです。使用したAMIは、「Windows_Server-2016-English-Deep-Learning-2018.03.24 (ami-4f168837)」です。WindowsでSSHサーバを構築する方法はいくつかありますが、マイクロソフトがオープ…

将棋AIの進捗 その20(自己対局による強化学習)

自己対局による強化学習を続けています。 現在、1サイクルあたり500万局を自己対局で生成するサイクルを17サイクル実行したところです。 教師ありでelmoで深さ8で生成した4.9億局面を事前学習したモデルを初期モデルとしています。 初期モデルは、収束前のLe…

Chainer4系がAnaconda3 4.2.0で動かない件

4/17にChainer 4.0.0がリリースされましたが、Anaconda3 4.2.0では以下のエラーがでて動かなくなっていました。 >>> import chainer Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Anaconda3\lib\site-packages\chainer\__init__.py", </module></stdin>…

【告知】技術書典4

4/22(日)に秋葉原で開催される技術書典4で、「ディープラーニングを使った将棋AIの作り方2~大規模学習、高速化編~」という本を出します。 場所は「き15」になります。書籍「将棋AIで学ぶディープラーニング」の第13章の補足的な内容です。 頒布は紙の本の…

将棋AIの進捗 その19(初期局面集)

自己対局による強化学習を行う際に、対局の開始局面には、初期局面集を使用している。 AlphaZeroでは、固定手数まではノイズを加えルートノードの訪問回数に応じた確率で手を選択することで局面の多様性を確保している。 しかし、この方法ではモデルに依存し…

将棋AIの進捗 その18(スケーラビリティ)

AWSのp3.8xlargeインスタンスを試験的に借りてGPUを増やした場合の性能を測定しました。 Linuxだとマルチスレッドの性能がでないので、OSはWindowsです。p3.8xlargeのマシンスペックは以下の通りです。 Tesla V100 GPUs 4 vCPUs 32 Main Memory 244GiB 各GPU…

LinuxとWindowsのマルチスレッド性能

将棋AIをAWSで動かそうとLinux対応しましたが、Linuxでマルチスレッドの性能がでないため、いろいろ実験してみました。検証している将棋AIではGPUの計算が終わったら、待機中の複数の探索スレッドに通知する処理を行っています。 それを、以下のような処理で…

将棋AIの進捗 その17(AWS対応を検討)

世界コンピュータ選手権の参加者のマシンスペックをみると、マシンスペック高すぎです( ゚Д゚)GPUを2枚詰んだ個人のPCで参加しようと思っていましたが、GPU8枚とかで来られたらモデルと探索の性能ではどうにもならなそうです。 モンテカルロ木探索は並列化の効…

将棋AIの進捗 その16(マルチGPU)

将棋AIをChainerを使用した実装からcuDNNを使用した実装に変更できたので、マルチGPUでの性能を測定した。 Chainerを使用した場合 Python経由でChainerを使用しているPythonのGIL機構によってマルチスレッドの性能に制限がある。 Chainerを使用した場合の、…

将棋AIの進捗 その15(cuDNNを使用)

モデルの学習にディープラーニングフレームワークのChainerを使用していますが、対局時にChainerで推論を行うと、Python経由で呼び出すためマルチGPUで動かす際、Python経由だとGILによってマルチスレッドの性能が出なくなる。 また、実行環境にPythonが必要…

Chainerで学習したモデルを使ってcuDNNで推論する(マルチGPU)

前回実装した、Chainerで学習したモデルを使用してcuDNNで推論するコードを、マルチGPUで並列に動作するようにした。cuDNNをマルチスレッドで、スレッドに別々のGPUを割り当てて使用する場合、それぞれのスレッドでcudaSetDevice()を呼び出し、GPU IDを指定…

Chainerで学習したモデルを使ってcuDNNで推論する(ResNet)

前回実装した、Chainerで学習したモデルを使用してcuDNNで推論するコードを、Residual Network(ResNet)構成にした。推論時には、テンソルの加算を行うだけで特に難しいことはない。 ネットワーク定義(Chainer) ResNetは1ブロックのみで、ブロック内の畳み込…

Chainerで学習したモデルを使ってcuDNNで推論する(dropout)

前回実装した、Chainerで学習したモデルを使用してcuDNNで推論するコードに、dropoutを追加した。dropoutは学習時のみ処理を行うため、推論時には何もしなくてよい。 つまり、推論のネットワーク定義にはdropoutは必要ない。 学習用ネットワーク定義 学習用…

Chainerで学習したモデルを使ってcuDNNで推論する(BatchNormalization)

前回実装した、Chainerで学習したモデルを使用してcuDNNで推論するコードに、BatchNormalizationを追加した。BatchNormalizationも、cuDNNにAPIが用意されているため、簡単に使用できる。 ネットワーク定義(Chainer) まず、Chainerで学習するモデルにBatchNo…

Chainerで学習したモデルを使ってcuDNNで推論する(時間計測)

昨日の日記の続きです。C++のコードでcuDNNを直接使用して推論を行った場合と、Chainerを使用して推論を行った場合の実行時間の比較を行った。 測定条件 MNISTのtest set images(1000画像)のすべてを推論するのに要する時間を測定 ミニバッチサイズは、100 …

Chainerで学習したモデルを使ってcuDNNで推論する

ディープラーニングを使ったモデルを学習する際、ディープラーニングフレームワークを使うと使わないとでは生産性に大きな差がある。 多少のオーバーヘッドは許容して、ディープラーニングフレームワークを使う方がトータルでメリットがあると思う。しかし、…

将棋AIの進捗 その14(自己対局による強化学習)

自己対局による強化学習の検証をはじめた。強化学習の手法は、以前の日記で書いた通りで、Alpha Zeroの手法を参考にして、1手800シミュレーションで自己対局を行う。自己対局→学習のサイクルを繰り返してモデルを成長させる。 1回のサイクルで、どれだけの自…

【書籍】将棋AIで学ぶディープラーニング

「将棋AIで学ぶディープラーニング」という本を出版します。昨年10月に技術書典3で「ディープラーニングを使った将棋AIの作り方」という技術系同人誌を出したことをきっかけに書籍化のお話をいただきました。技術書典で出した本は、方策ネットワークを使った…

【Tips】Visual Studio 2015で保存時に改行コードをLFにする

Visual Studioで開発してLinuxでもビルドや実行できるソースにしようとすると、改行コードをLFにそろえたい。Visual Studio 2015では保存時の改行コードを設定できる。 https://msdn.microsoft.com/ja-jp/library/dd409797.aspxしかし、いったんLFにして保存…

MCTSnetの論文を読む

DeepMindからarXivに投稿された論文「Learning to Search with MCTSnets」についてです。Redditの投稿が簡潔に要約しています。 Learning to Search with MCTSnets : cbadukAlphaGo ZeroのPUCTアルゴリズムは、PolicyとValueと訪問回数を使って、固定の計算…

将棋AIの進捗 その13(自己対局のマルチGPU対応 その2)

前回マルチスレッドで2つのCPUを使用して自己対局を行うプログラムを作成したが、局面生成の速度はGPU1つの場合と変わらなかった。 ChainerをPython経由で使用しているため、GILのために効率が上がらなかったためと考えている。そこで、プロセスを分けてマル…

TensorFlowをWindowsでGPU有効でビルドしてC++で使う

TensorFlowは公式でWindowsに対応しているが、C++のAPIはLinuxとMacでしかサポートされていない。 https://www.tensorflow.org/install/install_cdllをダウンロードして、defを作成してリンクする方法もあるようだが、CPUでしか使えない。 visual studioでte…

将棋AIの進捗 その12(自己対局のマルチGPU対応)

自己対局のプログラムをマルチGPUに対応させました。処理方式は、対局プログラムのマルチGPU対応とほとんど同じです。マルチGPU対応により局面生成の速度がどれくらいあがるか測定しました。 測定条件 シングルGPUは、TitanV 1枚。200スレッドで対局。 マル…

C++でemplace_backを使う際の注意点

C++

STLのvectorのemplace_backを使うと要素の追加時にコンストラクタで初期化できる。しかし、コンストラクタとデストラクタで副作用のある処理をしている場合、注意が必要だ。 以下のようなコードはうまく動作しない。 #include <iostream> #include <vector> using namespace st</vector></iostream>…