2022年版 やねうら王質問スレッド

やねうら王に関するあらゆる質問はこの記事のコメント欄にお願いします。
ふかうら王の件もこの記事のコメント欄でお願いします。

質問内容は、然るべき場所(主にやねうら王Wiki)に転載させていただいたあと、そこで回答し、ここの質問投稿自体は1ヶ月程度で削除していきます。

また、質問前に下記のWikiをご覧ください。ほとんどすべての情報は、このWikiに書いてあります。

やねうら王Wiki : https://github.com/yaneurao/YaneuraOu/wiki

2022年版 やねうら王質問スレッド」への85件のフィードバック

  1. ふかうら王のインストール手順にTensorRTとCuDNNのバージョンが提示されています。
    TensorRT : 8.2.4.2
    CuDNN : 8.4.0.27

    正しくは、下記ではないでしょうか?
    TensorRT : 8.4.0.6
    CuDNN : 8.2.4.15

    • そこ、まだ新しいバージョンで動作確認とれてないんです。
      何かの節目節目に新しいバージョンで動作確認して、Visual Studioの.propファイル更新していきます。
      (あまり頻繁に書き換えても開発している人がTensorRTのバージョン変更するの面倒だと思うのでメジャーバージョンアップの時とかに更新していきます)

  2. 「やねうら王のインストール手順」 のページにある「定跡ファイルのダウンロード先」の項目に、「 評価関数ファイルのダウンロード先 から探してみてください。」とありますが、「評価関数ファイルのダウンロード先」のリンクが間違っているようで、やねうら王wikiのトップへジャンプしてしまいます。

  3. やねうら王に関するあらゆる質問をしていいというお言葉に甘えさせていただきます。
    『将棋神やねうら王2』はいつになったら発売してくださるのでしょうか?
    有料版ならではの機能、例えば私が喉から手が出るほど欲しい柿木定跡→やねうら王定跡コンバーターのようなものは、有料版に付けていただきたいと思っております。
    『宮本定跡』の唯一の長所は強さでなく、人間的なところです。そこにやねうら王エンジンの棋力が加わったらどうなるのか、考えてみただけで胸が躍ります。

    • > 柿木定跡→やねうら王定跡コンバーター

      いま見たら、柿木将棋の定跡ファイル(KJ2)、わりと読みやすそうな感じなので誰かがコンバーター書いてくれるかも…。

      • 柿木定跡→Bonanza定跡コンバーターは可能な人がおられましたが、匿名で非公開でした。柿木定跡→やねうら王定跡コンバーターも不可能ではないと思われます。柿木定跡、やねうらお様は読みやすいと感じられたようですが、一般人の感覚では逆立ちしても無理なのです。ぜひお願いします!

        • 読みやすいのかと思ったのは、柿木将棋V以降の形式(.KJ2)の方です。それ以前の形式の方は暗号みたいになってますね…。
          棋譜管理ソフトの開発者の方が変換機能を実装してくれないかなぁ…。> .KJ2

        • 前にコメントしたときのメールアドレスの話です。今入力しているメールアドレスだとコメントできてるのでIPアドレスではなくメールアドレスではじかれてるみたいです。

          • あ、そうなんですか。もしかして「てst」って書いてあったやつですか。これ、スパムかと思って、スパムですボタンを押してしまいましたw
            解除しておきました。

          • 直りましたね。ありがとうございます。

            「てst」は先ほど別のアドレスに変えてみる前に試してみたやつだと思うんですけど(もう覚えてない)、
            今のアドレスで書き込めなかったのって5/20あたりに気づいて(結局GitHubで書いた)、それ以前に最後にコメントしたのが1/15なのでもっと前からスパム判定だったんじゃないですかね・・・?

            まぁ直ったからいいか・・・。

  4. やねうら王とStockfishのコードを並べて勉強させていただいてます。
    丁寧なコメント、助かってます。
    【YaneuraOu/source/engine/yaneuraou-engine/yaneuraou-param.h】ではStockfishの内容もところどころ取り入れられてるように思われますが、やねうら王のparam.hの部分はStockfishではどのあたりに該当されますでしょうか?
    Stockfishを追っていても見当たりませんでした。

  5. こんにちは。
    お世話になっております。

    やねうら王wikiを参考に、飛車降る評価関数の作成に取り組んでいます。
    学習を走らせた際に、hirate evalやmove accuracy、test_cross_entropy〜,learn_cross_entropy〜などいろいろな値が出てきます。
    開発者の方々はロスを見て学習の進捗度や成果を判断なさるとお聞きするのですが、具体的にロスとはどの値を指しているのか、
    どこの値がどのように変化していくとある程度成功していると判断できるものなのでしょうか?

    • > ロスとはどの値

      cross_entropyとついてるのがロスですね。(正確には損失関数をcross entropyに設定した時のその関数の値)
      testとついているのは検証用のデータとのロス(違い)、learnとついているのは学習データとのロス。

      前者が下がってないと強くなってない可能性が高いです。

      • ありがとうございます!
        wikiやこちらのコメントのおかげで、楽しみが増えました。
        もうひとつだけお聞きしたいのですが、やねうら王のビルドを行うのにVSとclang,g++ではどのくらい性能差が生じてしまうのでしょうか?

          • そんなに差があるのですね。。
            勉強になります。
            wikiの学習の欄に
            “etaを連続的に変化させるには、
            eta1 0.01 eta2 500 eta1_epoch 100 eta3 30 eta2_epoch 500”
            とありますが、eta1とeta2のみで、徐々に率を落としたいときは2の方を小さくするという認識であってますよね?

            nodchipさんの学習記録も参考にしてますが、”eta1=1e-8 eta2=1.0 eta1_epoch=100″とありました。この場合は1.0に向けてどんどん増やしているってことですよね?
            学習率は進むに連れて下げていくものだと勝手に認識していて、私の認識違いなのか気になりました。。

          • > etaを連続的に変化させるには、

            それKPPTのころの学習なのでNNUEではそんなことしないほうがよろしいです。
            (学習率自体はlossが下がらなくなれば自動的に小さくなっていきます)

        • >>(学習率自体はlossが下がらなくなれば自動的に小さくなっていきます)
          これはnewbob機能がオンの場合の話ですよね?
          この機能リジェクト回数といい使いこなすのわりかし難しいですよね(汗

          • そこはデフォルトでONにしておくのが普通だと思います。> newbob
            気に要らなければ、一定の学習ごとにetaを1/2にするようなコードを自分で追加してもいいかと。

  6. VS2022でビルドしようとすると、{YaneuraOu-5.33\source\eval\nnue\trainer\trainer.h(16,10): fatal error C1083: include ファイルを開けません。’cblas.h’:No such file or directory (ソース ファイルをコンパイルしています eval\nnue\evaluate_nnue_learner.cpp)
    1> apery_book.cpp}
    とでてエラーになってしまいます。
    考えられる理由や改善策はありますかね..

    • NNUEの学習版のビルドは、OpenBLASというライブラリに依存してて、それインストールする必要があります。(OpenBLASとかでググってみてください)
      インストールわりと面倒なので、学習版は、MSYS2 + Clangでビルドするのがお勧めです。

      • お世話になっています。msys2にて学習用のmakeを試みたところ、 下記のエラーが出ます。最新の7.〇〇では問題なくmakeできますが、4.〇〇,5〇〇でこのエラーがでてしまいます。movepick.hの該当する行は最新のものと変わりないので、どう対応するべきか教えていただけますと幸いです。

        In file included from movepick.cpp:1:
        ./movepick.h:38:27: error: no member named ‘numeric_limits’ in namespace ‘std’
        static_assert(D <= std::numeric_limits::max(), “D overflows T”);
        ~~~~~^
        ./movepick.h:38:42: error: ‘T’ does not refer to a value
        static_assert(D <= std::numeric_limits::max(), “D overflows T”);
        ^
        ./movepick.h:22:19: note: declared here
        template
        ^
        ./movepick.h:38:46: error: no member named ‘max’ in the global namespace
        static_assert(D <= std::numeric_limits::max(), “D overflows T”);
        ~~^
        3 errors generated.
        make[1]: *** [Makefile:169: ../obj/movepick.o] Error 1

        • numeric_limitsがstdにないということなのでは。static_assertはコンパイル時のチェック用なので、削除しても動作に影響ないのでそれらの行は消してしまえばよいかと思います。

          ただ、やねうら王の開発方針としては比較的最新の環境でコンパイル通ればいいやと思っているので、いずれ、古いMSYS2(や、古いgcc/Clang)では、コンパイル通らなくなります。

  7. 無事にビルドできました。
    ありがとうございます。

    ソースコード読み比べていて気になったのですが、VSCodeでlearn.cppを近年のやねうら王と2018年のtanuki-で並べたところ、やねうら王側だけ18行の#if defined(EVAL_LEARN)から最後の#endif // EVAL_LEARN
    までアクティブではない色付け(?)となっているみたいで、画像のように薄い色で表示されてしまいます。
    elmo式学習のlambdaの式を変更して、その影響を調べるために、検証しようと思っているのですが、該当部分を書き換えても適応されないみたいです。
    最近興味を持ってばかりの初心者なので、調べても何が原因なのかはっきりせずです..
    教えていただけますと幸いです。

    左 tanuki-2018 右YaneuraOU
    https://i.imgur.com/V3fPVD5.gif

  8. Youtubeの動画拝見いたしました。
    AWSの使用なのですが、動画を参考にやってみようと思います。

    例えばギガ単位の大きいファイルを転送した際などに掛かる通信費等、CPU使用料以外にこれやるとお金高くなるから気をつけろよ要因は何かありますでしょうか…?

    • AWSではネットワーク帯域に関する課金は、下り(download)方向だけですので、将棋AIでは下りはほぼ使っていないので無視できるかと思います。
      インスタンスの終了忘れが一番怖いですね。それ以外は誤差です。(請求明細には翌日に反映されているので、それ見てどれくらいの料金になっているか確認しましょう)

      • コメントしてから迅速にご対応頂き感謝申し上げます。
        使用金額の件、了解です。
        初めてクラウドサービスを借りるのでその点が心配でした。
        使う時には常に切ることを肝に銘じますね。

  9. やねうら王evallearnで学習を行う際はthreadsとusi_hashコマンドをあらかじめlearnコマンド以前に打ち込んでおかなければPCスペックを活かしきれずに学習することになってしまいますか?

    それとも自動的にそのpcのスレッドとメモリは上限まで使用されるのでしょうか?

  10. https://github.com/yaneurao/YaneuraOu/wiki/%E6%80%9D%E8%80%83%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3
    このページの記述、今はデフォルトが1024 MBになったので要らないのでは。

    > ⚠ この値はデフォルトでは16 MBとなっていて、ほとんどメモリを消費しませんが、その代わり、現代のPCでは少なすぎます。かならず、お使いのPCの空きメモリに合わせた値を設定してください。

  11. 現在、gensfen → learn → 新たな評価関数でgensfen →learn … のサイクルを行っています
    2点質問があるのですが、
    ・評価関数ごとにgensfenの速さは変わり得るのでしょうか? 早く作ってくれるときもあれば遅いときもあり困惑しています

    ・gensfenで教師を作る速さを上げるには、コアスレッド増やす以外で何かありますでしょうか?
    12c20tで 深さ9で1千万局面 作成に1,2日かかることもあり、相場が分かっておりません

    よろしくお願いいたします

    • > 評価関数ごとにgensfenの速さは変わり得るのでしょうか?

      普通はそこまで変わらないのですけど、まったくのゼロからですと、評価値がゼロばかりな評価関数だと探索深さがなかなか深くならないので時間がかかる、みたいなところはあるかもです。

      > gensfenで教師を作る速さを上げるには

      深さ減らすのが一番効果的ですね…。イテレーション(gensfen →learn … のサイクル)の最初のうちはそんなに深くしてもあまりそれには見合わないでしょうし…。

  12. やねうら王V7.50にて下記のような定跡ファイルを作成し、飛香落ちで対局したところうまく定跡にヒットしてくれません。

    #YANEURAOU-DB2016 1.00
    sfen lnsgkgsn1/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w – 1
    3c3d 7g7f 0 32 100

      • 上記の件、私の勘違いでした。
        sfen文字列を改めて確認したらそもそも飛香落ちの局面ではありませんでした。

        下記のように修正したら通常通り定跡ヒットします。
        #YANEURAOU-DB2016 1.00
        sfen lnsgkgsn1/7b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w – 1
        7a6b 7g7f 0 32 2

        お騒がして申し訳ありませんでした。

  13. 強い将棋ソフトの作り方の本を読みました。やねうら王の作り方の本は出ないのですか?個人的には、ルールの実装とか指し手生成とかマルチスレッド対応とか色々と気になってコードを読んだりしているのですが、初心者なので分からない事が多くて解説がほしいのです。

  14. そうですか…(T^T)
    また何かあったら告知お願いしますね。
    どうぞよろしくお願いいたします。

  15. wcsc33ではもうcsaのライブラリは使えません
    やねうら王は対策してますか

  16. こんにちは。恐れ入りますが、自分は「GNU Make 4.4.1」で”make normal”して構文エラーが出てきました。

    YaneuraOuのリポジトリのActionsを見ると、「Make CI (DeepLearning for Windows)」以外のmakeは昨日から全部落ちてるみたいですが、自分のビルド失敗とは同じ原因なのでしょうか。

  17. evallearnのgensfenコマンドについての質問です。depth9でloop4億ほどで生成しようとしたところ、1時間弱(毎回百数十万ほど)で止まってしまいます。タスクマネージャーを見る限りCPUはガッツリ動いてはいるようですが、cmd画面やファイルの更新も止まっています。
    環境は13900kでthreads24かつhash32gbで動かしています。
    msys2よりg++,Avx-2でビルドしたものでこのようになることを確認しています( 7.50と10/24時点で最新のものどちらも試しました)

    少ない情報で恐縮ですが、考えられる原因はなにかございますでしょうか?

  18. NNUEが表現力の限界に近付いていると聞きました。それを打破するために、入力としてPPやKKP、KPPなどを使うとどうなるか十分な検証はされているのでしょうか?
    恐らくされているでしょうし、重くなってNPSが落ちすぎる割に合わないのかもしれませんが、個人的に気になるところではあります。

    • そのへん、学習を回すだけの計算資源、誰も持ってないんですよねー。いま、tanuki-さんがPyTorchでNNUEの学習回す作業されてるんですけど、まだ、やねうら王純正の学習器より最終的な精度(棋力)が悪いようで…。あれがちゃんと動けばそういった実験もしやすくなるんでしょうけども…。

  19. Ubuntu 上でやねうら王をビルドし、無事 YaneuraOu-by-gcc というバイナリが得られました。しかし、eval ディレクトリに nn.bin というファイル(多分評価関数の正体)がないため、isready で失敗してプログラムが中断になりました。

    その後、ネットに転がってる誰かが作成した nn.bin を拾ってきて無事初手 26 歩まで指させることに成功しましたが、nn.bin の取得手段があまりにも非正攻法的な感じがしたので、なにかアドバイスいただけると幸いです。

    • Windowsなら水匠5がバンドルされてる実行ファイルをやねうら王のGitHubで配布しています。

      ソースコードから自力でビルド方面の方には、たぬきさん(nodchip)のHaoとLíをお勧めしています。
      https://github.com/nodchip/tanuki-/releases

      またGitHub Sponsors/FANBOXで御支援いただいた方には、何らか最新の評価関数をお配りしています。

  20. FANBOXでやねうら王のバイナリが配布されていますが、これらのエンジンに対する質問はFanboxの該当NewsLetterページで行った方がいいのでしょうか。

    せっかくなのでそのままここで質問しますが、非Windows系(UbuntuやMacを予定)でやねうら王を使おうと思っています。Githubの最新CommitをCloneして自分でビルドしたバイナリと、NewsLetterで配布されているバイナリは同じ強さのものになりますか?
    (答えづらかったら、メールや別ページなどの適した質問場所を教えていただければ…)

    • > Githubの最新CommitをCloneして自分でビルドしたバイナリと、NewsLetterで配布されているバイナリは同じ強さのものになりますか?

      ダウンロードリンクの前の行に開発版と書いてあるものは開発版です。
      開発版と書いてないものは、GitHubのものをやねうら王Wikiに書かれている方法でビルドしたものです。

      前者のビルドについて詳しくは yaneurao@gmail.com までメールください。

  21. 私は「将棋神やねうら王」にUSI将棋エンジンを追加登録していて、その数は間もなく200に達しそうです。おかげさまで、楽しい時間を過ごせています。
    ただ残念なことに、最新のV.1.40は、まだ USI_HASH オプションに対応していないのでハッシュの値が調節できません。

    やねさんの
    https://yaneuraou.yaneu.com/2020/02/06/%e3%80%8e%e5%b0%86%e6%a3%8b%e7%a5%9e%e3%82%84%e3%81%ad%e3%81%86%e3%82%89%e7%8e%8b%e3%80%8fupdate3%e3%81%be%e3%81%a7%e3%81%ae%e9%81%8a%e6%88%af%e6%96%bd%e8%a8%ad%e3%81%9d%e3%81%ae2/
    での書き込み:
    ————————————–
    >やねうらお
    >2020年8月20日 06:43 より:
    >
    >とりまMyShogiの次のバージョンでは、そこ修正されてます。
    ————————————————————

    を読むと、USI_HASH オプションに対応したバージョンはできているようですので、公開していただけると、とてもうれしく思います。

    ご検討いただければ幸いです。

    • 開発用のPC新しくしたときにMyShogiのプロジェクト、NASに移動させたままなのでこれ持ってくるの大変なんす..
      今年はMyShogiなんとかするかも知れないです..(考え中)

      • お返事ありがとうございました。
        WCSC34で、NNUE型評価関数を搭載したやねうら王将棋エンジンが優勝したのですから、今年はMyShogiにとって、チャンスだと思います。

  22. やねうら王V8.30 GitHub版のリリース、ありがとうございました。
    ところで、以前のやねうら王には、tanuki-のNNUE_HALFKP_VM用のエンジンがありましたが、今回のバージョンにはそれに相当するものはありますか?
    ご回答いただければ幸いです。

  23. やねうら王V8.30 GitHub版のリリースありがとうございます。

    makebook thinkで生成してる定跡でbookファイルに該当する定跡ファイルはあるのですが、うまくいきませんでした

    ペタショック定跡のコマンド入れると
    convergence check 0%[ のところで毎回落ちます。
    powershellの問題なのか、試しにコマンドプロンプトのほうでやるとRead a book DBで
    info string Error! : can’t read file : book/〇〇.db と出てきました。

    • > info string Error! : can’t read file : book/〇〇.db と出てきました。

      定跡ファイルが読み込めてないっぽいです。

      実行ファイルがあるフォルダがworking directoryになっている状態で起動しないといけないので、
      $ engine\YaneuraOu_xxx.exe
      みたいな起動の仕方をすると動かないです。

      > convergence check 0%[ のところで毎回落ちます。

      これはまた別の問題のような気はします。
      book.dbファイルをメールか何かでもらえたら調べてみます。

  24. やねうら王をC++23に移植しています。
    Positionクラスのsetやdo_moveを呼び出すのにStateInfoを渡さないといけないという仕様が違和感があるのですが、PositionにStateInfoの配列を持つ、もしくはnewするのではいけないのですか?
    また、C++23ではBitboards::initとPosition::initで初期化しているテーブルはコンパイル時定数にできるため、少しは早くなりそうな気がします。(C++20でもおそらくできるとは思いますがC++17ではきつそう。)

    • > PositionにStateInfoの配列を持つ、もしくはnewするのではいけないのですか?

      newはげろげろ遅くなるので論外、PositionにStateInfoの配列用意するのは固定長だと手数増えてくると超えかねないのでNG、可変長だと増えてきたときにresize発生するので論外。ということです..

      • std::vectorとかでstackから確保するようなAllocator(それも結局はある一定以上はヒープから確保する)を使うのはどうですか。最初から512個分とか確保しとけばresizeはあまり発生しないのでは?

        • 千日手判定のためにStateInfoのポインタ遡ったり、ふかうら王の実装のようにPositionクラスを頻繁にコピーしたり、そういうことに対してオーバーヘッドが本当にないかという問題がありますね。

          StateInfo、do_moveで渡すのちょっと面倒くさいというのには同意するのですが、ここ直すのはロジックがいたずらに複雑になりますし、Stockfishとの差分が大きくなりますし、そして、ここを直したところで、do_moveが少しすっきりするだけで速度的には全く変わらない(むしろ遅くなる可能性の方が高い)なので、デメリットばかりが目立ちます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です