続・cudnnをWindows環境に入れるコツ

bleu48.hatenablog.com

 

 前回の続き。いつのまにやらtensorflow-gpuがバージョンアップして,CUDA9.0を要求してきたのでCUDAのバージョンアップ。

今回入れたのは以下の3つ。

cuda_9.0.176_win10.exe

cuda_9.0.176.1_windows.exe

cudnn-9.0-windows10-x64-v7.zip

上から,CUDA9.0SDK,それのパッチ,cudnn7.0.5 for CUDA9.0 

CUDA9.1も出てるけど今のところtensorflowで要求されるのはこいつら。

インストール手順は前回と同じ。

特に難しいことはないが,カスタムインストールで入れるときGUIが重いのが気になる。

NVIDIA社はなにしとるんだろう。 

  

pyaqはGPUあってもなくても似たようなところでこけてるみたい。

pyaq on windows

囲碁はよく分からないので練習問題にも適さないと思ってたのですが

まぁ,こういう話ならちょっと触ってみます。

  

github.com

本家はpython 2.7 on ubuntu 16.04 らしいんですが,そんな環境作るのもあれなので

うちのpython 3.6 on windows10 でやってみます。

結論から言うと探索なしまでは簡単に動きました。

 

以下,メモ。

tensorflowのWindows版もpython3.6に対応したので今では難なくインストール可能。

learn.pyの中のxrangeを二か所rangeに。(python2->3あるある)

learn.pyの中でlog吐くところでopenオプション"aw"を"a"に。

これはpython2系ならワーニングも出ないんだろうか?

 

学習は時間かかりそうなので少し走らせて負荷がかかることを確認して打ち切った。

メモリは1.3GB程度しか使ってない感じ。(--cpuで)

 

既学習データを用いての探索なし自己対戦は問題なく動く。

探索を入れるとエラー。

search.pyの117行目でdivision by 0である。

python2系は容認するらしいのだけど3系はスルーしてくれない。

np.seterr(all='ignore') # 3系で走らせるおまじないを宣言部に置く

 

それからもスタック不足とか色々

もしかして演算系の結果違いとかが出てるんかなぁ・・・

rate[np.isnan(rate)] = 0.0

とか行足してもどうもダメっぽい。

ってところで今夜は終わりにします。

---

2/14 追記

探索させると,numpyの実装が悪いんでしょうけどignoreしてもoldstateとかで内部で状態確保してるらしくスタック溢れて止まるようだ。

最悪2手目。たまに5,6手まで進む。

エラー前に分岐させるか・・・ #後でやる

 

2/16 追記

python3での不具合はhash衝突っぽい

board.pyに

import hashlib して

def hash(self):
return (int(hashlib.md5(self.color.data).hexdigest()[:4], 16) ^
int(hashlib.md5(self.prev_color[0].data).hexdigest()[:4], 16) ^ self.turn)

とhashを書き換えてやると遅くなるが衝突しなくなる。

もっとエレガントな方法があるとおもうが

python歴1年程度なので,hashについて詳しくは知らない。

 

2/17 追記

公式の方がエレガントに対応したので私の役割は終わりました。pyaqはいい玩具なので皆で遊びましょう。

まぐれ度の検証

え~っと,第5回電王トーナメントでは相当なまぐれってことになってます。

すっかりアレなんですが,選手権の方の準備も兼ねて「まぐれ度」を計測しておきました。

 

negishiroom.hatenablog.com

 

対戦相手は上記サイトを参考に公開されているものから,決勝に残った

えるも,はにわ,かっぱ,たぬき,よみた,と5つ選びました。

計測器はi9 7980XEで5分切れ負けにしてあります。(15時間100戦ペース)

ちょっと変則ですがponder入れたかったのでスレッド数を同数に比例配分。

相手のHash 8192,うちの調整は予選仕様の打ち切り。

各やねうら王エンジンは今後の方針を決める未来志向な意味で大会後公開された4.80を使用しました。

 

対よみた

対局数100 先手勝ち57(61%) 後手勝ち35(38%) 引き分け8
shot_gun 0.81
勝ち75(81%) 先手勝ち45(90%) 後手勝ち30(71%)
Yomita_kppt4.61
勝ち17(18%) 先手勝ち12(28%) 後手勝ち5(10%)

負け試合を3つほど見てみたけど、全部切れ負けてた(笑)

 
対えるも

対局数100 先手勝ち42(47%) 後手勝ち47(52%) 引き分け11
shot_gun 0.81
勝ち21(23%) 先手勝ち10(21%) 後手勝ち11(25%)
elmo.sdt5
勝ち68(76%) 先手勝ち32(74%) 後手勝ち36(78%)

 
対はにわ

対局数100 先手勝ち57(60%) 後手勝ち38(40%) 引き分け5
shot_gun 0.81
勝ち61(64%) 先手勝ち35(74%) 後手勝ち26(54%)
honeywaffle.sdt5
勝ち34(35%) 先手勝ち22(45%) 後手勝ち12(25%)

 
対たぬき

対局数100 先手勝ち54(56%) 後手勝ち41(43%) 引き分け5
shot_gun 0.81
勝ち22(23%) 先手勝ち14(29%) 後手勝ち8(16%)
tanuki.sdt5
勝ち73(76%) 先手勝ち40(83%) 後手勝ち33(70%)

 
対かっぱ

対局数100 先手勝ち48(51%) 後手勝ち45(48%) 引き分け7
shot_gun 0.81
勝ち19(20%) 先手勝ち9(20%) 後手勝ち10(20%)
qhapaq.sdt5
勝ち74(79%) 先手勝ち39(79%) 後手勝ち35(79%)

  

なんか結構切れ負けてるので,とりあえずこの計測はここまで。

elmoが上がってきたり,トーナメントが反対の山なら全然ダメだった感じ。

想定内とはいえ極端な相性問題がありますなぁ(笑)

切れ負け対策はフィッシャールールならなんとかなりそうだけど,

選手権のルールでは相性悪いチームを避けるのは不可能だから何かしないとねぇ。

年末年始で評価関数を完成させてないのが厳しい。

 

EPYC手に入れて,「POP TEAM EPYC」でエントリー出来なかったのも結構悔しい。

---

2/19 追記

その後のチェックで切れ負けの原因がなんとなく掴めました。sdt5で発生しなかった理由も含めて。

同時にやはり相性問題が極端出る理由と上記計測法ではやはり公平ですらないことも確認できました。ponder入れてHT有効でマシン内対戦させたら分かると思います。

別件で少し新しいアイデアが浮かんだので3月末までに実装して強くなればwcsc28の新ネタになると思いますが間に合うことやら。

 

飛べる人の話

その昔,高校の時,進学校だったんだけど一応体育の授業とかあった。

体力測定で100m走とかそういうのを計測してたんだけど,三段跳びの計測の時に結構面白いことが起きた。

飛距離が不足で砂場に入らないやつと過剰で整地してないところに着地するやつだ。

前者は笑いをとってやり直し。7,8m程度だったと思う。

後者は結構ガチな雰囲気でやり直し。13m台が出てたと思う。

あぁ,高校の体育の授業で普通の運動靴での記録だ。

 

授業が終わった後,体育教師はインターハイ予選記録などを参照したらしく,急に陸上部を作って高校陸連に登録したそうな。

そして運動場の一番端に陸上スパイク用に舗装された三段跳び用のレーンが作られた。

 

その後,たぶん二人で競技会に行ったらしい。後に聞いたのは陸上用のスパイクに慣れるのは半年くらいじゃ無理ってことだ。

 

その後の体育の授業はサッカーボールひとつ放り込んで教師が居眠りする感じ。

彼はとんでもないクリアボールをトラップしひとりでコーナー付近からセンターリングをする活躍が記憶に残ってる。

 

そういえば卒業後は知らないな。

あれが進学校じゃなかったら,中学校だったら,陸上選手にでもなったんだろうか。

サッカー選手ってこともあったかもしれない。

 

 

適正って試さないと分らんよ。

自作AIの会

職業柄この時期多忙で少々報告遅れな感がありますが

1月20日に自作AIの会ってのをやってました。

ai-okayama.connpass.com

 

機械学習とかディープラーニングとか人工知能とか色々用語があるんですが,正直入門1年未満で言葉の定義も怪しい者が主催するのでハードルの低い感じの看板にしたかった。(それと金の匂いをさせないように心掛けてます)

 

で,不思議なことに60名近い登録者(ドタキャン数名居られたみたいですが)で,直前になって但馬先生が「どうせ半分くらいですよね」と確認に来られる程度。

私も年末からチェックしてなかったので2,30人がいいところだろうと思ってたので驚きました。「まぁ,東京は半分しか来ないですが岡山は8割以上来ますよ」との予想は合ってエントリー数くらいは居るに見えました。

 

どんだけすごいって?

sakura.doorkeeper.jp

さくらインターネットの大阪本社で行われた機械学習ナイトより多いんですよ(笑)

(これに行ったのに自分のイベントを宣伝忘れる始末でしたが)

 

で,岡山のイベントでは二人で4時間弱話ました。(休憩特に多めで) 

歴史の話や技術デモなど二人で準備した割には幅広いネタになったのではないかと思っています。コンピュータ将棋の話もしたのですが,背景が無い人ではついて来れないだろうなぁと流し気味になりました。職を奪うAIの話では以下のようなことを話題に出しました。

 その昔,炊飯は専門職だった。マイコン炊飯器(おそらく当時4ビットマイコン)が家庭の主婦の仕事も奪い,飲食店から炊飯専門職を奪い多くの仕事が奪われたであろうこと。マイコン炊飯器の人工知能とは温度(の時間履歴)管理程度であるが,それですら多くの仕事を奪ってきている。監視カメラが警備員の仕事を奪ってる。自動改札が駅員の切符切りの仕事を奪ってる。

 それから炊飯器は多種の炊飯メニューに対応し,監視カメラは動態検知に対応し,自動改札がICカードに対応し,どんどん職が奪われております。人類の危機ですねぇ。

 

 ということで,次回は少々枠を減らしてもくもく会を開催します。

是非ご参加下さい。

ai-okayama.connpass.com

 

 

 

 

 

 

GAの例題

 色々自主的に機械学習を遊んでると模範解答が溢れている入門課題から実践課題への間くらいの丁度いい例題が必要だとわかる。必要なステップ数は個人差があるがゼロというわけにはいかないだろう。

 ところで、先月こういう話があった。

 

 

 ということで、例題

・相手の駒20枚を自由に並び替えて、局面評価値が最も高くなるものを求めよ。

という辺りで自主課題を設定してみた。

 

itertools.permutationsをやったらフリーズした。

そうよね。 20! / 9! /2 /2 /2 /2 位の数になるもんね。

ってことで、これはGAの課題だろうってことでGAで取り組みました。

試行錯誤の結果、組み換えはorder-based two-point crossover(日本語で何て言うか知らん)、突然変異体はチャンピオンデータのランダム二点入れ替え(正式に何て名前なんだろう?)が比較的うまく動いた。

選択は乱暴だがsubprocessで動かしたやねうら王(Apery SDT5評価関数)のノード数100万制限での評価値でソートした。

ノード数制限にした理由は計算時間が予測しやすいから程度の理由で、実は同じ局面でも値が変動するのでよくない部分もある。

 

 で、ryzenで数十分程度GAさせて作ったのが以下の局面。初手16歩で玉頭致命的である。

興味ある人コピペ用→sfen psgnnplbp/1g5l1/rppppsppk/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1

f:id:the48:20180202203616p:plain

  この局面で一応私が手動で作ったものより優秀な数値は出た。しかしながら、上記の回答に対してネット上でもっと良い数値を出している方もいるので、まだまだかなぁという感じ。今のところこの程度のGA力です。

 

 

 

i9ってやつ

導入してたけど更新してなかったので正月休みにうp。

 

i3, i5, i7は買ったことあるけど

i9はお初。せっかくなので金色のやつにしてみた。

案外小さい箱。

f:id:the48:20180103135411p:plain

ソケットはちょいと大きいし,ピンの数も多め。

押さえの金具もちょっと豪華。

それでもちょっとだけ,そんなに特別感はない。

f:id:the48:20180103135448p:plain

押さえ金具が上下にある。

f:id:the48:20180103135505p:plain

業者さんに適当に見繕ってもらったヒートシンクは過去最大サイズ。

200Wくらいまでいけるらしい。

f:id:the48:20180103135529p:plain

まぁ,難なく動いたので記念画像はこれだろうな。

とくに苦も無く3.7GHzくらいで動くので割といいんじゃないかなぁ。