環境構築話 KP41問題、VSCodeとAnaconda、Chocolateyのログどこだ

KP41問題と戦ってました

なにか恐ろしいことが起こりました。

省電力設定を切ったり高速スタートアップを切ったりイベントビューアーのKernel-PnP/デバイス管理で落ちるデバイスを見つけては再インストールして落ち着いたかも。詳細略。

Visual Studio CodeでAnacondaとかJupyter拡張とか

数年前に組み合わせて使っていた人がいたのですがアップデートが終わらなくなったり苦労していたのを見ていて、状況を把握するまで近づきたくないなと… (そういう試行錯誤する前に復元ポイントとかバックアップ作ればという話もありますが)

ネット上の情報だとVSCodeをAnaconda Navigatorから起動しろとかAnaconda Promptから起動しろとか見かけるのでじゃあJupyter Notebookのショートカットみたいにしようかな(今後公式のPythonも使う可能性が高いのでデフォでbase環境にPATHを通すのは嫌)と思ったがどうやらVSCodeは複数のWindowがあっても全部で1プロセスで環境変数も同じになるらしい。

関連Issueが立っては閉じられるの繰り返しで、VSCodeのことをユーザーはデバッガも起動できるエディタだと思っているけどMSの人はIDEにしたいのかなこれは。 https://github.com/microsoft/vscode/issues/15452

でまあ今回のMinicondaはcondabinだけにはPATHが通っている(conda initとかやったんだったかな?)ので普通にVSCodeを起動すればPython拡張からcondaの仮想環境も選択できそう(まだやっていない)

選択できればあとはこうhttps://atmarkit.itmedia.co.jp/ait/articles/2108/06/news030.html

Chocolateyからのインストールログ、パッケージインストールオプション

インストールでオプションがGUIで提示されてその場判断が求められるのがなくなるのはありがたい。ストレスが緩和されます。でもどういう設定でインストールされたのかわからん。

ログは

C:\ProgramData\chocolatey\logs

ですが肝心の情報が少ない。使われたインストールスクリプトが例えば

C:\ProgramData\chocolatey\lib\git.install\tools\chocolateyInstall.ps1

で、これがインストール前でも https://community.chocolatey.org/packages/git.install の> Filesあたりから参照することができます。

よくできたパッケージなら同じページのPackage parametersに説明が

Connect4でちまちまpMCTSの改良

引き続き↓のローカル実行。

blog.codecamp.jp GitHub - AppliedDataSciencePartners/DeepReinforcementLearning: A replica of the AlphaZero methodology for deep reinforcement learning in Python

コード概要

動作を見てみるとどちらかというとAlphaGoZeroの再現といった趣が強いです。

  • 学習用AIと棋譜生成用AIが定期的に自己対戦して学習用が勝ったら棋譜生成用を置き換える
  • 学習データのAugmentationあり
  • CPUCTが定数

ここまで試したこと

  • MCTS_SIMSだけ半分の25にして回し始める
  • 50なら確実に相手の上がり手阻止まで読めるのにそこを減らしてしまったので、読み抜けが発生しまくる
  • にしても…学習が進んでも自分の上がり手すら放置してゲームが進行するの何なの?
  • CPUCT=1は小さくない?とりあえず2にしてみた
  • CPUCTを大きくしてもPolicyの強制力が上がるだけ…NN評価値が1.0になってしまうと上がり手の1.0と同格になりPの大小で上がり手が選ばれなくなる
  • MCTS木で上がり手と上がり手放置のminimax扱いを実装
  • elmo式(MCTS評価値と最終結果の平均でNN評価値を学習)
  • 上がり手でない部分でPによる差別を解消するために、MCTSの後半1/4をUCB1の係数0.5倍に変更
  • あ!ディリクレノイズの加え方が変!→公式のIssueに報告、手元では間に合わせの修正で進める
  • 手選択の温度で『最善手でない手を選んでしまった』自覚があるならその分それ以前の局面の学習で『最終結果はそれ以降の手のせいだからこの局面にはMCTS評価値のほうが意味がある』という処理をしたらいいんじゃないか

今後の予定

  • 自己対戦棋譜のためのランダムソースに悩んでいます。(現状の動作は訪問回数最大の腕(同数が複数あったらその中で無作為)なのですがplayout数が少ないので同数が頻発したり)実力最優先な本番とは違うので訪問回数最大と評価値最大からランダムに選ぶとか?
  • 改めてUCB1について振り返ったり
  • チャンピオン方式をやめる、それで戦型の多様性を考えたら複数NNのリーグ戦はどうだろう
  • 4目並べだからって4x4カーネルなんだろうけども汎化性能が良くないんじゃないの、そろそろ3x3とかResNetとか
  • 今の学習率0.1って書いてあるけどmomentum=0.9のせいで実質1.0じゃん、これは過去を忘れてるかも
  • シリアルに1局面ずつ推論しているから遅いんだ、探索並列化でバッチ推論を実現しないと

Windows 11+Anaconda+Keras+TensorFlow+CUDA

メインマシン更新しました。RTX3060入りゲーミングノート。でDNNでAlphaZeroとかを追ってみます。

環境構築

これまでの環境はCygwinMinGWが5個以上入っていて片付かないわDocker+WSL2を動かしてみたが非力だわでストレスがたまっていたので、今回はミニマリストを目指します。Chocolateyでインストールできる奴はChocolateyで。バイナリパッケージがあるならそれ優先で。システム環境変数は嫌がりすぎると.batファイルからしか起動できない環境が増えるので臨機応変に。

  • Chocolateyインストール。Chocolatey GUIインストール。
  • ChocolateyからGit for Windowsインストール(MSYS2環境を兼ねて)。その他GitHub DesktopやNotepad++など。
  • ChocolateyからMiniconda (Python 3.9)インストール。

minicondaで仮想環境を作るとその中からconda install等がSSLError等になる

ググると似たようなエラーが出ている人はいるが少し違う(base環境ですらエラーになるのでOpenSSLのバイナリを手作業で導入するしかないらしい?)

自分はbase環境からだとconda install等できるのでcondaの範囲内で何とかならんかと調べていたら、仮想環境でconda listするとopensslパッケージが見当たらないことに気づきました。base環境からconda -n env_name opensslで解決しました。

opensslのバージョン指定とかが必要になる場合もありそうです。以下の公式Issueを参照のこと。

Conda SSL Error: OpenSSL appears to be unavailable on this machine. OpenSSL is required to download and install packages. · Issue #11982 · conda/conda · GitHub

TensorFlow環境構築

囲碁界最強のアルゴリズムAlphaGoを使ってみよう | CodeCampus

↑を動かせる環境を、ピュアWindowsで構築できるか?

  • 最近のTensorFlowにはKerasも含まれている(少し差異があるらしいがそもそもTensorFlow1系と2系の差だってあるのだし)
  • NVIDIAのドライバーはStudio版の最新版で
  • 例に限らずpython最新版を持ち出す意味はないはず→python3.6の仮想環境を作ってみたがcondaパッケージが少ないので3.7で作り直し
  • [環境構築] TensorFlow+KerasをGPUで動かす[venv] - 開発めもとか
  • ↑に従いバージョンを決定しCUDA ToolkitとcuDNNをインストール
  • conda install tensorflow=2.9.1=gpu_py37****←2つありあてずっぽうで選んだ
  • するとcudatoolkitとcudnnまで少し違うバージョンで入ってきた…
  • tf.config.list_physical_devices('GPU')等で疎通確認

ノートブックが動き出すところまで

  • conda install jupyter
  • conda install matplotlib
  • ノートブック実行でCUDA_ERROR_OUT_OF_MEMORYになったのでdGPUを使わないようにする→CUDAからも見えなくなってしまったがとりあえず進める
  • conda install pydot
  • currently only supports the NHWC tensor format on the CPU.→CPUではなくcuDNNを使わせる必要がある
  • CUBLAS_STATUS_NOT_INITIALIZED
  • モリー割り当ての問題らしい、allow_growth=Trueが必要、TensorFlow2系では↓の書き方
  • 【TF2】Tensorflow2.x でGPU設定をする (旧 allow_growth の呼び替え) | マキシ’sディーパラ
  • nvidia-smiでほかのプロセスがメモリーを握ってないか確認、それでもエラーが出るならPC再起動

Hammer-cylindrical homotopy

地図投影法を開発してみたシリーズ5

Equal-area ovalシリーズ3部作その3。前回に比べて独自部分が少ないので解説多めで。

https://research.tableau.com/paper/bevy-area-preserving-transforms-map-projection-designersから

今回はStrebe's homotopyを使います。 https://www.mapthematics.com/forums/viewtopic.php?f=7&t=627&start=10でも言及されていますが、Hammerとcylindrical equal-areaを混ぜるのにどっちをどっちに混ぜるのかで極の形が変わってきます。手順を追ってみます(図は面倒なので https://research.tableau.com/paper/efficient-technique-creating-continuum-equal-area-map-projectionsの図1から想像してください)

続きを読む

Complementary Eckert-Greifendorff projection

地図投影法を開発してみたシリーズ4

Equal-area ovalシリーズ3部作その2。

https://research.tableau.com/paper/bevy-area-preserving-transforms-map-projection-designersから

Directional path offset、前回のように擬円筒図法を詰めてつなぎ合わせるだけじゃなく、経緯度関係なく詰めたりしてもいいんだなー思いつかなかった。例えばこんな計算ということか。

f:id:dummy_index:20200831233553p:plain
Offsetted azimuthal equal-area double hemisphere

続きを読む

Winged Lambert azimuthal equal-area projection(s)

投影法を開発してみたシリーズその3

シリーズ3~5はEqual-area ovalシリーズ3部作の予定です。

Lambert azimuthal equal-area projection (hemisphere)とHammerとGall-Petersの外周に着目すると、同じ緯度\phiの点がどれも同じY座標y = \sqrt{2} \sin \phiになっていることがわかります。だったらGall-Petersの経線を半円に変形させてhemisphereにくっつけてback hemisphereを表現してみましょう。Ortelius ovalみたいに!

f:id:dummy_index:20200825001824p:plain
Halfway azimuthal equal-area oval
低緯度は赤道上のスケールが連続するので縦長でも不自然じゃないかもな感じになります。高緯度は経線の倒れが気になりますね。これだけ倒れているのに間隔が狭まっていかないというのも見慣れない要素です。そして緯線がガッツリ折れて北米大陸が…グリッドがしっかり描かれていればこういうもので通せなくはないかな。

経線が円弧といえばWiechel projectionです。equal-areaになるように経線の間隔を0.5倍にしてhemisphereにくっつけてみましょう。

f:id:dummy_index:20200824235735p:plain
Azimuthal-Wiechel equal-area
こっちはback hemisphereの低緯度がかわいそう。 さらに細かく切ったら…ひずみが解消されるのは当たり前。

(この程度のできのものをわざわざ解説したのは、第2部につながる話だからです。)

github.com

2020.08.26 初版 2020.09.03 小修正、カテゴリ編集

Approximate to the Eisenlohr projection, and road to the general solution

地図投影法を開発してみたシリーズ2(近似と応用)

August's Conformal Projection of the Sphere on a Two-Cusped Epicycloidから

文中の複素sin関数によるEisenlohrっぽいやつを仮にfalse Eisenlohr projectionと呼ぶことにします。

f:id:dummy_index:20200821235349p:plain
August epicyclodal, false Eisenlohr and Eisenlohr projection

このAugust epicycloidalかfalse EisenlohrをもとにEisenlohrを近似したいと思います。

続きを読む