今のfloodgateの上位について

以前,下位の話を書いた

bleu48.hatenablog.com

 

floodgateは随分とデザインが様変わりして以下のようなレート表記になっている。

 

この上位層にいるtest768が短期レートで突出したグラフになっているが,手持ちの空いたマシンでbullet-shogiの習作を放り込んだもので,CPUとしてRyzenの9900X程度である。12コアなので特段ハイエンドと言うほどでもない。23勝1敗でレート4400といった体であるが,負けるまでレートが付かないルール上の形式的なもので正確な数字と言うわけではない。

 

NNUEの構成をAobaNNUEと同じ768-16-64にしている実験である。

同じものをN150でも放り込んでいるが現状AobaNNUEにやや劣っているようである。もう少し様子をみる。

 

ということで,現状floodgateにそれほど高スペックのマシンは居ないようである。

AI界隈ではこの程度の連勝記録に意味は無いので貴重なZen5は撤退するが,N150は放置しておくので対戦相手になって頂ければ幸いである。

 

川崎観光

世界選手権の決勝を二年も逃すと連休の川崎で微妙に時間があまります。

ということで記録しておきます。

 

川崎と言えば旧東海道の川崎宿です。

品川についで2番目の宿場町となります。JR東海道線だと一駅ですね。

以前決勝まで残った際にはこの近くのホテルでしたが博物館に入る余裕はなかったのでした。

 

江戸上りの特別展がありました。

 

 

川崎宿と琉球は交流があったというのを随分とネタにしてイベントをやっているようでした。

 

 
川崎駅地下にクラフトビールのスタンドがありました。

東海道ビールという名で自社タップ9に他社9という凄いことに

 
締めは飲食店。

川崎産業振興会館の裏手にあるインドカレー屋です。

なんやかんやで選手権に来るたびに行っています。

はじめてチーズナンを頼んでみました。

危険です。食べ過ぎてしまいます。

 

最後にここ結構有名店ですよね。駅ロッカーに荷物を預けて少し歩いて公園の隣。

随分前からチャンスを伺っていました。最終日新幹線で帰る直前の最後のランチでした。

チキンビリヤニとマンゴーラッシー

 

懇親会の中華料理店は毎年なので割愛します。

 

wcsc36反省会

昨年はこちら

wcsc35反省会 - 48's diary

 

www.computer-shogi.org

相変わらず乗り物に弱いので移動するだけで疲弊しています。

 

まずは個人主観のまとめから。

一次予選はシードされているので、二次予選から参加。一次予選の途中から会場入りして竹部先生のカフェで説明のなが~い紅茶を頂きます。(昨年は康光ブレンドのコーヒーでした)

面識のある方へのあいさつと新規参加者(特に学生さん)へあいさつ回りです。竹部先生が圧をかけようとするのですが、電竜戦への誘導を目的に気さくなおっさんを演じなくてはなりません。今年は新規の学生チームがいくつもありました。(そして強かった)

一次予選が終盤になるあたりで新参側の方が二次予選抜けするチームが多いのではと話題になりました。つまり今年の新規参加者は結構レベルが高いということです。

 

結果的に一次予選抜けのラインがレーティング4000オーバーどころか4300などと言う話が飛び交っています。

そうするとうちのシード権すら危ういということになります。

 

二次予選です。

朝から縁起物であるワッフルをコンビニエンスストアで購入。偶然ハニワさんと遭遇。

朝一からAri Shogiさんと当たり先手番なのに完敗。先行き不穏です。

二戦目はGokakuさん。立ち話をいろいろしたい相手ですが、初戦二戦目と相手が不在で他チームの対戦を散歩しながら見回っていると終戦しており、勝利。全敗回避達成。

三戦目はAobaZeroさん。山下さんは電竜戦含めここのところギリギリで決勝入りを決める強運を発揮されています。(電竜戦ではバレルハウス賞をお送りしています)

マシンスペックは結構良いクラウドマシンだそうですが、中身は半年前に公開したAobaNNUEだそうです。実際強いですね。完敗です。

四戦目はDaigorillaさん。こちらも常連ですが、この時間帯は居られないようで他チーム観戦タイムになってました。相手の回線不良か切れ負けされていました。残念。

五戦目はこだぬきさん。前日に伺ったのですがたぬきチームの野田さんの同人誌読者で実際に交流のある弟子だそうです。たぬきチルドレンです。(そういえば私もたぬきチルドレンでもありましたか)初参加で一次予選を勝ち上がった方ですので相当強いと予想していたのですがなんとか勝てました。

六戦目はponkotsuさんです。もはやポンコツではないと言うワードを放ってずいぶんになる気がします。GPUが16枚と聞いて、こりゃ駄目だとすぐにわかります。コスト計算を聞いてみるとやはり相当の負荷のようでした。

一回戦のAri Shogiさんと同じ棋譜ですが偶然ではないそうです。

七戦目はあすとら将棋さんです。あすとら将棋さんもここ数年上位常連となってますので相当強いのは覚悟しましたが、先手番を頂いたのが大きいのかなんとか勝てました。

八戦目は六角堂狸さん。こだぬきさんの親分です。

先手持たれて勝てる気がしないので綺麗な評価関数グラフです。

九回戦、ラストはねね将棋さんです。こちらはいつも面白い取り組みをされており、個人的には独創賞の対象と思っていました。LLM界隈で流行りのMoEをNNUEに導入されています。探索速度が稼げて、学習がうまく働くように、様々な試み・苦労をされていると伺いました。


 

ということで5勝4敗で二次予選敗退。14位で来季のシード権だけ獲得となりました。

市販のGPU一枚でこの順位だと上出来と思いますが、決勝入りを目指すには高額クラスタ機が必要でしょう。

そんなことをするくらいなら皆にビール奢る方がマシと考えているわけです。

 

で、懇親会のプレミアムビールの件は今年はうまくいきました。

事前に通販サイトのURLまで送りつけて現金も振り込んでおきました。これで駄目なら買って持っていくしかない最終手段です。

ヤッホーブルーイングのよなよなエールとインドの青鬼を選定いただきました。懇親会では飛ぶようになくなりましたのでそこそこウケたものと思っておきます。

 

決勝戦に関わらず、一次予選のレベルも上がってきたおかげで先手問題は引き続き重大になってきます。電竜戦では様々な解決案をおいて対応してきたいと思っていますので選手権は破綻するところまで見守りたいですね。

 

選手権ルールに関しては他にも以前から気にかけている点は多く、上記のponkotsuさんのように他者棋譜の取り込みにより同じ棋譜の再現が行われたり、一部の選手間で事前・最中関わらず定跡・評価関数・教師などのデータ共有が行われたりと不透明な動きが多くあります。

電竜戦では禁止している会期中の取り込み行為ですが、選手権では伝統的に許容されているようですので同じ棋譜・近親の評価関数がたくさん生まれる要因のひとつと思っています。

こちらも電竜戦の差別化と思っていますのでマニアの方は心にとめておいてください。

 

最後に、先手後手の差異をなくす指定局面戦および、先手有利を限界まで削る持ち時間ゼロ戦の開催を宣伝して終わります。7月10・11日です。

選手権のままで構いませんので皆様のエントリーお待ちしております。

 

denryu-sen.jp

 

ARMとx64

今日はちょっとしたついでにビックカメラに寄りました。

もしかしたらと思って店員にQualcommのSnapdragon X2 Elite Extreme搭載機の店頭展示があるかと聞いてみたらありました。

 

 

本機は今月に入ってあちこちのレビューサイトが書いているとおり,18コアの最新ARMチップでNPUも80TOPSと過去最高レベルのものです。ノートPC界隈でAMDやインテルすら千切ってしまいかねないレベルです。

Appleの方と比較するとしてもM5 Maxとの比較になると思いますが,それにしては30万円台なので格安と言えるかもしれません。

 

実のところ前世代のX Eliteの方を少し前にテストしており,性能や動作の方をチェックしています。一番心配の互換性はよほど特殊なものでない限り驚くほどすんなり動きます。そして違和感がないくらいの速度を誇ります。一部レアアイテムのドライバ類が動かないとの報告があります。

AVX2命令を含むプログラムですらARM上のSIMD命令に差し替えて動作しているようで非常に高速です。

手元でコンパイルする場合はARM向けにビルドするのですがMSのコンパイラの最適化が甘いためかX64ビルドのバイナリに比べそれほど速くなりません。互換性重視のために保守的な対応になっているらしいです。

比べてLLVM環境でビルドすると非常に高速です。自前プログラムはせっかくですのでVisualStudioでもclangを使いましょう。

 

NPUについてですが,これはまぁ以前から書いているようにアクセラレータと言うより省電力支援のようなものです。実際onnxモデルなどを実行してみるとCPU動作とさほど変わらないレベルで動作するものがCPU負荷なしで動きます。CPU動作を大きく上回るのを期待したので少し残念に思いましたが,逆に考えると高スペックのCPU性能を物語る結果でもあります。

12コアのX Eliteに対する50TOPSでそうなのですから,18コアのX2 Eliteに対する80TOPSでも恐らく似たような感じでしょう。

 

と言う感じなのでX2はかなり期待していいもの思っています。

しかしながら,世間的にはまだまだ不安要素のあるものでしょう。廉価版が出て好評を得ることが出来てこそハイエンドに市場価値が生まれると思います。X2 Plus待ちというところです。

 

ところで,ARM勢としてはNVIDIAもN1とかN1xとか言うものが準備中です。こちらも20 コアだとかRTX 5070相当とか結構高パフォーマンスの前評判です。実機が出てみないと何とも言えませんが期待値が上がっています。もちろん廉価版が出て世間の評判が決まると思っています。ハイエンド機が少量流通したくらいでソフトウェア対応は進みません。成功するにしても少し時間がかかるでしょう。Qualcommと協調関係で流行らせてほしいものです。

 

ARM勢で前述もしたAppleですが,廉価版のNeoが売れていると評判のようです。A18 Proだそうですのでパフォーマンスコアは2コアです。スマホ類の省電力コアはあまり役に立たないのですが4コアついています。シングルスレッド性能が体感速度に影響が大きいということでM1に匹敵するという話になっています。

ハイエンドはM5 Maxですが,これが意外にM4 Maxよりコア数が減っています。名前がスーパーコアと呼ばれて恥ずかしい感じですが,単に呼称が変更になったものです。以前の省電力コアをパフォーマンスコアと呼んでいますが幾分クロックアップされているようです。M5リリース段階ではこの呼称スライドを行っていないので非常に奇妙なことになりました。M5のパフォーマンスコアがM5 Maxのスーパーコアで,M5の省電力コアがM5 Maxのパフォーマンスコアです。ベンチマークでもそうなっています。

そしてM4 Maxより単コア性能が伸びていますが,コア数が減っています。ここ数年のインテルと同じくがんばれって応援したい感じです。

 

で,締めにX64の方もメモっておきましょう。

インテルはCore Ultraの300台(Panther Lake)や270K(Arrow Lake)の微修正で時間稼ぎをしている感じでしょう。本命のNova Lakeが来るまで大きな改善は期待薄と市場の皆が想定しているところです。

AMDはインテルの動向を見る余裕があり先手を打てるにも拘らず多方面保留の様相です。恐らく利益率計算で問題ないとの判断でしょう。Zen6世代はコア数が増えるそうなのでインテル相手の勝算はあると見込んでいると思われます。

 

まぁいずれにしても実機が出てみないことには面白くないですね。

取り急ぎ2026市場はQualcommが先行といったところです。個人的には随分久しぶりに楽しそうな雰囲気に期待大です。

悲しいのはメモリやSSDなどが高騰している点でしょうか。

 

ーーー

4/29追記:

TSMCがARM株を手放したそうです。

前述したほぼすべてのハイエンドCPUを製造しているTSMCがARM投資を下げたのですから、自ずと未来のパワーバランスが理解できるでしょう。

抜けて出るのはAMDかインテルか。

 

 

TurboQuantの話(さらなる低精度)

低精度の演算の話題です。

GoogleのAIチームによるTurboQuant

research.google

 

以前から4ビットの話をしていますが、今回は更に減らします。

MXFP4やNVFP4の話(ブロック浮動小数点数) - 48's diary

fp4の話(4ビット浮動小数点数) - 48's diary

 

基本的にはベクトル表現として極座標を使うというアイデアです。

ざっくり言うと低精度となった直交空間ベクトルより極座標表現ならさらに削れるという感じでしょう。

 

コミュニティによる実験実装がオープンソースであります。

GitHub - tonbistudio/turboquant-pytorch: From-scratch PyTorch implementation of Google's TurboQuant (ICLR 2026) for LLM KV cache compression. 5x compression at 3-bit with 99.5% attention fidelity. · GitHub

2ビット精度で破綻していないこと、3ビット精度で実用になりそうなパフォーマンスを示しています。

 

Google、LLMのメモリ消費を6分の1に削減する新技術「TurboQuant」発表 - ITmedia NEWS

こちらのようにニュース記事ではfp16(16ビット)に比べてメモリ使用量が何分の1などと過激に出されていますが、本件はLLMにおけるKVキャッシュに限る話ですのであまり踊らされないようにしましょう。

LLM界隈では既に4ビットが実用化されていますので、これが3ビットになるだろうという影響です。

他分野でここまで荒い演算を許すところはないかと思いますので、波及効果はあまりないかもしれません。

 

AIハードウェア分野でもこういった座標変換系が出てくると専用命令が追加されるかもしれませんね。

もしくはベクトル表現のデータ形式の定義やハードウェア実装ですね。

モデル本体も極座標表現で配布される可能性も出てきます。

 

bullet-shogiの話

コンピュータ将棋界にNNUEがリリースされたのが2018年です。

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

この件で野田さんのチームが独創賞となっています。

 

同年中に様々な改良を試みて独自の推論エンジン、学習器を作成した件は以前も書きました。学習器はどうやら稚拙だったらしく初代Ryzen8コアをもってしても30分で500万局面程度の学習速度しか出ていなかった記録があります。

これが二桁違ったら景色は変わっていたかもしれません。

 

その後、野田さんの移植によりNNUEがチェス界に持ち込まれ、そこで花開きます。

nnue-pytorchという学習器がStockfishの標準的な学習器となっています。これを再度、野田さんが将棋界に逆輸入したのが今のNNUEの標準的な学習器です。

nnue-pytorchのメモ - 48's diary

 

NNUE自体は小さな隠れ層三層のニューラルネットワークですのでCPUでの高速推論が持ち味ですが、学習器としては軽すぎてほぼデータローダがボトルネックになります。

ということでこの将棋用にデータローダを書き換えた点が素晴らしい貢献と言うことです。手持ちのRTX3080搭載ゲーミングノートPCで10億局面を1時間で学習できるくらいの高速化です。

 

で、タイトルのbullet-shogiの話です。

bulletはチェス界でnnue-pytochに変わろうとする学習器でRustで開発されています。

それを将棋界に持ち込まれたのがbullet-shogiですね。

https://github.com/SH11235/bullet-shogi

https://github.com/jw1912/bullet

 

結論から言いますと圧倒的に速いです。ボトルネックが大幅解消されたのか、上記PCで100億局面でも2時間かからないペースです。nnue-pytorchではあまり負荷がかからなかったCPUおよびGPUが熱々になります。

 

では使い方の概要。

Rustインストールは普通の64ビットWindowsのデフォルトでOK。間違えてもMSYS2などとの互換性のあるGNU版を入れてはいけません。CUDAが叩けなくなります。

CUDA_PATHやPATHなどの環境変数は適当に整えておきましょう。VisualStudioは2022でも2026でも大丈夫のようです。nvccなども必要ですのでCUDA Toolkitも必須。

Rustのライブラリであるcudarcが幅広いCUDAバージョンに対応しているのでCUDAのバージョンはあまり気にしなくて良さそうです。

 

現時点での本体はexampleフォルダにあるshogi_simple.rsのようですのでビルドに必要なコマンドは

cargo build --release --example shogi_simple

となります。

releaseフォルダ以下にshogi_simple.exeが出来ますので適当なオプションをつけて実行しましょう。

 

デフォルトの入力型がhalfka-hmだそうですので以下のようにするとhalf-kpになります。スレッド数はCPUのスレッド数限界まで使うのが速そうです。

shogi_simple.exe --features half-kp --data data.bin --scale 508 --threads 16

 

ソースや-hのオプションでオプションの説明が出るので適当にモデル型など変えて遊べそうですね。

最後に野田さん移植のnnue-pytorchとの大きな差異として、学習器部分のオプティマイザやスケジューラがあります。

オプティマイザのデフォルトがRanger(RAdamの改良版)だそうです。

オプション設定なども可能なので弄りどころのひとつでしょう。

 

ーーー

おまけ:

ボトルネックになる部分があると劇的に遅くなります。SSDはNVMe必須ですし、GPU接続はx16でしょう。GPUはRTX3060くらいでもデータローダが足を引っ張る感じですので8コア以上のCPUを使いましょう。

ストレージやバスがボトルネックになるため、ハイエンドは無駄なので多数実験するならミドル級を複数用意する方が捗ると思われます。

 

続Go 1.26のSIMD実装

前回に続く

bleu48.hatenablog.com

 

前回SaturateToInt8がAVX512依存してしまう話をしていた。

世間的にもAVX2対応が基準だろうと某AIが言うのでそのように対応していたが、そもそもGo言語のライブラリでしれっとAVXバージョン混在状態になっている理由は何故かと考えると、サーバサイドはインテルもAMDもAVX512対応しているからであることに気づく。

Go言語の主戦場は多コアサーバなのでこれでよかったのだ。

 

今回問題となったSaturateToInt8もよくない。

これは各要素を8ビット幅に収める命令だがSIMD命令を使わないと個々の変数を8ビットに収めてSIMDレジスタに格納する手間となる。これはGo言語では相当遅い。

なお、func (Int16x8) SaturateToInt8は128ビット、func (Int16x16) SaturateToInt8は256ビットであるにも関わらずAVX512の命令なのだ。

では、開き直って512ビットのfunc (Int16x32) SaturateToInt8を使えばどうだという話になる。で、AVX512依存を覚悟して他の命令群も512ビット化するとどうなったかというと結構高速化した。全体で2割程度、局所的にはもっと出ていることになる。

 

更に言うとAVX512はZen4とZen5で速度向上が大きい。Zen5でAVX512は効く。

本件メインの演算はDotProductPairsSaturatedであるが、これもAVX2の256ビット命令とAVX512の512ビット命令がある。この命令の実行速度がZen4とZen5の大きな差である。

 

ということで、Zen5においてAVX2実装とAVX512実装で倍くらいの速度差が実現した。

 

 

更新しながら様々なバージョンをFloodgateに投入して迷惑をかけている感があるが、恐らく一番強いのがgo_test13na3でレート2700を超えている。2800というとgpsfishの基準レートなのでもう少しといったところだろうか。ちなみにこれだけZen5である。

念願のYSS1000Kとの直接対局は少ないが超えたかどうかの判定は楽しみである。

 

技術的な話を少ししておくと現状前向き枝狩りが軽いLMRのみである。Stockfish由来の様々な枝狩りを使うのが今風なので、伸びしろを残しているというかコーディングが面倒で放置しているというかメインループが長くなるのが嫌とかそんなところである。まぁ習作なのでコピペプログラミングみたいなことをしても仕方ないってのもある。

気が向いたらStockfishに寄せるかもしれないし、別の伸びしろを見つけるかもしれない。

 

---

インテルがサーバだけAVX512対応している件、邪推してみた。

Zen5が出ている現状AVX512はAMDの方が速い。インテルが対応しても勝てる見込みがない。が、まだ普及していないので非対応とすれば世間的にはAVX2バイナリが流通することになって差が縮まるということだろう。

サーバ側は前バージョンで対応したものを下げることができなかったのでそのまま残していると考える。まぁ、クライアント側はEコアが非搭載なのでしかたないという体になっている。

まぁSIMDが活躍する分野はどの程度あるか分からないが動画音声のエンコードデコード、ファイル圧縮展開、暗号化復号化などは大きく寄与するだろう。そっかサーバには不可欠だな。