持続可能な開発

タイトルはSDGsのことじゃないです。

 

将棋ソフト開発費です。

今のところ将棋界隈の開発は2017年に最初に参加した第5回電王トーナメントの賞金百万円をはじめ概ねそれで賄っています。5年平均三十万円近くになります。今年も賞金の対象でした。

出ていくお金もその範囲でPCを買ったり,大会当日クラウドを借りたりしています。

この界隈で異例の黒字勢と分類されます。

 

勝つために身銭をどの程度切るかという話題がありますが,将棋ソフト開発をする前も数年に一度PCを買い替える程度ですからこれを2倍3倍にしたところで上記の足しとして僅かな額です。

職場ではもう少しマシで毎年のようにPCを買い替えたりしますが,一般的に売られていないようなものを購入するほどの資金は今のところありません。具体的に言うとNVIDIAのA100ですね。HEROZには72台あるそうで羨ましい限りですね。

スレッドリッパー3990Xが欲しかった頃に小さなクラウドファンディングを試みましたが購入額には到底及びませんでした。個人でお持ちの方は凄いと思います。今年の年内にA100後継のH100が出るそうですが全く手が届く気がしません。

 

単年であればボーナス全額投入などは可能かと思われますが,おそらく他チーム比でそれほど優位に立つ要素にはなりません。どちらかと言うと個人的に反動が出て継続的な開発の弊害になります。分かりやすく言うと強いものができなかった場合心が折れやすくなります。これは外部資金投入すると更に高リスクです。

 

え~っと何の話かと言うと計画的に持続可能な開発と言うのは持続可能な資金源が前提でしか計画が出来ないのです。単年で予算があってもそれを長期計画に組み込むことは不可能ですので長期確保できるベース資金で開発計画を練るのが安全です。

短期の競争的資金ですか?あれは年単位でスケジュール変更があるような長期開発には織り込めません。

 

中長期で応援してあげるよって方がいらっしゃれば是非御連絡下さい。

直接大学の方へ私を指名して教育研究奨励寄附金を入れて頂いても構いません。

研究関係規程・様式等 | 研究・地域連携 | 岡山県立大学

将棋の神様

WCSC32こと第32回世界コンピュータ将棋選手権で「将棋の神様」云々との煽り文句があった。

もちろん神様というのは人間が創った概念である。

 

将棋の神様の定義は様々あるだろうが、指す人にとっては日ごろの努力を認めて棋力を上げてくれるとか祈りを捧げると詰み筋が見えるとかそういう観念になるのだろう。

ゲームAI分野では以前から二人零和有限確定完全情報ゲームに分類されるものは無限の探索時間と無限の探索能力をもってすれば双方が最善手を指した結論まで得られると分かっている。しかしながら、有限の時間で完全解析にたどり着けるゲームは現在どうぶつ将棋や6x6のオセロ程度である。

 

神様が全ての指し手を探索し終局まで探索するとして、他の神は居ないのかというと評価値の神というのが考えられる。任意の局面を正確に局面評価行うことができる神だ。

この神は候補手を指した先の局面評価も可能であるから、その評価が最大になる手を指すことで最善手を選ぶことができる。もちろん同評価のこともあるだろう。

 

ここまでは一般的なお話だが、5年前の私は時間の概念に重きを置いた。全着手ノータイム指しである。神様なら当然かもしれないが、通常はコンピュータで計算する以上時間を費やすことは必至である。そこで考えた実装がMulti Ponderと言う有力な候補手の応手を事前に探索しておく手法である。これにより、初参加で第28回世界コンピュータ将棋選手権を優勝することができた。今年選手権で準優勝と共にこの事案でCSA貢献賞を頂いた。今年優勝のdlshogiが同手法を実装して時間を削ってきたのには苦笑いしか出ない。

 

探索の神、評価の神、時間の神と三柱考えて、時間の神を奉ったのが2018年。

その後スクラッチで探索実装などを試みたのが2019年。無限の時間(とメモリ)があれば答えが出る。

究極の評価関数を志したのが2020年である。これが二番絞り。

 

主流の自己強化学習にこだわらず手段を選ばないことを銘打って製作開始したものであるが、一応世界トップクラスを自負している。

Kristallweizenであの衝撃である。一般配布するには危険な代物だろう。

 

もちろん、今回一手でも悪手があったということで完成度を上げる余地はある。

神様からは「まだ早い」とのお声を頂いたように思う。

第32回世界コンピュータ将棋選手権

えっと,今年は余裕が無くてツイートくらいしかしてませんでした。

4月に急に温かくなってから耳鳴りが止まらなくて酷いもんです。

 

事後になりますが,ざっくり書き下します。

一次予選は第三者視点で観戦と開発者Zoomでちょっとした交流をしておりました。

短時間でも同じ課題を持っている人と意見交換できるのは非常に役立ちます。

谷合プロの初参加が話題でしたね。もうちょっと具体的に説明して欲しかったですが研究発表が控えているなら無理なのは同業として理解します。

そういえばねね将棋がiPadで動くのも現地実機で見たかったですね。

 

二次予選です。

 

白ビールは一応私が開発に加わらないという条件で開発者から名義を抜いておりますが,基本的にMulti Ponderのクラスタ構成で私が運用しています。昨年発覚したバグだけ修正しております。具体的にはPondering中の探索結果を一部読み捨てながらプールしているのですがソートを忘れていたためにponderhit直後に応手を出す際の評価値が最も深い探索になってなかった点等です。ソート忘れですのでそーっと修正しておきました。他に持ち駒のソート忘れも発覚してましたのでこちらもそーっと。

 

結果は御覧の通り惜しい予選落ちでしたが,昨年と似た感じで松下さんが持ち込んだ定跡にちょっと難があった感じですね。差し替えるか迷いましたがワンオペで多数のクラウドインスタンスを監視してるだけで何となく気疲れしてそのままにしてしまいました。具体的には先手番で定跡抜けでマイナスの対局がふたつ,千日手ひとつですね。さすがに先手定跡のままで千日手はちょっと酷いです。

昨年予選一位で決勝に行ってましたので基本的には弱くないはずです。

 

二番絞りは私が一昨年から制作している深層学習モデルで,元は第1回電竜戦の予行のために作った突貫ネタエンジンでした。(割と多いパターンです)

そもそも将棋の深層学習についてはこのブログの2017年春と山岡さんの同時期を見て頂ければ分かりますがその辺から着手しています。AobaZeroで遊ぼうシリーズもありますが

二番絞りはとにかく対戦サーバの自動運転のテストが主眼なので適当に間に合わせで学習させたものでした。本格化したのはAobaZero教師データを加えてからです。

二番絞りプレミアム生とは? - 48's diary

二次予選結果 - 48's diary ←昨年選手権

将棋の深層学習の歴史(私的集計2021秋) - 48's diary ←昨年電竜戦直前

第2回電竜戦本戦の感想 - 48's diary ←昨年電竜戦直後

 

で,昨年選手権ではリハーサルで使ったマシンが本番で使えずに二次予選で落ちました。電竜戦では予選一位,決勝四位とまずまずの成績と言えるでしょう。

それで今年の選手権で予選一位でした。

そうするとなんか妥当で順当な気がしますが,実際の開発者視点は異なります。

昨年モデルが実は結構自信がありました。ほぼ春のまま微修正で電竜戦に挑みましたので結果四位は満足ですがそこから何をすればいいのか分からない状況になっていました。

 

結局考えられる幾つかのパターンを試したのですが,それぞれを評価する方法がはっきりせず恐らく内輪でこれが一番いいのかな?ってものを本番に投入しました。

評価方法が分からないと言うのは多くの方が疑問だと思います。例えば第一回電竜戦の後,山岡さんに評価して頂きました。

GCT、dlshogi、二番絞りの比較 - TadaoYamaokaの開発日記

明白にGCT, dlshogi, 二番絞りの順になっています。しかしながら,電竜戦では二番絞りが遥かに劣るスペックの計算機でdlshogiに中盤から逆転で勝っています。二番絞りの方が弱いとは思っていませんし,うちで計測したのはもっと長時間戦をやっており明白に二番絞りの方が優勢です。

ということで,探索時間・深さで優劣は変わります。

それでは選手権用にどれを選ぶかと言う問題になりますが,選手権と同スペックの対局をすることは予算的に無理です。自社内にA100クラスタを持つHEROZさんが羨ましい点ですね。

結論こんなのです。

 

低スペックでも格上に一発入れられるけど,高スペックでも完封できるわけではない。

floodgateで長時間放り込んで一番レートが高いのを使おう。っても以前のと比べて大差ないな。

 

まぁ,そんな感じでした。

ですので予選通過すれば万歳くらいの気分でしたので予選一位時点で望外の僥倖でスーパーラッキーマンでした。

A100マシンは大会でしか使ったことが無いので初手から先生よろしくお願いしますといった気分です。低スペックマシンで検証した定跡を使う気がしません。

 

決勝です。

もうほとんど言うことが無いくらいラッキー続きな印象でした。どこで負けても不思議はありません。

特筆するとすれば五回戦強敵のたぬきさん相手に後手番の20手目ですね。

 

 

定跡進行で19手目48銀と上がったところで二番絞りが1分58秒の長考に入り,結論は後手有利と判断し86歩と仕掛けました。

定跡ファイルを入れているとおそらくこの仕掛けは選手権棋譜にならなかったと思います。こういったものが見られるのが今回の設定の目標でした。

以後評価値は単調に後手へ拡大し勝利となりました。

手数は長いですが上図がうちの評価値グラフです。

 

決勝最終局は皆さん大喜びのウォーターフォールです。

 

 

 

正直評価値が800超えたところで画面から目を離して,ドスパラポイントで年内発売が予想されているRTX4090に届くかどうかとかとか考えてました。今思うと完全にフラグです。

ただ,多くの方が二番絞りの優勝すると思ったんじゃないでしょうか。

実際多く検索にかけたようで過去の準優勝の比ではなくアクセス数が伸びておりました。

 

また,面白いことにYoutuberやブロガーの人が色々分析して下さってますが,このレベルの分析をできるマシンをお持ちではないので恐らく正確なところは分からないと思います。

とにかく,このスペックのマシンでもこんなことあるんだなってところですね。

しかもこれを最終戦で持って来るのはまさに劇的でした。

気分は力石にアッパーカットをもらった矢吹丈ですよ。でも彼も対戦出来たことにまず感謝したはずです。

 

考えてみると上場企業が自社サーバ全導入して参戦して下さるなんて素敵じゃないですか。モータースポーツに例えるとワークスチームが億の金で組織するところを私はプライベートチームでピットクルーひとりでレンタカーで戦ったわけです。

予選一位で決勝6戦無敗で最終局ですから,ポールポジションからファイナルラップまで先頭を走って,ワークスチームが相当焦ったはずですよ。それで十分,今回も出来は御の字です。

 

いやぁ,お疲れさまでした。CSAの皆様,開発者の皆様,HEROZの皆様ありがとうございました。そしてチームメイトにも感謝。

  

 

ハイパースレッディング考察2022

以前にメモリ換装機にRyzen 5 5625Uのマシンを仕入れた話をした。Zen3世代の非常に高コストパフォーマンスの良いマシンである。

 

bleu48.hatenablog.com

 

毎度購入直後に負荷テストをするのであるが,モノはついでなのでfloodgateにやねうら王の7.10の128bitハッシュのやつを流しておいた。評価関数は相変わらずのKristallweizenである。くどいが現在でも全く遜色なく戦える。

 

で,Ryzen 5 5625Uは安くて速いお買い得CPUなのだがハイエンドには劣る部分がある。以前のRyzen 5 2500Uなども酷かったが高負荷時に熱でクロックが大幅に下がる。

今回16インチ機を仕入れたのはもしかしたら14インチ機より排熱ちょっと強いかもという淡い期待が少しあったからでもある。

今回の結果,5625Uは12スレッドの負荷で今回2.3GHz付近まで落ちた。6スレッドでは3GHzを若干下回るくらいで落ち着いていた。

で,以下のfloodgateレート(各60戦程度)である。

 

 

2.3GHzの12スレッドなら3GHzの6スレッドと大差ないって結論になる。つまり5625Uならコア数分のスレッドで運用した方が発熱も消費電力も少ないのでお勧めである。微差で12スレッドの方が強いとは思われるが本当に微差であろう。

 

そういえば,Alder LakeおよびM1のベンチマークでも遅いコアはあまり役に立たない仮説が出るような結果であった。

bleu48.hatenablog.com

 

基本的に高クロックが欲しいアルゴリズムなんですね。

学術的には並列化効率が特別低いという表現でしょうか。

 

もちろん,高負荷時にクロックが落ちて来ないような設計のものは今回とは違います。

 

すっぴんのUbuntu 20.04 LTSに最短でCUDA入れるメモ(CUDA11.6編)

前回の一部改変

bleu48.hatenablog.com

 

すっぴんのUbuntu 20.04 LTSにCUDA11.6入れるメモ

(所謂自分用コピペ元)

 

まず以下を確認

https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/

 

sudo wget -O /etc/apt/preferences.d/cuda-repository-pin-600 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"

 

sudo apt -y install cuda-11-6

 

export CUDA_PATH=/usr/local/cuda-11.6
echo 'export CUDA_PATH=/usr/local/cuda-11.6' >> ${HOME}/.bashrc
export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64:${LD_LIBRARY_PATH}
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64:${LD_LIBRARY_PATH}' >> ${HOME}/.bashrc
export PATH=/usr/local/cuda-11.6/bin:${PATH}
echo 'export PATH=/usr/local/cuda-11.6/bin:${PATH}' >> ${HOME}/.bashrc

 

以下は機械学習系(TensorRTなど)

 

sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/ /"

 

sudo apt-get install libnvinfer-dev libnvonnxparsers-dev libnvparsers-dev libnvinfer-plugin-dev

sudo apt-get install zip unzip

 

---

もちろん,5月の選手権で使うCUDAのバージョンが11.6ということです。

昨年一次予選1位,二次予選11位で第2回電竜戦予選1位,決勝4位の二番絞りの進化を御期待下さい。

メモリ換装シリーズ2022

別名メーカ保証なにそれである。

昨年度末にはゲーミングPCにメモリを64GB積んだ。

bleu48.hatenablog.com

 

その前には6万円台の廉価ノートにメモリ32GBとSSD1TBを総額10万円以内で増設した。

bleu48.hatenablog.com

 

今回この後者のヒンジ破損ということで代替マシンの購入に至った。

以下にも書いたが,代替マシンを急ぐ必要は無いのだが遅れるとメモリ規格がDDR5が主流になる可能性があり安価なマシンの入手性が落ちるとの予測。

bleu48.hatenablog.com

 

で,丁度適当なマシンを選定した。

Inspiron 16 AMD プレミアム Ryzen 5 5625Uである。偶然DELL社内の内部番号も5625である。同系の14インチでも良かったのだが昨今持って動くことも少ないので大きい方にしてみた。

結論から言うと,プラスドライバー一本(と薄い樹脂のヘラ)で簡単に換装できたので換装初心者にもお勧めできるくらいのマシンです。

下図の隙間感からして14インチと共通パーツは多そうですね。

 

3年前主流だった2400MHzのDDR4メモリは今では相当遅い部類で,結局3200MHzのメモリから換装したのですが,パフォーマンス的に全く問題ない感じです。

zen3万歳って言って良いと思います。zen+比でクロックは高い。省電力。キャッシュ多い。(さらに今回コア数多い。)言うこと無いですね。

 

8コア(Ryzen 7 5825U)の方ですか?

薄型モデルの8コアはどうせ本気出したらサーマルスロットリングでパフォーマンス出ないでしょって勝手に予想してます。ページ冒頭のようなRyzen 7 5800Hならアリだと思ってます。

---

話逸れますが,インテルの薄いPC用の高パフォーマンスCPUですが,Core i7-1280P、Core i7-1260Pで比較してシングルスレッド性能がCore i7-1260Pの方が上になることがあるみたいですね。

もしかしてシングル負荷で熱律速

インテルでもパフォーマンス気にするなら12700Hとかにしておいた方が良さそうです。

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

このシリーズ随分ご無沙汰です。

色々と遊んでいるのですがblog更新してないだけですが

前回が2020年秋で電竜戦前で二番絞りも本格化する前です。

 

bleu48.hatenablog.com

 

嘘でした。もうひとつありました。

bleu48.hatenablog.com

 

で、AobaZeroも随分変わりました。

一時期40ブロックを試されていたのですが再度20ブロックに戻して独自の試行錯誤に入っています。ざっと大きな変更のみ箇条書きにしますと

2020年12月 v1.9 詰み局面の返り値バグ修正

2021年9月 v2.0 棋譜生成時のsoftmax温度を変更し幅広い局面の生成を目指す

2022年1月 v18 バージョン番号を内部番号と統一。棋譜生成時にKL情報量ベースで探索ノード数を可変に

2022年2月 v28 荒く言うとニューラルネットワーク構造をdlshogiに寄せる大幅な変更。末端での三手詰み探索。

2022年3月 v30 softmax温度やKL情報量に関するパラメータ変更。

2022年4月 v32 ノード展開時の初期勝率変更。詰み探索の強化(増加)

 

バージョン番号が変わったのとそれをエンジン名で返すようになったので使い勝手がよくなりました。

また、v28でニューラルネットワーク構造が大幅に変わりましたので棋風が一変です。末端での詰み探索が入りましたのでCPU負荷が一気に増えています。マシン次第では探索速度が大幅に落ちるかもしれません。

加えて最新のv32は詰み探索が強化されましたので更に終盤強くなった感じでしょうか。手元で試した限りではCPUの負荷はさらに増えているようです。

以前のバージョンと最適な-b -tなどのオプション値は結構変わるかもしれません。

 

で、最も気になる棋風の変化ですが以前の根絶やし流というか、全駒取って入玉宣言勝ちといった雰囲気はもうありません。普通に詰めて勝つようです。

実際floodgateでの成績も随分向上し、手数制限で引き分けることもほぼなくなっている感じです。宣言勝ち比率も恐らく激減じゃないでしょうか。


 

ということで、久しぶりにAobaZeroで遊んだ報告でした。

棋風が変わって残念と思う人もいるのかも(笑)