投稿

Radeon RX470 Miningチャレンジ失敗の話

イメージ
暗号通貨ブームで売り出され、値崩れとともに格安で放出されたRX470 Mining版が調達できたので、これ機械学習に使えるのでは!?という目論見で自宅サーバをセットアップまでしました。

これがどういうシロモノかというと「出力系統が一切ついていないRadeon」です。HDMIやDisplayPortのようなシャレたものはもちろん、DVIなども一切ありません。Radeonなのにゲーム用途を一切想定していない、マイニングのためだけに生まれた時代の徒花がグラフィックカードの形をとって生まれた子。

キワモノ製品だけど、OpenCLが動くんならちょっと頑張れば機械学習にも使えるやろ、という見込みでArch機に挿してちゃんと認識もされました。CUDAに比べるとOpenCLでの機械学習は面倒事が多そうですが、安さとOpenCLを応援する気持ちでそこは織り込んで乗り越えるつもりでした。

が!騒音がすごい。あまりにすごい。

自宅では既にGeForce RTX1070搭載のマシンで機械学習を回していました。静音性の高いケースに入れていることもあり、フルロードでも「あー耳をすませば全力で回転してるんだな」という程度でした。冷蔵庫やエアコンの方がよほど音がするので、気にすることはなかった。それがこのマイニングGPUだと、音の絶対量も大きいし変な共鳴もして頭が痛くなってくる。

冷静に考えるとこの手の製品はデータセンターやサーバルームで回すことが想定されるわけで、冷却できればファンの静音性なんて気にする理由は一切ないわけですよね。出力系統がなくてお安いのは合理的じゃん!と思ったら、静音性もカットされる合理性のせいでご家庭で使えるものではなかった、というオチがつきました。

マキネーション図とボードゲームの経済エンジンのデザイン

ゲームデザイン用ツールにMachinationsというものがある。マキネーション図(machination diagram)を作成して、それに沿ったシミュレーションまで出来るツール。
https://machinations.io/

以前に発売されたゲームメカニクス本で使われていて、当時それなりに話題になった本だったのでMachinationsを触ったこともある。ある程度触った感想としては「やりたいことは分かる」「でもMachinationsでシミュレーションに値するものを組むのは大変、シミュレーションレベルの詳細度でやるなら普通にプログラミングする」だった。

ところで私は最近になって、経済エンジンを組み入れたボードゲームデザインをしている。”経済エンジン”という単語はスパ帝の造語だったと思うが、要するに拡大再生産がある時に色々増えていくリソースがあったりするアレのこと。

スパ帝が以前ゲームデザイン本の中で、経済エンジンには多脚構造が必要という話をしていた。その本の主張の内容は妥当だけど、いかんせん全てが散文で書かれているので現実のゲームデザインで実践するには微妙にハードルが高かった。頭の中で経済エンジンの各要素を動かして多脚にするのはワーキングメモリも圧迫がキツく、彼のように地頭に恵まれない人には実行に難がある。ゲームデザイン理論自体は正しいだけに、これは困った。

ということで、ゲームメカニクスレベルの内容を紙とペンでグラフ(折れ線グラフ等のグラフではなく、ノードとエッジ・点と 線で関係を表す方のグラフ)に書き出して、冗長な部分やゲームが単線になっていないかチェックすることにした。この形式にしておけば、グラフの簡約が自動化できる可能性もあるし、最高効率で回す最適解も理屈の上では計算できるかもしれない(これは最長路問題になりがちで、NP困難なわけだけど…)

ここまでやってみて気づいたこと:マキネーション図じゃねーかこれ!

最初に書いたように、Machinationsはシミュレータとして使うにはちょっと厳しいツール。でもマキネーション図は書いてみると、ゲームメカニクスの見通しが良くなるし根本的にアホな設計をする可能性は減らせそう。ということで、マキネーション図は理論的分析には今後は活用して行こうと思います。

HyTouch - Pythonのローカルパッケージインストーラー作った

Pythonでもpackage.jsonがあってnpm iしたらローカルインストールしてくれる感じのものが欲しかった。これまで機械学習用の環境構築はDockerに閉じ込めていたのだけれど、必要なパッケージを追加して行った結果いい感じに熟成してしまったDockerfileを見てDockerfile以外の解決法が欲しくなった。

作ったもの HyTouch https://pypi.org/project/hytouch/
基本的な使い方などはGitHubで https://github.com/tackman/HyTouch

pip install hytouch でインストールできると思います。

概要 Python上で実行されるLisp方言、Hyを利用したPythonローカルパッケージインストーラ&タスクランナー。プロジェクトディレクトリにpackage.hyファイルを置いて

hytouch install

とすると、プロジェクトディレクトリ内の.hytouchにインストールしてくれる。

hytouch run task-name

でいろいろ実行可能。

検証環境 Arch Linux/ Python 3.7

Pythonバージョンに関しては3.7でハードコードしているので、これ以外では確定で動かないと思います。OSに関してはUNIX-likeなCLI上では多分動くはず。生のWindodwsは知らない子なので、WSL使ってください。
virtualenvについて Pythonで環境保持といえばvirtualenvが一番メジャーだけれど、毎回activateコマンド打つのはダルいしプロジェクト単位での依存性がプロジェクト内で閉じてくれない感じがしてイヤだった。あと手なりでやると環境構築がコード化されない(package.json相当の標準的なものがない)のがつらい。

オチ これでPythonの依存性管理もできるじゃん!わたし天才!と思ったけれど、ディープの環境構築で2番目に闇なCUDA導入まわりが全く解決しないことにHyTouchを作ってから気づいた(1番目はGPUのドライバ)。そもそもnvidia-docker利用をしている理由の95%くらいがCUDAまわりの環境汚染が嫌だったからなので、ここがなんともならない以上Dockerから離れられる理由がなかったのです。

百合紅のインストについての私見

初心者がいるときに百合紅拡張を入れていいのか問題。今日は3人が初心者だったから拡張を抜いたけどね。わからーん — yoshimuraspeed (@yoshimuraspeed) 2018年12月15日ちなみにですが、個人的には拡張入れた方がグッと楽しくなると思ってます。
なので、初プレイでも拡張入れて遊んで欲しいところもちょっとある。んだけど、ホントにインストすべき要素は(初プレイ時では顕著に)増えるんで、なかなか悶える。— もあいやん (@more_iyan) 2018年12月15日  というツイートを受けて、百合紅のインストについて考えた所見をまとめます。なお、本エントリの内容は公式見解でも要請でもなく、あくまで試論です。私自身は百合紅の作者ではありますが、百合紅を全く知らない人にインストした経験が特別多いわけではないので、どのようなインストが望ましいかという意見についてはプレイヤーの皆さんと平等な立場だと考えています。

全員未経験者、ルール読みから始める場合 拡張なしを強くおすすめします。百合紅のルールブックは現代ボードゲームの中では比較的厚い部類に入ります。かつ、メカニクスは元ネタにした「クレムリン」を別にすると類例があまりなく、他ゲームからの類推がやや効きづらいゲームになっています。これらの条件下では、ルールの複雑性が増す拡張要素は初ゲームでは入れない方がいいと考えています。


一部のプレイヤーが未経験者で、未経験者がゲーム慣れしていない場合  拡張なしをおすすめします。基本版のみのルールでも、消化するべき内容はそれなりにあるため初プレイでは複雑性の高い拡張は入れない方がいいと考えられます。

一部のプレイヤーが未経験者で、全プレイヤーがゲーム慣れしている場合 インストを行う人が「良いインストを行う人」の場合に限り、最初から拡張を入れても良いと思います。「全員がゲーム慣れしている」「プレイ経験のある人がいる」「良いインストを行う」、これら3つのうち1つでも満たされない場合、基本版でインストを行った方が無難だと思います。

3番目はエッジケースで、微妙な部分があるためもう少し詳しく解説します。

「全員がゲーム慣れしている」の目安 世間のボードゲームプレイヤーの中では、比較的高リテラシー層を想定しています。

・「正体隠匿」「バッティング」などの用語で「ああ…

行列のできるパスタ屋さんゲーム

バイトがゆで時間の違うパスタを渡してきてしまいます。客は病的な短気で、1分待つごとにお店の評価が下がります。バイトから受け取ったパスタのゆで時間を予想して、1分でも早くアルデンテを客に出しましょう!

ジャンル:協力型ゲーム

ターンごとのアクション バイト役プレイヤー 手札のパスタカードを鍋エリアに1枚伏せて入れる。
パスタカードはラウンド開始時に7枚配られる

シェフ役プレイヤー 鍋エリアにあるパスタを1枚選び、ソースと合わせて完成品にする

ホールスタッフ役プレイヤー お客カードを1枚めくって中身を確認する
お客カードの中身を他の店員に知らせてはいけない
完成品をお客に出す

店長役プレイヤー(GM、なくても可) お客カードを毎ターン2枚-2枚-2枚-1枚ずつ並べていく(合計7人)
ゲーム進行以外で店員プレイヤーと直接コミュニケーションを取ってはいけない
人間が店長役をやる場合、配布するお客カードを見てニヤニヤしたり店員がトチったら叱責したりしてみましょう


カードの中身 パスタカード それぞれ茹で上がり時間が違う
3分~12分、分布は二項分布

お客カード ・入店から待てる時間の上限 上限を越えると帰ってしまう(マイナスVP)
・麺の質に対するこだわりの有無(なし / アルデンテ / しっかりゆで)
 こだわり以外の麺を出すと帰ってしまう。海原雄山なので大きなマイナスVP

ゲーム終了と勝利点 最終的に獲得できるVPの最大化を目指します。獲得・マイナスVPはカードに記載されているものです。

投稿テスト

イメージ
はじめての記事です。