TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

cshogiにGPS将棋のdf-pnを移植(その3 ソース解説)

GPS将棋のdf-pnを1つのソースファイルに移植したことで、LLMにコード全体をコンテキストとして与え、解説させられるようになった。 GPS将棋のdf-pnは、詰将棋探索アルゴリズムの知見が数多く詰め込まれた非常に価値の高いコードである。しかし、前々回の記事…

cshogiにGPS将棋のdf-pnを移植(その2 攻め方に玉がない局面に対応)

前回、cshogiに移植したGPS将棋のdf-pnを、攻め方に玉がない局面に対応した。 対応内容 既存のPositionクラスのcheckerBBを玉がない場合、空にする findCheckers()、hiddenCheckers()を玉なしの場合、空にする isOSのassertを玉がない場合に対応 探索アルゴ…

cshogiにGPS将棋のdf-pnを移植

以前に、GPS将棋(OpenShogiLib)のdf-pnをdlshogiのAperyベースに移植することを試みたが、変更が多すぎて途中で挫折したことを書いた。今回は、Codex(GPT-5.4とGPT-5.5)を使って、移植できるか試した。 移植の難しさ GPS将棋は、盤面管理、合法手生成が、Ape…

dropless MoE(Mixture of Experts)を試す その6(推論速度比較)

MoE

前回、C++で実装したTensorRTプラグインを使ったMoEの推論処理の推論速度を比較する。 比較対象は、 Dense MoE Sparse MoE (自前実装CUDAカーネル) Sparse MoE (CUTLASS Grouped GEMM) の3パターンとする。 比較条件 SwinTransformerのStage 0/1をMoE化 Stag…

dropless MoE(Mixture of Experts)を試す その5(推論処理)

MoE

前回、Pythonで実装したエンジンビルドスクリプトで保存した.engineを読み込んで、TensorRTで推論する処理をC++で実装する。 推論処理 TensorRTのライブラリの使用がメインである。 デフォルトで、CUDA Graphを有効にしている。 CUDA Graphは、プラグインでC…

dropless MoE(Mixture of Experts)を試す その4(エンジンビルド)

MoE

前回、実装したプラグインを使用して、カスタムノードを含むONNXをTensorRT の serialized engineに変換する。 dlshogiでは、C++でエンジンビルドを実装しているが、今回はPythonのtensorrtライブラリを使用して実装する。 生成したserialized engineを後でC…

dropless MoE(Mixture of Experts)を試す その3(プラグイン)

MoE

前回、ONNXにエクスポートしたカスタムノードに対応する処理をTensorRTのプラグインで実装する。 TensorRTのプラグイン 公式ドキュメントに記載されている通り、プラグインクラスとプラグイン クリエーターを実装する。 プラグインがREGISTER_TENSORRT_PLUGI…

dropless MoE(Mixture of Experts)を試す その2(ONNXエクスポート)

MoE

前回、PyTorchで実装したMoE対応のSwinTransformerモデルをTensorRTで推論できるように、ONNXにエクスポートする。最低限、grouped_mmのみをカスタムオペレータとすればよいが、router + dispatch + expert + combineを分離するとTensorRTのグラフとpluginの…

dropless MoE(Mixture of Experts)を試す

MoE

dlshogiのモデルはパラメータを増やすほど精度が向上することが60ブロック768フィルタのサイズまで確認できている。 しかし、探索速度が落ちるため、対局した際の強さは、40ブロック512フィルタのモデルには及ばない。MoE(Mixture of Experts)は、パラメータ…

【dlshogi】QKNormを試す

最近のLLMでは、AttentionにQKNormが使われている。 特に、RMSNormを使う実装が主流になっている。世界コンピュータ将棋の会場でnshogiの開発者と話した際に、SwiGLUとQKNormが効果があったということだった。 SwiGLUは、dlshogiでも採用して効果が高いこと…

Hugging Face TrainerでMNISTを学習

PyTorchで画像分類モデルを学習するとき、学習ループやチェックポイント管理、TensorBoard対応などを毎回自前で実装するのはやや煩雑である。 Hugging Face Transformers の Trainer を使うことで、NLP用途だけでなくCNNのような画像モデルでも、シンプルか…

【dlshogi】torch.compileに対応したら学習が1.6倍速くなった件

torch.compile は、PyTorch 2.0 以降で導入された高速化機能で、既存の PyTorch コードをほとんど変更せずに JIT コンパイルして最適化できる仕組みである。 主に GPU 実行時のオーバーヘッド削減やカーネル融合によって性能を向上できる。dlshogiの train.p…

【dlshogi】TensorRTの推論処理の最適化でNPSが1.3倍になった件

先日の世界コンピュータ将棋選手権の会場で「あすとら将棋」さんから、GPUへのデータ転送を推論と並列化すると1割くらい速くなるという話を伺って、さっそく実験してみた。 データ転送の並列化 これまでは、一つのGPUを複数スレッドで共有して、1つのスレッ…

【dlshogi】TransformerモデルのPython実装

将棋AIの大会で、DL系の開発者が減少傾向にあるため、dlshogiの成果物を少し共有したいと思います。 TransformerのPython実装 第5回電竜戦と第35回世界コンピュータ将棋選手権で使用したResNet+TransformerモデルのPython実装をGitHubのmasterブランチに追加…

第36回世界コンピュータ将棋選手権 結果報告

5/3~5/5に開催された第36回世界コンピュータ将棋選手権に「dlshogi」というプログラム名で参加しました。 大会の概要 今回は、55チームが参加しました。 第1予選、第2予選を通過した上位8チームで総当たりのリーグ戦で決勝戦が行われました。参加チーム数は…

【バイブコーディング】レトロ戦略ゲームを作る その7(グラフベースマップ生成)

前回、制約ベースのWave Function Collapse (WFC)アルゴリズムでマップの自動生成を試したが、戦略的なマップは生成できなかった。 今回は、グラフベースの手法を試す。 戦略グラフ グラフベースの手法は、本拠地、争奪エリアのようなノードと、ノードをつな…

GPS将棋(OpenShogiLib)のdf-pn(詰将棋)をUSI mateエンジンとして移植

以前に、GPS将棋(OpenShogiLib)のdf-pnをdlshogiのAperyベースに移植することを試みたが、変更が多すぎて途中で挫折した。Aperyベースにするのは一旦保留して、単体のUSI mateエンジンとして移植することにした。 Windows向けの移植 元のOpenShogiLibは、古…

【バイブコーディング】レトロ戦略ゲームを作る その6(マップ自動生成)

前回は、バイブコーディングでAIをルールベースで実装して、SPSAでパラメータチューニングすることで遊びごたえのあるAIを実装した。今回は、マップの自動生成を試す。 マップの自動生成 まず、ChatGPTで、ゲームのマップ自動生成の手法について調査した。 …

【バイブコーディング】レトロ戦略ゲームを作る その5(AIを強くする)

前回、マップの保存/読み込みに対応して、ゲームボーイウォーズのマップを変換して取り込めるようにした。 しかし、AIが弱すぎてゲームとして楽しめなった。今回は、AIを強化する。 ターン制戦略ゲームのAI ゲームボーイウォーズのようなターン制戦略ゲーム…

【dlshogi】ResNet+Transformerモデルのアーキテクチャ改良

昨年の世界コンピュータ将棋選手権、電竜戦では、モデルサイズを大きくすることで強くすることを試みたが、精度は上がるものの探索速度が落ちることで強くできなかった。そこで、現在一番強い40ブロック512フィルタのモデルサイズで、モデルアーキテクチャを…

【バイブコーディング】レトロ戦略ゲームを作る その4(マップ保存/読み込み)

前回、レトロターン制戦略ゲームにマップエディタを実装した。今回は、マップの保存と読み込みを実装する。 また、テスト用にゲームボーイウォーズのマップを再現して、プレイできることを確認する。 マップの保存と読み込み マップエディタで、右クリックの…

【バイブコーディング】レトロ戦略ゲームを作る その3(マップエディタ)

前回、レトロ戦略ゲームの画像素材を生成AIで制作したものに置き換えたことで、地形やユニットの識別ができるようになった。今回は、マップを編集する機能を実装する。 マップエディタ 実装方針 マップをどのように実装するのがよいかCodexに相談したところ…

【バイブコーディング】レトロ戦略ゲームを作る その2(画像素材)

前回、レトロ戦略ゲームの基本部分を生成した。前回は、サイズなどの形式だけ合った素材をコードインタープリタで生成したので、何のユニットかわからなかった。 今回は、画像素材を生成AIで生成し、既存の素材を置き換えることを試した。 ドット絵 画像素材…

【バイブコーディング】レトロ戦略ゲームを作る

ゲームボーイウォーズというターン制戦略ゲームがある。1991年に発売されたゲームボーイ向けのゲームだが、当時結構遊んでいた。 続編で、ゲームボーイウォーズターボや、ゲームボーイウォーズ2といったシリーズが発売されている。あらかじめ用意されている…

【Androidアプリ】Audio Pitch Tuner

先日、Microsoft Storeでリリースした、Pitch Tunerを、Androidに移植して、Google Playで公開した。play.google.com「Pitch Tuner」は使われていたので、「Audio Pitch Tuner」とした。 バイブコーディング C++/WinUI3からKotlin/Jetpack Composeへの移植を…

Microsoft Storeでコマンドラインツールを公開する

以前にVectorで公開していた「WAVファイル変換・抽出ツールwavext」を、Microsoft Storeで公開した。apps.microsoft.com wavext mp3やflacなどの圧縮音声ファイルや、動画から、音声をWAVとして抽出するツールである。 サンプリングレート変換やステレオ/モ…

【Windowsアプリ】Vocal Pitch Monitor for Windows

先日改善したチューナーアプリのピッチ解析をベースに、AndroidとiOSでリリースしているVocal Pitch MonitorのWindows版を作成して、Microsoft Storeでリリースした。apps.microsoft.comWindows版では、スマホ版の機能に加えて、録音時間を最大10分まで拡張…

Python から VST2 インストゥルメント(VSTi)を読み込んで音を鳴らす その3

前回、Kontakt5で生成した音色×音階のデータを使うと精度が下がったことを記載した。その後、データクリーニングを行ったところ、精度が下がらないことがわかった。 自動データクリーニング ACFベースのピッチ解析とSwiftF0のどちらも正解のMIDIと異なるデー…

Python から VST2 インストゥルメント(VSTi)を読み込んで音を鳴らす その2

前回、PythonでVSTiを読み込んで音を鳴らす方法について調べた。今回は、Kontakt5のライブラリから音色を連続的に切り替えて自動的にWAVファイルを作ることを試す。 Kontakt5の音色切り替え 前回も記載したが、音色は、VSTiのインターフェースで切り替える方…

Python から VST2 インストゥルメント(VSTi)を読み込んで音を鳴らす

前回、録音した音声にSwiftF0で疑似ラベルを付けて、決定木を学習することを試した。学習したモデルを使うことで、アコースティックギター、エレキギター、エレキベースで、安定してピッチ推定が行えるようになった。ギター、ベース以外にも様々な楽器のピッ…