メモリ規格のメモ(DDR5移行への雑記)

インテルがAlder LakeをリリースしてDDR5メモリの入手困難さが話題になった。

DDR4対応もしているので特別な場合以外は困らないが一応数%パフォーマンスに差が出るようである。未発売のモバイルCPUでもスペックシートを見る限り同様のようである。

次世代のRaptor LakeでもDDR4・DDR5両対応が明記されている。実際どう対応されるか分からないが少なくともチップセットやソケットで互換があるのでそのまま使えそうである。

 

一方,スマホ界隈はメモリ交換などが無いため世代交代に際してユーザが意識せずDDR5化していくようだ。(正確にはLPDDR5)

 

次に,AMDであるがこちらは年内リリース予定のZen4世代では完全にDDR5のみの対応となるらしい。また,まもなく世に出るZen3+とRDNA2のAPU(所謂6000番台)もDDR5のみの対応との話だそうな。(DDR4対応との表記が極僅かあるが誤記と読む筋が有力)

とすると低価格帯はどうなるのかというと旧来モデルを微修正,リネームしたものを出してDDR4対応商品として出すらしい。加えて要注意は,ややこしいナンバリングをするから気をつけろってことだ。ただ,インテルとの争いが激化している今なので相当の廉価は間違いないだろう。

 

で,今どうするかだが新規に上位マシンを購入予定で少し待てるなら待ってDDR5へ行った方が良さそう。それ以外ならまだDDR4でいいんじゃないかくらいの感じだろうか。

DDR5も初期なので今後まだまだ性能を上げてくることが予測されるのでそれほど騒ぐこともないだろう。

 

 

3年前にDDR4メモリを32GB搭載したノートPC(Ryzen 5 2500U)のヒンジが破壊したのでメモリとSSDの移植先を検討中である。第一候補Ryzen 5 5625U級かな

 

minmaxとMCTS

以前,将棋AI界は丁度αβ型とMCTS型が均衡している非常に貴重な時期にあるという話を書いた。

 

bleu48.hatenablog.com

 

電竜戦の広報イベントとしては成功したと言ってよいだろう。

呼称としてαβ探索と言うのが日本では普及しているが,実のところminmax法がその原理的な根源であり,αβ法はその枝を刈る手法と学術的には認識されているため分類としての枠組みはminmax法を呼ぶのが正確である。MCTSの方も,もはや確率的な意味でのモンテカルロ法から逸脱しており,PV-MCTSと呼ぶのが主流と言ってもモンテカルロを名乗らない方がいいと言う案にも説得力があるような状況である。じきに時代が評価を決めるだろう。

将棋AIの現行モデルでは両者とも深層学習モデルで局面評価を行うのだが,前者は比較的軽量なモデル,後者は比較的重厚なモデルとなっている。

 

ところで,昨年末から以下の書籍の関係で簡便に深層学習モデルを扱うインフラが出来てる。

python-dlshogi2で遊ぼう - 48's diary

強い将棋ソフトの創りかた(その2) - 48's diary

 

これらはもちろんPV-MCTS型の探索なのだが,一度簡単にこの評価モデルでMINMAX法を使ってみた。

αβと言いたいところだが,実際GPUを使ったバッチ処理だと一局面ずつ評価するより多少無駄でも多くの局面を一気に評価した方が高速に処理可能であるためバッチ評価する完全なMINMAX法を実装した。

 

で,結果floodgateに放り込んだところ,一手読み(depth1)でレート1600,二手読み(depth2)でレート2300程度を得た。

Player Statistics

 

 

古典的なMINMAX法の他のものと比較して局面評価性能が抜群であることは分かる。重厚なモデルの価値があるというところだろう。

しかしながら,三手読みまでMINMAX法で行うと中終盤で数分程度かかるためfloodgateでは二手読みで止めてある。

何かしらの改良が出来れば三手,四手と読んでみたいとは思っている。

---

参考に,Bonanzaのdepth10でレート2600,技巧2のdepth8か9で同等とされているらしい。depth3か4くらいで追いつけたら面白いかな。

UEC杯(第13回)

先日第13回UEC杯コンピュータ囲碁大会がありました。

 

entcog.c.ooco.jp

 

性懲りもなく参加しましたが,結果は上記リンクの通り11位ということになりました。

同じ言い訳をなんども書くのはアレなのですが準備不足が酷いです。ほとんど改善点がないまま一年になります。

もう少し手が回ればAリーグ戦えそうな気もするのですがねぇ。

勝ち負けに関わらずこの手のコンペは他の参加者との交流が楽しいです。未経験で一度やってみたいと思っている人は未熟でも早めに飛び込んでみるのが吉です。

ちなみに,昨年初参加のUEC杯とCGFオープンのリンクも載せておきます。

 

bleu48.hatenablog.com

bleu48.hatenablog.com

 

8コアノートPCでメモリ64GBにSSDを3TBとか

32GBのSO-DIMMが安定流通したお陰で普通のノートPCにもメモリ64GBが簡単に載るようになってきた。

 

前ネタはこの辺である。3年前の当時は4コアノートPCに総額10万円程度である。

bleu48.hatenablog.com

bleu48.hatenablog.com

 

昨今は公共機関での移動や飲食店などでの作業も激減したため,今回は15インチ級で以下の構成。

一般より低スペックでAmazon専売モデルをベースにメモリ64GBとSSD2TBの追加。

Zen3の8コアにRTX3060載せて総額21万円弱は合格点だろう。

内訳はPC本体15万円,メモリ3.5万円,SSD2.3万円といったところ。

GIGABYTEの一般モデルはRTX3070搭載等でこれより高額となるようだ。

ちなみに,高スペックモデルが存在する筐体の低スペックモデルを選定するのは熱設計の余裕を考えた選定である。熱的に頭打ちになる性能なら大差なしとの判断であるが正解か不正解かは両方を並べないと分からないだろう。ヒートパイプ等が共通パーツではない可能性もある。

 

 

 

 

開けて分かったが2.5インチSATAドライブも入る。今回はSSD1TBに2TB追加したのでもう十分かと。

電池パックの交換が可能なものも久しぶりな気がする。実際外すことがあるかどうかは分からない。

 

雑感として見た目ほど重くはないが厚みがあって嵩張る感がある。熱設計によるものと思われる。

それと,右シフトキーが小さい。うっかり「カーソル上」が入る。

Alder Lakeでやねうら王ベンチ(その3)

bleu48.hatenablog.com

 

前回に続きます。

前回の最後で12900Kがfloodgateであまり強くなかった点で疑問を残して終わりました。今回は確認作業としてPコアのみの状態でfloodgateに放り込みました。

 

f:id:the48:20220216141124p:plain

 

近隣に内輪が集まってますがその点は置いておいて,12900Kと12900KのPコアのみが4225と4251で僅差となりました。Pコアのみはもちろん16スレッドです。

8コア16スレッドでこの位置とすれば素晴らしいのですが,せっかくのi9と考えるとちょっと残念な結果です。

 

bleu48.hatenablog.com

 

そういえば,上記リンクのようにM1でも同じような結果でした。つまりPコア4,Eコア4のM1においても4スレッドと8スレッドで僅差の結果でした。このときはEコアが役立たずなので探索に要らないとざっくり切り捨てたのですが,Alder Lakeはそうもいきません。

なんせAlder LakeのEコアはそこそこ速いはずなのですから。

 

Eコアが要らないとなれば,若干クロックが下がるi7 12700Kで十分となります。Eコアに負荷がかからない状態で十分となればi7 12700でも熱的に余裕が出て近いパフォーマンスを叩きだす可能性すら出てきます。

 

さて,ちょっと想定外の事態ですが問題を整理しましょう。

1.そもそもLazy SMPで遅いコアが役に立たない(これは可能性が低いが学術的には面白い)

2.Stockfish実装(やねうら王実装)の不備で遅いコアの効果が相殺される(学術的価値はあまり無いが改善されれば多くの人が嬉しい)

3.今回の計測に誤りがある(まぁ,100戦以上してるが時期がズレたなどでレートがシフトしているなどの可能性はゼロではない)

 

いずれにしても電竜戦や選手権などの大会ではAlder Lakeが上位争いすることはないと思いますので関係ありません。

PonderとUSIプロトコルとフィッシャールールと時間切れと私

検索で飛んでくる人用に簡単に書いておくと,2017年将棋電王トーナメントで相手考慮時間において指し手予測を複数行うことで自分の手番で時間をあまり使わずに対応するエンジンを作り準優勝した。キーワードがPonder,本手法をMulti Ponderと命名している。

元ネタは単なる思い付きで全着手ノータイムのおもちゃを作りたかったからだ。

第5回 将棋電王トーナメント | ニコニコ動画

 

時間管理(チェスでtime control)はチェス由来のフィッシャールールが適用されることが多い。本家(チェス界)では知らないが以下はコンピュータ将棋界のルールで説明する。

持ち時間5分一手10秒加算というのがfloodgateのルールである。世界選手権は持ち時間15分一手5秒加算,電竜戦では持ち時間10分一手2秒加算と皆諸事情あって異なっている。floodgateも元は選手権由来であるらしい。

http://wdoor.c.u-tokyo.ac.jp/shogi/floodgate.html

持ち時間を過ぎたら負けであるから,floodgateルールだと初手で5分であると思われがちなのだが初手から5分10秒使える。これは囲碁将棋などの秒読みルールからの転用が理由だと言われている。フィッシャールールでは指す毎に時間加算とあるから間違っている気もするが現行のプログラム実装を優先する。

実はやねうら王も随分の間(少なくとも2017,2018年頃)この加算分を使っていなかった。常に余裕を残していたのだが今はこれを加算するようになっている。つまり現在ギリギリの設定である。

 

で,順が後になったが探索エンジンとの通信に用いられるUSIプロトコルである。各方面で問題点を指摘されているが,ここではPonderの件についてだけにしておく。

将棋所:USIプロトコルとは

USIプロトコルでは盤面の設定にpositionコマンド,探索実行にgoコマンドを用いる。

通常は問題ないが,Ponder時はgo ponderで探索実行開始する。Ponder手が当たればponderhitコマンドを送り探索を継続するし,外れればstopコマンドで停止させ再度goコマンドを送る。goコマンドの引数に持ち時間を与える。

ちなみにネット対戦で用いられるCSAプロトコルでは着手毎に使用時間が返ってくるためにそこから毎回持ち時間が逆算可能である。

 

USIプロトコルのどこに問題があるか?

ponderhitのタイミングである。go ponder時に持ち時間を入れる。相手が考慮して指し手を送る,受け取ったらそれでponderhitとしてエンジンに送る。ponderhit時には時間情報を送らない。

つまり,エンジン側は相手の考慮時間をどのくらい消費したかエンジン内でカウントする必要があるのだ。具体的に言うと,ponderhitが少しでも遅れればエンジン側からすれば相手の考慮時間が消費されたと考え,自分の考慮時間が消費されたことに気付かない。エンジン側からすれば悠々時間切れとなる。

ponderhitに引数はないので,プロトコル上補正する手段は無い。

 

go ponder中はponderhitコマンドのタイミングに対してシビアな状況であるにも関わらず探索中の情報もリアルタイムで出力されているため,それらの処理も必要となる。

まぁ,そういった僅かな差であるが数手蓄積されると時間切れになるらしい。やっと修正できたので時間切れの負けがなくなった模様。

実際ギリギリまで時間を使っていることを確認している。(test06側)

test06 vs. Kristallweizen_R9-3950X (2022-02-09 08:00)

 

以下,追記予定。

ーーー

某所で話題になっていたが,ponder中にstopやponderhitではなく突然gameoverが飛んでくる場合がある。(先手番の)max movesの場合と(相手番での)千日手の場合である。将棋所の方で一度stopを入れてもらえないかと以前打診したが仕様なので変更しないと回答頂いた。stopある方が無難なのだが仕様ならしようがない。

 

---

さらに追記。というか本体。

csa_usi_bridge_4fg.py · GitHub

floodgateで連戦するためのスクリプト

上記のややこしい話に加えて対戦相手がマッチしなかった場合にタイムアウトして再接続待機部分が大きな変更。

ただし,その際に用いたtimeout_decoratorのためにWindowsPythonで動かないことになった。まぁ,Windowsなら将棋所使いましょう。

Alder Lakeでやねうら王ベンチ(その2)

bleu48.hatenablog.com

 

前回の続きです。

12900Kがどの程度なのかfloodgateに丸二日放り込んで100戦弱やってみました。

f:id:the48:20220207151308p:plain

 

Ryzen9 3950Xを超えると思っていたのですが,若干下のレートで止まりました。

同じKristallweizen評価関数なので実力なんでしょうか。

探索部は12900Kの方が新しいんですがそれが裏目に出たのかもしれません。

まぁ,未確認なので僅差って扱いにしておいて下さい。

Ryzen9 5950X買う方が良いんじゃないかと思う人は是非買って計測手伝って下さい。

 

ところで,以下の記事でEコアのみのベンチマーク計測の方法が掲載されていました。

LimitCPUというアプリを使えばできるようです。

pc.watch.impress.co.jp

www.vector.co.jp

 

ざっくり計測してみました。

f:id:the48:20220207162613p:plain

f:id:the48:20220207162624p:plain

ついでに,Pコアのみのベンチマークも。

f:id:the48:20220207162644p:plain

f:id:the48:20220207162722p:plain

 

まぁ,前回書いたものが確認されたという感じでしょうか。

Eコアのシングルで900knps弱出ています。8コアで平均700knps超えています。

Skylake級と言って良いと思いますし,Zen1級と表現してもいいかもしれません。

全負荷ならEコア8個で6Mnps弱稼いでいる感じですね。

 

Pコアの方は1~8は変わらずですが,16スレッドでHT全負荷の具合が分かります。1スレッド1Mnps強あって,16スレッドで16Mnps強という感じですね。さすがにEコアより強いです。

Pコアが8スレッド時(各コア1スレッド)にスレッド辺り1.5Mnpsで,16スレッド時にスレッド辺り1Mnpsとなるが,この落差よりEコアの方が働いていると確認できました。

 

概ね納得なのですが,冒頭のレーティングだけちょっと気になります。

スレッド毎の性能にばらつきがあると強くならないんでしょうか?

ちょっと面白い課題として残しておきます。