2024年のキーワードNPUの話

昨今IT業界の話題はAI(人工知能)である。

若干スマホ界隈の方が先行していた風な感じのあるNPUであるがPC界隈も変わりつつある。

pc.watch.impress.co.jp

pc.watch.impress.co.jp

 

以前からonnxruntimeなどオープンソース系AIではマイクロソフト社の活躍が凄いのだが,Windowsとなると若干出遅れていた感がある。理由は明白でハードウェアとして多くのデバイスに対応するため個々のハードウェアに特化した機能はOSとして押し出しにくいというのがある。

今年はNPUの規格はもちろん,実装がリリースされ普及する年になりそうだと言うのが本記事のネタである。上記リンクにもあるようにインテルAMDの両者からほぼ同時にほぼ同じ程度のパフォーマンスのNPUが搭載される。裏で政治的な協定でもあったんじゃないかと思うくらいだ。

 

さらに深くコメントすると上記両者が搭載しているのは両社ともモバイル用のCPUであるということに気づくだろう。これは何を意味しているかと言うとデスクトップ機であればNVIDIA一強と言われるようにGPUを搭載することで数十倍というパフォーマンスを手に入れることが出来る。モバイル機では一部のハイエンドゲーミングノート以外ではそこまでの性能はコスト的にも電力的にも難しい。

と言うことで,本件NPUでインテルAMDが対抗してるのはNVIDIAではないことは明白である。インテル側の資料がよりはっきりと省電力を打ち出していることが分かる。つまり,AI機能専用チップにより性能向上はもちろんだが,AI機能時の省電力を目指している。

 

似たような事例があったので紹介した方が理解が進むだろう。もう20年以上の歴史になる動画再生である。古のノートPCでは動画再生は非常に負荷が大きくバッテリー駆動では30分と持たなかった。MPEG1やMPEG2の時代である。

インテルは動画再生支援機能をCPUに盛り込むことで対応された動画であれば比較的省電力で再生することに成功した。新たな動画圧縮技術が生まれるたびにそれは更新されてきた。近頃ではAV1などであろう。

ノートPCのバッテリー駆動時間の基準が古くは動画再生時間で計測されていたのだが,これが劇的に伸びる結果となり,また動画再生がむしろ軽い処理とされるほどの時代になったため現在では他のバッテリー駆動時間計測が行われているほどである。

今ではYouTubeにはじまるネット越しの動画再生ですらバッテリー駆動で気軽に使える機能となった。

 

以上から類推するにAI機能をモバイルPCにおいて容易く扱うための下準備と考えるのが適当であろう。未来像としてNPUにより常時AIアシストさせるモバイルPCと言うのが想定される。

WindowsPCのキーボードにCopilotキーが追加されるという話も出ている。

www.itmedia.co.jp

 

ここからは余談になるが,この辺の元ネタは昨年のこれのアクセス数が年末年始で伸びていたことからヒントになっている。

APUも出たときはCPUとGPUの親和性から生まれたものであるが,これも動画再生支援機能がうまく働いた。つまり低コストで動画編集などが行えるという素晴らしいものであった。今ではAI機能に期待されており,その姿勢は私以外でも多く共通するものであったという風に見える。

ただ,現行APUでAI負荷を上げると割と熱暴走するので次世代に期待している。

bleu48.hatenablog.com

 

最後にたぶん同じ気持ちの人がいると思うけど,3D Vキャッシュ搭載のAPUをAMDに期待して終わる。実機出す技術があることは明白であり,パフォーマンス的にはAIには凄く効くはず。

もちろん,インテルがやってもいいけど。

 

---

追記1/9:

AMD側はデスクトップ用のAPUでもNPUを乗せてくるらしいので8700Gでも仕入れれば実験可能のようだ。ノートPCは電源状態や冷却安定性から考えてベンチマークを取るのには向いていない。インテルもデスクトップ用で何か出荷して欲しい。

 

www.4gamer.net

第4回電竜戦本戦

開催が12月2,3日なので二週間遅れである。

ちょっと集計したデータを付ける構想を練っていたのであるが手がついていない分遅れた。

間に岡山ローカルの勉強会があったのでその前にネタバレを避けた点もある。

 

第4回電竜戦本戦参加者

総評としては新規の参加者、特に若い人が多くなったのが一番の成果と言える。運営スタッフとしては1ファイルマッチなどの構想は全て新規参加者開拓の試みである。

第3回電竜戦本戦では36エントリーから第4回電竜戦本戦では43エントリーと増加しており、うち25歳以下が9エントリーである。

 

新規参加者が多いと言うことは新しいアイデアが導入されるという事である。こういうマニアックな大会では常連が複数年かけてじっくり作り上げるものが多いがアイデアとしては凝り固まったり中長期的に方針が不変であったりする。もちろん大きな成果を生みためには当然の行為であるが、競技自体の硬直化につながると考えている。

 

結果一覧は以下のリンクである。

denryu-sen.jp

 

優勝は水匠。直前まで変更を加えていたやねうら王エンジンとたぶんお金を出してもすぐに買えないくらいのモンスターマシンがAMDから提供されているとのことですので、さすがですね。

 

2億npsと言われてピンと来ないので、私が白ビールで世界選手権優勝した際が概ね5000万nps程度だったと記憶しておりますので約4倍ですね。

二番絞りは約20万npsでした。

 

独創賞はねね将棋、生きた回線を保有したままのiPhoneで大会参加されたとのことである。

本年は多くの賞設置のスポンサーがあり解説者、聞き手、リスナーによる投票も行われた。対局数は有限であるから当然票は偏るのでW@nderERやRyfamateが複数賞を受賞するようなことになった。

 

また運営設置として置いたshotgunが真澤千星賞および大逆転賞を頂いた。運営設置であるため賞金は辞退する。

本件の理由として元々shotgunは持ち時間を極力消費せず最終版に時間を残すシステムである点および2017年のままの比較的古い局面評価関数を持っている点がある。昨今珍しく序盤をやや不利にしても中終盤を競り合うようなタイプである。

コンピュータ将棋界隈は現在序盤でついた差をじりじり拡大していくような対局が多いため逆転が少ない。その中で逆転を演じたとして観戦者の目についたのであろう。

2017年作成のウケ狙いが6年後にウケたと考えて良いだろうか。

 

決勝A級リーグの勝敗表は以下のようになった。

【A級】第4回世界将棋AI電竜戦本戦 勝敗表

チームとしては全勝も全敗もなく激戦を物語っている。

10チームの総当たりのため組み合わせは45組。その全てを先手後手2局行っている。

集計すると、45組中2連勝が21組、1勝1敗が16組(うち先手勝ちが14、後手勝ちが2)である。1勝1分が8組あり、そのうち先手勝ちが6組、後手勝ちが2組であった。

 

昨今話題の先手勝率であるが、先手視点90局として集計すると55勝27敗8分となる。

引き分け0.4点として一局平均の勝ち点(勝率)が0.646(64.6%)となる。

ちなみに引き分け0.5勝換算すると平均65.5%となる。

 

以前先手勝率が7割と話があったが若干下がった感じになっていることがわかる。

実は第4回電竜戦本戦では前例のない大変野心的な施策が行われており、先手持ち時間を後手の半分にすることで是正を試みていた。少しは有効であったが完全な是正に至っていないことが確認された。

持ち時間をさらに削るのは対局エンジンの持ち時間マネジメントを考えると非常に危険な気がするので慎重に行わなくてはならない。

 

予選やC級では大半が2連勝であるため力量差のある対局では裏表の2局セットはあまり有効ではないとの考え方もある。多彩な対局組み合わせを優先する方が参加者に喜ばれるとの指摘などがあるとして今後の運営で再検討であろう。

 

冒頭にも書いてあるが、今回は若い人・新規参加者が多く運営としては大変満足のいく結果であった。今後もどんどん参加者が増えることを期待している。

---

追記:

本戦上位者がハードウェア統一戦に参加する。

ハードウェアスペック差をなくした場合にどのチームが強いのかはっきりさせようとする大会である。スポンサー企業のお陰で本戦より賞金額が上がるという恐ろしいことになっているが是非注目して頂きたい。

ちなみに昨年準優勝の二番絞りは基準扱いとし昨年と全く同じもので出場します。今年の参加者はこの基準レベルをどうクリアするのか個人的に楽しみです。

将棋界の大谷翔平

時期は正確に記憶していないのだが内容から判断して今年の春だろう。

 

2017年『shotgun』で第5回電王トーナメント初参加準優勝との活躍に始まり,翌年世界コンピュータ将棋選手権初参加優勝・新人賞,以後今日に至るまで上位入りとそこそこキープしている。

 

個人的には一番最初に試した静的な局面情報と深層学習のみでどこまで将棋が出来るか,次に試したノータイムでどこまでやれるかと言った辺りから始まって,予測手の統計的解析,探索部分の改善やライブラリの修正,スクラッチ開発を含めて多くのところに手を出している。学術的にはコンピュータ将棋の競技者で学術発表をしているものは稀有な中,手の内を毎年明かしながらコンペに出ると言う「種明かしをしながらの手品師」と呼ばれることもある。

加えて2020年から電竜戦を主催し大会運営を行い,技術的な意味での広報や競技者や視聴者を増やす活動も加わって,プレーヤーとして勝つことより優先している。

 

コンピュータ将棋界では古典的アルファベータ探索に基づく力技のアルゴリズムと比較的新しいモンテカルロ木探索に基づく深層強化学習のモデルが拮抗している。詳しくは以前記載しているし電竜戦以外のところでも数度話してあると思う。個人的には全て実験してみる方なので両方試してみたところ両方で頂点を極めることになった。

白ビール』と『二番絞り』の共存に関して

ある人に冗談として「コンピュータ将棋界の大谷翔平」と自称していいかと伝えたところ,返しが面白かった。「それならダルビッシュじゃないの」と。

ダルビッシュである理由は以下の通り,つまりWBCの時期だったと思われる。

1.WBC準備のキャンプに早々に入り若手に馴染む

2.トレーニング手法はもちろん変化球の握りなどの選手として秘匿した方が個人的利益となるような情報まで現役のうちに後進へ伝えている

3.以上の上でコンペ成績を残している

4.メディア向け活動より選手スタッフ向けの活動を優先している

 

あ~,この人私のファンじゃないかしらと思いましたよ。

冗談から始まったネタなので言った本人も覚えているかどうか分からないのだが,昨今の大谷翔平ニュースで思い出した。

 

ざっと思い出してみるとコードレベルで貢献があるのが,やねうら王,dlshogi,AobaZero,python-shogi,cshogiなど,口頭レベルでの修正提案などを含めると確かに多くのチームの底上げに貢献した気がする。コンペで勝つのが目的ではなく技術的な共有による全体の底上げが学者の本分と思うので特別なことをしているつもりはない。

集計が遅れているが先日の第4回電竜戦本戦はとても底上げ感が強くA級,B級はもちろんC級上位ですら人間を遥かに凌駕するレベルになっている。技術の普及・一般化とは恐ろしい速度である。

 

オチに使うと申し訳ないが同郷のメジャーリーガーは野茂である。

ーーー

野茂に関して:

プロ入りが衝撃的だったので地元の子供が多くサインをねだったそうで野茂自身がサインを書くことに慣れていないために断ることすら知らず物凄い数のサインボールが地元に溢れた。公園の砂場に野茂のサイン入りビニールボールが落ちているのを当時の帰省時に目撃している。(まぁ本物かどうか分からないが)

 

師走の岡山

10日に書いたんですが、大都会岡山 Advent Calendar 2023の空いた日を埋めてタイムスリップ感を出してます。

adventar.org

 

コロナ禍の間に忘年会などの年末行事の多くが中止になっていたと思います。

4年ぶりでしょうか。岡山で恒例の行事が行われました。

といってもいつもの「座」ではなく会場は岡山城というスペシャルな演出でした。面倒な準備を粛々と仕込んで頂いたスタッフに感謝ですね。

 

gbdaitokai.connpass.com

bonenkaigi.connpass.com

 

詳細はtogetterにまとめられております。

togetter.com

 

私は個人的に最近ゲームAIの人なので、先月話題になったオセロの弱解決の話を入れてそこから昨今の将棋界の話題に入る前にTime Upでした。(ワザとじゃないのよ)

夜枠が空いていたら入れようかと思ったのですが、岡山城でのプレゼンも制限時間いっぱいまで大勢が多様なネタを持ち込んでやっておりましたので出番なしとなりました。

終盤の部分はざっくり言うとオセロはトップ勢の皆は薄々引き分けと感じていて引き分けの結論を得た。将棋界は皆薄々先手有利と認識が固まりつつある。今年の電竜戦は持ち時間で倍ハンデをつけたが相変わらず先手有利は変わらない。今後大会運営としてどうしたらいいのか頭を痛めているというオチでした。(そのうち細かいBlogにします)

 

othelloに関しては詳しい記事があるのでリンク置いておきます。

qiita.com

 

今年の電竜戦本戦A級の勝敗表は以下のところです。

denryu-sen.jp

 

翌日はQuineのネタをPythonでやってみようと

s="s=\"\";print(\"%s%s\"%(s,s))";print("%s%s"%(s,s))

と一行書き始めて停滞しました。誰か後よろしく。

 

10日に書いたんですが、大都会岡山 Advent Calendar 2023の空いた日を埋めてタイムスリップ感を出して終わりにします。

 

明日は皆さん楽しみましょう。(8日に書いた体で終わる)

 

 

 

 

 

機械学習向けのノートPCの話

なんか知らんけど7月に書いておいたものがそこそこアクセスされている。

現在最もアクセス数の多いページである。

bleu48.hatenablog.com

 

正直言ってマニア向けなので外付けのGPUってのはあまりお勧めしない。

一通り一般的なハードウェアを触って状況を理解した上で、割り切って選択するくらいのものである。

まぁ、ネタ的には面白い。実用性は求めてはダメだ。

 

で、一般的にはお勧めしていないがGPU搭載のノートPCが売られており、ゲーミングノートPCというジャンルを確立している。

出張先で見せなければならない人はこちらが選択肢だろう。

個人的にも仕事的にも何台か購入したので知見をまとめておく。

もちろん、機械学習用なのでゲーム目的ではない。

 

1.GPUはなにはなくともNVIDIA

AMDもそろそろ選択肢に入ろうとしているがまだNVIDIA一択である。

 

2.CPUよりGPU

機械学習GPUを使うのでGPUスペックを優先すべき。CPUがボトルネックになるほどの構成はさすがに見たことが無い。

 

3.熱設計の話

これは本blogでも散々書いているネタであるが、そもそもゲームの負荷ってのは全負荷ではない。フレーム落ちしない程度の負荷しかかけないのでCPUにしてもGPUにしても概ね50%程度である。この状態のベンチマークに最適化されたものを100%の負荷に晒すと熱暴走することは結構ある。個人的には同筐体を使った上位スペックが存在するか確認して熱設計に余裕を持っているかどうか確認する。

 

4.電力設計の話

上記の話と連動する。NVIDIAGPUにしてもモバイルモデルは電力設計において幅を持たせている。

例えば下記記事ではRTX3060のモバイルGPUは60~115Wの幅で設定されている。

NVIDIA、ノート向けGeForce RTX 30シリーズ発表。デスクトップ版RTX 3060も - PC Watch

60Wと115WではCPUがそうであるように実行性能は大差である。2倍とまでは言わないが1.6倍くらいは覚悟した方がいい。更に言うとすでに手元に一台あるのだが120W設計のRTX3060も実在する。

正直言って別の型番付けた方が良いくらい性能が異なる。と言っても出荷された半導体的には同スペックと言うことだろう。

 

ちなみにであるが、デスクトップとモバイル版ではGPUの型番と性能差が大きいと最近話題となっている。

【特集】同じ「4060」と「4090」だけど……GeForceのデスクトップとノートはどのぐらい違う? - PC Watch

RTX4060ではデスクトップとモバイル(の上限)で微差であるが、TRX4090では全くの別物と言って良い。

実はRTX3060が面白くモバイルの方がCUDAコア数が多く、電力やクロックが低く

ベンチマークは僅差という状態である。上記で書いた120WのモバイルRTX3060だとデスクトップ版を上回るケースも珍しくない程度のパフォーマンスを誇る。

デスクトップのRTX3060が170Wなのだから差が小さいのも納得である。

RTX4060はモバイルの上限がデスクトップスペックである。

 

ということで、RTX3060やRTX4060くらいのものがモバイル用ではお勧めである。上位は名ばかり高額品でコストパフォーマンス的に厳しいし、下位は性能的に勿体ない。このレンジならデスクトップ用と遜色が少ない。ただし、熱設計が上限値に近いものに限る。下限近い設計のものだともちろん残念な性能しか得られない。

ただ、この辺の情報はあまり流れていない。

カタログスペックでは記載されていない。なんとかならないものだろうか。

 

もちろん、熱設計が甘いノートPCではCPUの性能も有効にならない。

価格comにロマンに溢れたASUSのPCのレビューがあるのでリンクを残しておく。

薄型モバイルPCにi9の13900Hプロセッサ(45W TDP)である。

価格.com - ASUS Vivobook 14 X1405VA Core i9 13900H/16GBメモリ/1TB SSD/14型ワイドTFTカラー液晶/WPS Office 2 Standard Edition搭載モデル X1405VA-LY127W [インディーブラック] レビュー評価・評判

HXプロセッサ(55W TDP)まで積んだらネタで買ってしまうかもしれない。

オープンセミナー2023@岡山

昨年は8月オンライン開催でした。

2022年8月近況 - 48's diary

 

コロナ禍のため3年オンラインになっていましたが,2023年久しぶりに対面開催を行いました。

私は例によって会場手配の担当(要するに裏方)です。

オープンセミナー2023@岡山

 

2008年の初回開催で80名程度でしたが,今年はコロナ禍明けで申込数があまりのびなかったので少し心配していたのですが

オープンセミナー2023@岡山 - connpass

 

 

隠密活動しなければならない事情の方も多かったようです。

 

一番多かったときで200人超えていたので100人切るのは初回以来でしょうか。

個人的には楽に全発表を聞けて,これはもっと多くの若者に聞いて欲しかったなという感想です。生存バイアス高めでしたが出会いで人生変わるエンジニアコミュニティの話が幾つもありました。迷いがある人にこそ聞いて欲しかったですね。

 

例によって懇親会は大盛り上がりでした。

会場係は後片付けがあって懇親会のスタートに間に合いませんでしたので懇親会集合写真には写らずでした。

もちろん,懇親会の詳細は記録に残せません。

 

 

まとめは毎度されているようです。

オープンセミナー2023@岡山 まとめ #oso2023 - Togetter

 

また,比較的近いスケジュールで年末の合同勉強会および岡山城での忘年会議が予定されているようです。

合同勉強会 in 大都会岡山 -2023 Winter- - connpass

忘年会議2023 in 岡山城 presented by finet - connpass

個人的にも忘年会ネタのために一年生きているわけですから参加できるようスケジュール調整したいと思います。

 

1ファイルマッチ体験会反省会

先日からアナウンスしておりました1ファイルマッチ体験会が先週末無事終わりました。

報告が遅れましたが簡単にまとめておきます。

 

1ファイルマッチ体験会 - 48's diary

1ファイルマッチ体験会1 リーグ表

1ファイルマッチ体験会1 勝敗表

 

10チームで総当たり、9回裏表の計18回戦となりました。

上位は全勝の地ビール、15勝3敗のshogi686_sdt5、13勝4敗1分の真れさ改1ファイル、13勝5敗のsample4-5aと手前味噌ですがうちの子らが上位を占めてしまいました。

真れさ改もノーマルれさ改に比べ相当強かったですね。作者の池さんもバグがあるのは分かっているのでそのうち修正したいと仰っていたので修正されたのかもしれません。

 

うちの子らの順位はもう少し分散すると思っていたのですが、ノーマルれさ改の位置から考えても皆さんもう少し頑張りましょうといったところでしょうか。

floodgateレートで地ビールは2500くらい、sample4-5aが1500くらいですので目標にして頂ければと思います。LesserKaiは700くらいでしたっけ?

 

sample4-5aの方は過去のサンプル含めて公開しておきます。

shogi-eval/sample4-5a.py at master · bleu48/shogi-eval · GitHub

 

ただ、これはプログラム簡便のため探索深さ固定となっており、持ち時間が少なくなっても慌てて指すことはなく時間切れをします。

真面目に大会に出るなら対応しましょう。

 

本体験会でもsample4-5aの時間切れ負けは2度あり、特に9回表の時間切れの対応が遅れたために9回裏の開始に間に合わず異常負けとなったところです。

対戦エンジン的には9回裏の負け後に9回表の最後の指し手を返しておりました。酷いですね。

 

簡単にsample4-5aの改善点を説明しておきます。

探索部は体験会前に公開したネガアルファ法です。

 

アルファベータ法で結構探索時間に効いて来るのが候補手のオーダリングです。

今回簡単に実装してみました。(雑すぎると言われそう)

以前探索前に手を選ぶので駒を取る手や成る手を上位にする話がありましたが、同じ考え方を使ったオーダリングです。Pythonでリストの並べ替えはラムダ式を使えば簡単に一行で書けます。

    legal_moves = list(board.legal_moves) # いわゆる合法手リスト
    legal_moves = sorted(legal_moves, reverse=True, key=lambda x:x & 0b111100000100001110000000) # 取る駒,成るフラグ,打ち駒の部分をフィルタして逆ソート
    for m in legal_moves:

 

次の肝は評価関数です。

以前からサンプルを出していますがNNUE型のファイルを直接読んでいます。

今回は多方面で愛用されておりますKristallweizenを用いました。

デフォルトのモデル型なら以下のままで読めるはずです。

nn_data = open("eval/nn.bin", "rb").read()
i = 178 # NNUE型の評価関数の特徴表示文字列長(デフォルト値)
bias1 =  array( unpack_from("<"+str(256)+"h", nn_data, 16+i) )
weight1 = array( unpack_from("<"+str(256*125388)+"h", nn_data, 16+i+256*2) ).reshape(125388,256)
bias2 =  array( unpack_from("<"+str(32)+"i", nn_data, 16+i+2*(256+256*125388)+4) )
weight2 = array( unpack_from("<"+str(512*32)+"b", nn_data, 16+i+2*(256+256*125388)+4 + 4*32) ).reshape(32,512)
bias3 =  array( unpack_from("<"+str(32)+"i", nn_data, 16+i+2*(256+256*125388)+4+ 4*32+32*512) )
weight3 = array( unpack_from("<"+str(32*32)+"b", nn_data, 16+i+2*(256+256*125388)+4+ 4*32+32*512 + 4*32) ).reshape(32,32)
bias4 = unpack_from("<"+str(1)+"i", nn_data, 16+i+2*(256+256*125388)+4+ 4*32+32*512 + 4*32+32*32)[0]
weight4 = array( unpack_from("<"+str(32*1)+"b", nn_data, 16+i+2*(256+256*125388)+4+ 4*32+32*512 + 4*32+32*32 + 4*1) )

 

そして盤面評価ですね。

特徴ベクトルは他の関数で作っています。k0、k1は自玉敵玉の位置、fv38は玉以外の駒の位置、fc38qはそれを相手から見たものです。

これらが入力となり、あとはnumpyを使った簡単なニューラルネットワーク構成です。

つまり、差分更新やSIMD演算などのNNUEの特徴は生かしていません。

但し入力ベクトルが81×1548の長大なサイズに対して38個所に1が立つだけのものですので,これを38巡のループにする程度の処理をしています。

def eval(board): # NNUE型の評価関数(キャッシュや差分更新など無し)
    k0, k1, fv38, fv38q = fv40(board) # 特徴ベクトルの取得
    x = bias1.copy() # 手番側特徴
    for j in fv38:
        x += weight1[k0*1548 + j] # 手番側一層目
    x2 = bias1.copy() # 相手番特徴
    for j in fv38q:
        x2 += weight1[k1*1548 + j] # 相手番一層目
    x = append(x,x2).clip(0,127) # 結合してクリップ(Clipped ReLU)
    x = ( (bias2 + weight2.dot(x) ) // 64).clip(0, 127) #二層目
    x = ( (bias3 + weight3.dot(x) ) // 64).clip(0, 127) #三層目
    x = bias4 + weight4.dot(x) #四層目
    return (x // 16)

 

一応お断りをしておきますと、PythonC++では負の整数除算が異なりますので正確にはNNUEと同じ値になるわけではないです。オーダリングの雑さ加減から比べたら可愛いものです。気にしないでいいと思います。

 

次のイベントまでに切れ負けしないような処置と探索部の工夫を加えようかとは考えています。

あ、それから重要な反省点ですが、新参者歓迎です。

気楽にプログラム作ってみてください。

 

---

追記:

sample4-5a等のファイル名については適当に更新しているので細かく気にしないで下さい。一般的なソフトウェア開発と異なり、新旧バージョンの比較対戦などを頻繁に行うためにgit管理などが適さないためどんどんファイル名を付けていっているだけです。

4も探索深さ4固定の意味でもありますが、また変わるかもしれません。

---

追記2:

numpyの処理はnumpyのバージョンやCPUアーキテクチャによって結構処理速度が代わることが確認されています。もちろんnumpyのバージョンは新しい方が良く,CPUは廉価化したZen3や最新のZen4などAMDが何故かコストパフォーマンスが良い感じです。

手元計測ではRyzen 5 5625Uで12knps程度,Ryzen 9 7950Xで20knps程度は出るようです。インテルは最新世代のものでこれらの間の値です。

CPUもPythonもnumpyも年々高速化されていますので来年にはもっともっと速くなっているかもしれません。

もちろん,地ビールはGo言語実装ですのでこれより一桁以上高速で,やねうら王やshogi686_sdt5などの高度なC++実装は更に数倍速いです。