電竜戦の予行4

電竜戦の予行4が行われました。

新規棋戦ですので本番でトラブルがないように念入りな準備が必要ですね。

 

golan.sakura.ne.jp

 

今回は前回予行3と異なり,本番の二日目の手順が滞りなく行えるかと言うのが主題のテストでした。二日目は初日の結果に基づきA級,B級とクラス分けされたリーグをそれぞれ戦います。同サーバで同時開催なので手続き的には結構ややこしいことがお分かり頂けると思います。

【A級】第1回世界将棋AI 電竜戦予行演習4 勝敗表

【B級】第1回コンピュータ将棋オンライン 電竜戦予行演習4 勝敗表

 

結果は対戦自体は概ね順調でしたが,今回発覚したのは総当たりのA級リーグ戦で例えば水匠が常に先手番であるなど手番が公平になっていないのではないかと言う疑惑が発生した点ですね。本番までにカツ丼さんが確認してくれると思います。

 

ところで,今回うちで準備したソフトは三つです。

・二番絞りプレミアム

二番絞りシリーズについて - 48's diary

今回は前回のプレミアムに教師データ二番煎じの禁を破り短期間ですが強化学習を加えました。もはや何が二番絞りなのかといったところですが最近はこれを弄るのが一番楽しいです。途中で失敗した試行錯誤のメモ書きは資産だと思っています。

 

・shotgun_sdt5

電竜戦基準ソフト - 48's diary

基準ソフトとして投入しました。一部完走の後,二部でPCごと落ちてしまったようです。floodgateでのリハーサルは丸二日完走していたのに残念です。詳細の究明はこれから行います。再稼働したのはノートPCですのでそこからは若干弱かったと思います。

 

地ビール

これは以前からのGo言語フルスクラッチのエンジンです。前回ノートPCで不安定回線のテストとして投入されましたが,今回は安定度を考えRyzenのデスクトップ機を用いました。なぜか極稀にエンジンが突然止まることがあったため二部からは前回と同じノートPCに差し替えました。これも原因究明はこれからです。(といっても優先度は低い)

 

気づいた人もいるかもしれません。

レーティング見込みが何となく当たるようになってきました。超能力でしょうか。偶然でしょうか。

---

追記:

二部は前回に続きほっしー選手圧巻の徹夜将棋です。棋譜は変態じみてます。

第1回世界将棋AI 電竜戦予行演習4 勝敗表

---

追記2:

shotgun_sdt5(2017年電王トーナメント準優勝)は今となっては凡庸な力量のようです。3年で皆強くなっていますね。(但し,きふわらべを除く)

二部総当たりでAobaZeroに一発入れてます。AobaZeroは飛車を詰まされると思っていなかったのではないでしょうか。こういったところはMCTSよりαβ探索の方が読み抜けがないですね。

第1回電竜戦 棋譜中継(単一棋譜)

 ---

追記3:

本番本気出すんでしょとか思われてますが,今回の電竜戦は運営メインで働きます。

電竜戦本戦も二番絞りの延長かなぁ。ぼちぼち決めないと・・・

 

 

AobaZeroで遊ぼう18(バージョン1.5リリース記念編2)

前回に続きます。

bleu48.hatenablog.com

 

前回に追記でもいいのですが長いので続編は別ページにします。

前回「OpenCL のコードの効率化」と書いて雑に「速い」とまとめましたが具体的に計測していきます。

 

i7-8550U

第8世代インテルCore i7(コードネームKaby Lake R)の省電力CPUです。

公式1.4では一手30秒(p800にて)と雑な計測をしていたものです。

マルチスレッドまで対応の自前ビルド(以下自家版)では50nps程度まで出ていました。p800だと一手16秒程度です。

これが公式1.5では最速100nps近くまで出ます。注意点は消費電力と熱でACアダプタなしでは恐らくすぐに省電力モードへ移行しますし,熱もPCの設計次第ではこの速度を維持できなくなります。

一般的にGPUは描画に使うもので全力を出し切ることは普通考えられないのですが,本件のような使い方をすると一般的な設計点とは異なります。壊さないように気を付けて下さい。

 

GTX 1050Ti

一世代前のDELL G3ゲーミングノート付属のGPUです。

公式1.4では一手5秒(p800にて)と雑な計測をしていたものです。

自家版では500nps程度まで出ていました。p800だと当然一手2秒未満です。

これが公式1.5では900~1000nps近くまで出ます。

 

RTX 2080Ti

言わずと知れたNVIDIAのハイエンドビデオカードです。パーソナルユースであれば最高峰と言ってよかったと思います。(過去形なのはNVIDIAの新製品がリリースされたばかりであるため)

公式1.4では一手2秒(p800にて)と雑な計測をしていたものです。

自家版では2500nps程度まで出ていました。p800だと当然一手1秒未満です。

これが公式1.5では8000~9000nps近くまで出ます。圧巻ですね。

設定は手動で入れた方がよく「autousi.cfg」で推奨されている「-b 28 -t 85」で上記の値です。ちなみにデフォルト値では5000nps程度でしたので少々手を入れる価値があることが分かります。

 

LesserKaiとは計測用の序盤数手の対戦のつもりだったのですが離席している間に終局まで指していました。一手5秒です。

勝ちは勝ちなんでしょうけど,なんと言うか非人間的な勝ち方するようです。 

  

様々なソフト相手にどのくらいの対戦結果になるのかは今後の計測です。

そういえば今晩AobaZeroも電竜戦予行4に参戦されるとのことですので,お暇があればご堪能下さい。

 

golan.sakura.ne.jp

---

追記:

AobaZero教師データを流用させて頂いている我が家の二番絞りシリーズが似た風味を出してきているので痛し痒しな気分です。もちろん電竜戦予行4に出ます。

AobaZeroで遊ぼう17(バージョン1.5リリース記念編)

全国300万AobaZeroファンの皆様1年3カ月ぶり待望の最新公式リリースです。

 

github.com

 

たまりにたまった新機能が満載ですね。

実のところdevelop版で長らく温められていたマルチスレッドなどの機能は既に私の前記事でも紹介してありフォーク先の私のところでバイナリ配布してありました。

bleu48.hatenablog.com

github.com

 

マルチスレッドの部分だけで環境差は相当ありますが3倍程度の速度向上がありました。

今回の1.5ではリリースメッセージにも「OpenCL のコードの効率化」とありますようにニューラルネットワーク計算の部分で相当苦労されて効率化されたようです。ざっと計測した感じでは2倍程度は出ている雰囲気です。実に素晴らしい改善です。

公式1.4ではマルチスレッド非対応でしたので公式バイナリ派の人は加えて劇的な高速化を体験できると思います。公式リリース文ではマルチスレッド部分と合わせて3~10倍の高速化と表現されています。

囲碁のKataGoなどもOpenCL版が相当上手に作られておりCUDA版と大きく遜色がないような状況です。私は長らく最適化するならCUDA一択と考えておりましたが,限界ギリギリを狙うので無ければOpenCLでいいのかもしれません。ただ,MCTSの並列化効率は探索枝がある程度広がった状態でないと上がって来ないので極端な短時間戦には不向きなのは明白です。

 

また,今回のバージョンは自動最適化機能も相当に工夫され実装されていますが,やはり最終的には手動で試行錯誤して最も速度がでるパラメータを求めた方が良いように思います。手持ちのPCで最悪のケースはインテルCPU+NVIDIA GPUのノートPCの場合で何故かインテルCPUの内臓GPUOpenCLが動かされていました。(もちろんGPUを指定すると問題なく動きます)

今回マルチGPUも対応されていますのでレアな環境をお持ちの方は是非試して使用感・ベンチマークなど報告されると良いでしょう。

 

また,CPU版もアップデートされておりこちらもマルチスレッド対応でCPUリソースを自動的に認識し限界まで使ってくれます。手持ちのモバイルPCだとスレッド数をコア数まで減らした場合でもほぼ影響がなかったのでハイパースレッディングはあまり有効ではないようです。熱的にもコア数の方が良いかと思います。

また,教師データである棋譜生成モードでは別のバイナリが動いて効率よく棋譜生成がされるようですがCPUでは遅いのであまりお勧めしません。(GPUの方が桁違いに速いという意味です)

 

個人的に実装していたMultiPV(単に複数候補を表示するだけ)や時間制御の部分などは当然公式リリースにはありませんが,ShogiGUI対応は喜ばれたようでプルリクエストは飛ばしていませんが今回の公式バイナリでも局面検討に使えるようになっています。是非お試しください。性能上は将棋所での検討の方が出るはずですが好みのGUIを使えるのは嬉しいですね。

---

追記:

最近floodgate上でのAobaZero p800がほぼノータイム指しだったのは今回の高速化が取り込まれたバイナリで実行されていたと思われます。じっくり時間を使えばどこまで強くなるのでしょうか。楽しみですね。

電竜戦予行2では圧巻のパフォーマンスでした。

第1回コンピュータ将棋オンライン 電竜戦予行演習2 勝敗表

電竜戦(本戦)にはプルパワーで参加されると期待しております。

 

電竜戦基準ソフト

コンピュータ将棋界隈に限らずAIではベンチマークというものがあります。

画像認識でも定型のデータに対して何割とか計算速度で何秒とかですね。

コンピュータ将棋界隈だと自作エンジンでの最初の目標がLesserKaiでしょう。

 

floodgateにおいては古くはGPS将棋がベンチマークでした。随分前から今まではgikou2がベンチマークとなっています。レーティングはgps_normalが2150となっていた初期から今はgikou2_1cが3300となっております。(Ryzenの1スレッドと聞いています。)

 

基準が上がったのは対戦相手との関係です。自分より強い相手と弱い相手との対戦結果がレーティング計測には必要ですがこれらはレーティングが近い方が正確な値がでます。極端に弱くて全敗したり強くて全勝してもレーティングが出ないのは明白ですが,それに準ずる1勝や1敗も同様に信頼性のあるデータとは言い難いですね。

そのため例えば,AobaZeroプロジェクトでは計測精度の保障のためにelmoおよびKristallweizenの探索制限をつけたものを投入し近いレーティングの対象としています。

 

今回,第一回電竜戦においては基準ソフトを設置することになりました。

運営側として第5回電王トーナメント準優勝ソフトshotgunを投入します。このソフトは私の習作でもありますが,名人を打ち破ったPonanzaより上位のソフトでもあります。ハードウェアも当時と同じものを用意することにしております。

もちろん万一入賞しても受賞対象外となりますが,最新ソフト相手にどの程度戦えるのか比較対象として楽しみにしておいて下さい。

 

ちなみに2017年のshotgunは2コアのノートPCで2018年優勝HefeweizenのAWSクラスタに勝ったことがあります。(それも選手権の早朝に)

  

当時軽い眩暈がしました。我ながら怖い子ですね。

開発途中のモデルではfloodgateでレーティング3500程度と記憶しています。

USIプロトコルのscoreについて

USIプロトコルのscoreについて有効になるものとそうでないものの差異について

将棋所の場合はどうかと問い合わせたことがあった。

以下のリンク1091番である。

将棋所のサポート掲示板

 

USIプロトコルだと読み筋(pv)・評価値(score)の類はinfoの行で随時表示される。

局面検討時はそれで最新のものを採用すればいいと思うが,実のところ指し手の決定はbestmoveの行で行われるためにinfoのどの行の評価値がこのbestmoveに当たるかは確定的ではない。

将棋所では読み筋毎に評価値を内部的に確保してbestmoveと一致したものの最新値を使っているそうである。また,multipvの場合はmultipvが含まれる行を優先されるとのことであった。読み筋のない評価値は無視されるとのことである。

 

独自の混合探索を加えたものでグラフ表示が妙なことになっているのが見つかったので修正しないといけないかもしれない。

選手権では送っていない値だが,電竜戦では聴衆にリアルタイムで表示されるので確認しておかないとね。

 

 

pytorch/xlaで遊んでみた(DevFest Shikoku 2020メモ書き)

DevFest Shikoku 2020のもくもく会でリアルタイムにメモ書きしたものである。

 

類似行為を以前一回やった気もするのだがそのときはPytorch側がNightlyだったかもしれない。

今はPyTorchも1.6となりXLAも正式対応扱いだと思うので安心して使うといい。

 

で,デバイスは何かと言えば貧乏人の無料ツールGoogle ColabのTPUですね。

これを使うためにXLAに手を出すと言ってもいい。

知らない人に簡単に説明すると12時間無料で使えるクラウド上のアクセラレータである。(詳しくはググれ)

 

以前やった時よりドキュメント類が整っている。

ずばり以下を参照すれば(コードが読める人は)ほぼ終わる。

https://colab.research.google.com/github/pytorch/xla/blob/master/contrib/colab/getting-started.ipynb

 

初期設定で重要な三行は以下

import os
assert os.environ['COLAB_TPU_ADDR']

!pip install cloud-tpu-client==0.10 https://storage.googleapis.com/tpu-pytorch/wheels/torch_xla-1.6-cp36-cp36m-linux_x86_64.whl

一行目二行目はColabの環境変数の設定。

三行目がtorch_xlaのインストールである。

 

これが終われば以下のリンクのドキュメント通り使えるはずである。

PyTorch on XLA Devices — PyTorch/XLA master documentation

ウチではimport部分で以下のような警告が出たが最終的には通ったようである。

WARNING:root:Waiting for TPU to be start up with version pytorch-1.6...
WARNING:root:Waiting for TPU to be start up with version pytorch-1.6...
WARNING:root:Waiting for TPU to be start up with version pytorch-1.6...
WARNING:root:TPU has started up successfully with version pytorch-1.6

 

その他,学習部が概ね動きそうなんだけど教師データをColab上にアップロードするのが時間的に無理かな。 

予定表(ハードウェアリリースに関して)

ちょっと多いので整理しておく。

 

NVIDIA DGX A100既発売

A100搭載クラウドAWS,GCP,MS共に準備中)

GeForce RTX3080, 3090既発売

 

10月28日

Radeon RX 6000発表

RDNA2のPC用GPU

 

10月29日

GeForce RTX3070発売

 

11月5日

Zen3発売

Ryzen 9 5950X, Ryzen 9 5900X, Ryzen 7 5800X, Ryzen 5 5600X

 

11月10日

XBOX Series X発売

zen2 8コア16スレ

RDNA2のGPU(Scarlett)

 

11月12日

PS5発売

zen2 8コア16スレ

RDNA2のGPU(Oberon)

 

Zen3 Threadripper未定

 

インテルは現状魅力的なハイエンド品 がないので省略

 

予算がないのでどれか1個か2個だろうと算段中。