えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

世界一のオセロAIをDockerで動かす(Flask)

フォロワーさんにオセロAIの世界一がいるようです。

そしてその世界一のリポジトリがあるようです。

github.com

面白そうだったのでDockerfileを作ってプルリクを送りました。そしたらなんと即マージされました!

これで私も世界一オセロAIのコントリビューターですね(?)

この記事では、Dockerに移植する上でのFlaskの注意点みたいなところを備忘録として書きます。なお、この記事の環境はubuntu20上のユーザグループ追加済みのdockerを使います。

Dockerのsudoなし実行のための環境構築は以下の記事を参考にしてください。

docs.docker.com

Egaroucid 4 とは

世界一のオセロAI「Egaroucid 4」とは、「にゃにゃん」こと山名琢翔氏が作成したオセロAIです。

彼は、スピードキューバー兼メイカーの大学生で、ものづくりを始めたら2週間程度で一般工学大学生が1年かけて完成させるクオリティの作品を完成させてしまういわゆる「超人」です。最近は技育展で最優秀賞をとったりAIやウェブサービスも極められているらしい。ん????。

残念ながら公開されているプロフィールだけで記事1本分の分量に到達してしまいます…詳細はTwitterGitHubなどの情報を見てください。

近いうちにオセロAIの作り方についても情報を公開されるそうです。楽しみですね!

ちなみに、私は以前にレベル-1についての記事を書いてます!私のアクセス解析においても結構人気な記事です。

ar-ray.hatenablog.com

Dockerに移植!しかしページが見つからない…

以前、元リポジトリをそのまんまDockerで動かしただけでは動かないことがあり、それでちょっと苦戦してました。

rclsharkに関してFlaskのページ作成練習に関連リポジトリを使っていたのですが、これでずっと悩んでいました。

f:id:Ray_ar:20211124000031p:plain

結局、引数を設定したらちゃんと動きました。

before

...
if __name__ == '__main__':
    print('start python', flush=True)
    app.run(threaded=True)

after

...
if __name__ == '__main__':
    print('start python', flush=True)
    app.run(host ='0.0.0.0', port = 5000, threaded=True) # hostとportを引数に追加

インストール

Dockerの環境構築さえ終わっていればとても簡単です。環境構築が終わったら、そのリポジトリを削除してもDockerイメージが残っているので何度も呼び出して遊べますね!(Webの方ものぞきに行きましょう!)

git clone https://github.com/Nyanyan/Egaroucid4.git
docker build --no-cache -t egaroucid4 Egaroucid4/
docker run --rm -it -p 5000:5000 egaroucid4 python3 app.py

つぎのようなログが出現します。

# 以下、ログが表示 ===========================
 * Serving Flask app 'app' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
0.222996
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://172.17.0.2:5000/ (Press CTRL+C to quit)

chromefirefoxなどでhttp://172.17.0.2:5000/にアクセスします。リロードはF5ボタンで、終了はコマンドプロンプト上でCtrl+cでOK。

f:id:Ray_ar:20211124000048p:plain

ちゃんと操作できる。

レベル指定できない上にレスポンスが遅いときがあるので、おそらくめっちゃ強いのでしょう。



でも私は負けない!

f:id:Ray_ar:20211124000059p:plain





f:id:Ray_ar:20211124000107p:plain

…あれ?