Windowsで地雷になりがちなところ

Windows苦手な人が嫌がるところを見てみましょう。

習作として以下のElixirのサンプルをWindows環境で実行してみます。

当然地雷臭がしますが、Windowsネイティブバイナリを入れていきます。

 

employment.en-japan.com

 

まず、iexがPowerShellだとInvoke-Expression のエイリアスになってる。

最低です。Creators Update以降はPowerShellがデフォルトになっているのに、基本的なコマンドが別のエイリアスで規定されています。エイリアスを外すかコマンドプロンプトを起動しましょう。

 

日本語が文字化けします。

ありがちです。Elixir含めて最近の処理系はUTF-8がデフォルトですが、Windowsは歴史あるShif-JIS系のコードをしようしています。

Windowsではchcpというコマンドを使いましょう。引数はUTF-8にするには65001としていします。つまり「chcp 65001」と打てばいいのです。

また、ありがちなのですがWindowsではエディタで作ったファイルがShif-JIS系になりがちです。確認してUTF-8にしておきましょう。

以上の対応をしても一か所ダメでした。

MS-IMEの出力はどうしてもUTF-8にできませんでした。

つまり、コマンドラインの漢字は入力しても化けて読まれます。

どうしたらいいものかなぁ。

#敢えて地雷を踏みに行ってますので、それほど危惧してません。

 

Bash on Windowsと色々かぶる。

まぁ、解決策としてUbuntu系のバイナリが使えるBash on Windowsに逃げるのが今風なのですがCreators Update以降は素敵なことにbash中でWindowsバイナリも動きます。ええ、Windows側で指定したパスに実行ファイルがあるとそれが動きます。ということで上記で入れたWindowsバイナリをアンインストールしましょう。残ってると色々奇妙な現象にクラクラします。

 

今日はこれくらいにしてあげましょう。

RYZEN写真集

RYZEN仕入れてました。

開封の儀

ん!?

本体ちっさ!!

CPUファンが入ってない1800Xなので,これだけ売ってくれればいいのよ。

なんか,黒いです。(カラー写真です,悪しからず)

適当に見繕って貰ったファンでかっ!!

BIOSの誤字が人柱感満載でいい。

 

こんなものも激しく無駄な多層梱包で別送されてまして

がっつり厳つい感じになります。

上の方がRYZEN用のファンで下がビデオカードです。

上が95Wで下が250Wと言えば,基本的に熱設計間違えてると思いますよね。

 

将棋AIの続き

以前ディープラーニングの習作に将棋のAIを選んで適当に作った話をしていた。いわゆるチュートリアル的な完成度の高い練習問題じゃなく,正解があるようなないような位の実践的な課題として選んでみた。ネット上で参考になりそうなblogも3つ4つある程度で丁度いい。参考にするものが皆無だとチュートリアルからの脱却にはハードルが高い。

うちで考えたNN構造は駒の種類(8種+成り駒6種)を先手後手でそれぞれ。手駒は7種類を先手後手でそれぞれ。9x9のマスを42層作ることに試行錯誤の後に落ち着いた。手駒層でちょっと工夫したのは駒数が増えたときに入力値を増やしていったところと,9x9にベタで入れるのは無駄な気がして盤上の空きマスに駒数を配置した。イメージで的には打ち手可能エリアと数ってことだ。

こうして行った入力層を薄くする努力はさほど有効でないことは中間層の大きさで演算量が大きく変わることを身に染みて理解した。そしてCNNの10層はFull-Connectの2層よりも軽快であった。

 

 

ざっくり,動かした結果自分の手で対戦するのが最も明快な評価であった。かなり面白いと思ったのは以下の点。

0.即指し&再現性100%。まぁ当然ではあるがw

1.駒の動かし方は概ね学習してる(初心者レベルはクリア)

2.序盤と終盤は学習データから除外したのに,初手は角道を開けるなど駒連携を考えた序盤

3.付き合った「歩」などの当たりの駒は即取る。(実際は悪手も多い)

4.王手は回避する。陣形崩壊前に早逃げ等も見られた。(悪手となることも多い)

 

酷いなぁと感じたのは以下の点。

1.遠見の「角」に気づかない。飛車・香と比べ学習しづらいのかも。王手回避ミスすら出る。

2.成り駒は動かせるのに,駒成りの手が指せない。そもそも別の層のデータなので別の駒と認識しているのかな。そして,学習機会は確かに少ない。人間だと嬉しい指し手として覚えるのは早いが。

3.そして恐ろしく弱い。不正な手を指さないように補正をしてfloodgateに放流したが連敗である。負けないとレーティングが付かないと言われるのと同様に一度も勝たないとレーティングが付かない。(どのプレーヤーか分かる人は分かると思う。)

 

世界コンピュータ将棋選手権の影響でfloodgateがインフレをしている中へぼいプレーヤーを投入した件はここでお詫びする。一勝くらいしたかった・・・

 

非サーバのWindows10でMackerelのプラグインを入れてみた

リモート監視ツールのMackerelがブレイク中だ。

お試しで2週間255ホスト無料である。

というか5ホストならずっと無料らしい。

 

個人で維持してるサーバなら無料でいいんじゃないだろうか。

ということで、ひとつ入れてみた。

CPU負荷やDisk入出力なんかは標準でログを取ってくれる。

個人的に近頃GPUに負荷をかけているので、これも取れないかと試みた。

 

監視するマシンにはMackerelのagentというものをインストールする。これにプラグインを加えることで監視データを追加できるというものだ。

で、公式のプラグインLinux用のようである。そっち向けのインストール手法しか公式には書かれていない。

Windows用でもできるはずなので試みた。

 

GPUデータ取得は Nvidiaのドライバを入れたときに同時に入ってる"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"を実行して得られるデータを切り出す。

具体的にはこちらにある。

github.com

 

コマンドひとつのためにパス設定するのも野暮いので、このプラグインの方に上記のコマンドのフルパスを入れてビルドしておいた。

実行ファイルの標準出力を加工して標準出力に出しているだけのようで、Go言語である必要はクロスプラットフォーム問題だけだろう。

 

あとはmackerel-agent.confに下記の二行足して保存するだけである。

[plugin.metrics.nvidia-smi]
command = "mackerel-plugin-nvidia-smi"

その後、トラブルは発生した。

上手に動いていないのである。

原因はとんでもないところにあった。

そもそも私はmackerel-agent.confを編集していなかったのである。

 

どういうことか。

Windows XP以降Program Files以下は管理者権限がないと一般には編集不可能なのだが、トラブル多発の結果後方互換を大切にするマイクロソフト社がVista以降で組み入れたVirtualStoreが本件の原因。

というか秀丸エディタとか秀丸エディタとか秀丸エディタとかデフォルトで VirtualStoreが有効になってるエディタでconfファイルを管理者権限持った一般ユーザが編集したのが過ち。非サーバのWindowsの方が起こり得るミスね。

つまり、特定ユーザだけにProgram Files以下のファイルを編集したように見せかける仮想ストレージがオーバーレイされてる状態でサービスの設定をしようとした。

つまり私が弄ってたファイルは以下にあります。

C:\Users\私\AppData\Local\VirtualStore\Program Files (x86)\Mackerel\mackerel-agent

言語系アプリがProgram Files以下にインストールしたがらないのはこういうことが頻繁に起こるからなのですよね。

管理者権限で秀丸エディタ(かメモ帳)を起動すれば大丈夫でした。

つまらん、実につまらん。(これで私とマカレルサポートを1週間ほど悩ませた。実に申し訳ない。)

cudnnをWindows環境に入れるコツ

ほとんどパクリネタなのだが,自分用の作業メモのつもりで残しておく。

1.GPUがcudnn対応であることを確認する。

ぶっちゃけた話,今これで凹んでる。CUDA自体は随分古いGPUから対応しているのでCUDA SDKを放り込むときは何も言われないし,cudnn自体もコピー作業なので実行時になって非対応が判明する残念な人がここにいる。

簡単に言うとFermiがアウトでKepler以降(Maxwell, Pascalと続く)がセーフ。

Geforceで言うとGT 600台が分かれるところで,この型番の上位機がKeplerで下位がFermiと言う商業主義的なナンバリングになってる。

もちろん低位なGPUで動かす利点はあまりないのだが,GPUの有無で機械学習ライブラリの(pythonの)オブジェクト構造が変わるのでちょっとした評価に手間が増える。例えば学習させたモデルすらGPU無いマシンで開けない。学習させてるマシンを煩わせずに評価や開発をしたいのが心情である。

2.Visual Studioを先に入れる。

CUDA SDKVisual Studioを確認するのでね。今は2015を入れる。(2017が出てるので注意)

3.CUDA SDKはカスタムインストール

フルインストールに「推奨」とか書いているが,それはリリース当初GPUのドライバがCUDA対応と非対応の両方があったため同時に全部放り込む方が無難だったためだ。今となっては大体最新のドライバ類が先に入っているのでカスタムインストールSDKで入れるのは入ってないやつと現行より新しいのがあれば入れるくらいが良い。

4.cudnnは5.1を使う

現行のpythonライブラリが概ね6.0対応していないので5.1を入れる。(pythonも3.5よね。)

5.環境変数をセット

以下のblogそのままやってるだけ。環境変数PATHに「C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin」を設定する。

環境変数INCLUDEに「C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt」を追加する。
設定しないとどうなるかは確認していない。

 

意外とWindows環境でやる人少ないのよね。

 

tadaoyamaoka.hatenablog.com

chainerも入れてみた

tensorflow入れて色々遊んでたところ山岡さんと言う方のblogに行きついて以下のネタを試してみた。動機はこの方とほぼ同じ。違うのはGPUの負荷テストのようなノリであることと機械学習の学習が未熟であること。それにchainer初心者であること。

 

tadaoyamaoka.hatenablog.com

 

chainerのインストールはtensorflowほどの苦労はなくさっくり入った。mnistをサンプルに回した後,上記ネタをgithubから落としてざっくり回してみたら意外にすんなり学習してくれた。元ネタblogだと0.25程度で頭打ちな感じだが,うちでは0.35付近まで行った。(但しGTX1060で20時間ほどかかる&要メモリ32GB)

うちではデータベースをスクレイピングするのが面倒だったので,floodgateから1年分の棋譜アーカイブをダウンロードした。8万局ほどある。棋譜の品質は知らない。

また,機械学習データとしては定跡化されている序盤と探索でミスの出ない終盤を20手ずつ除外している。序盤と終盤は効果が無いというよりは機械学習である意味が薄いという意味である。

もうちょいニューラルネットワークの構成を考えて充分な学習をさせれば,山本さんの言うような5割という数字が出るのかもしれない。

 

f:id:the48:20170419131208p:plain

f:id:the48:20170419131227p:plain

将棋の初手

アレのソレが38金だったので
検証している人がいたのでちょっと確認してみた。
将棋の初手30通りを全て検証してみた② - コンピュータ将棋研究Blog
 
ちょうど局面ペディアってのがある。
局面ペディア
 
見ればそこまでだが,初手だけ並べてみよう。
 
有名局
▲7六歩
▲2六歩
▲5六歩
▲9六歩
▲7八飛
▲1六歩
▲7八金
▲6六歩
▲6八飛
▲4八銀
▲3六歩
▲5八飛
▲6八玉
▲3八銀
▲5八玉
▲7八銀
▲8六歩
▲4六歩
▲4八飛
 
オンライン道場
▲7六歩
▲2六歩
▲5六歩
▲9六歩
▲1六歩
▲4八銀
▲7八飛
▲6八銀
▲7八金
▲6六歩
▲5八飛
▲3六歩
▲3八銀
▲6八飛
▲5八玉
▲4八玉
▲5八金
▲4六歩
▲8六歩
▲6八玉
▲4八飛
▲7八銀
▲4八金
▲1八香
▲3八金
 
Floodgate
▲7六歩
▲2六歩
▲9六歩
▲5六歩
▲3八銀
▲4八銀
▲5八金(49)
▲7八飛
▲6八飛
▲7八金
▲6八玉
▲6六歩
▲5八玉
▲7八銀
▲1六歩
▲3六歩
▲4六歩
▲6八銀
▲5八金(69)
▲3八飛
▲4八金
▲5八飛
▲1八香
▲8六歩
 
有名局で19手あるんだが,ここに20手目が入ることになるんだろうか。
#待ち合わせまでの空き時間なので随分適当である。