SlideShare a Scribd company logo
1 of 28
Download to read offline
『逆転オセロニア』
対戦型 のバックエンドの実装
宮下 奨平 (Shohei Miyashita)
DeNA Co., Ltd.
今日お話すること
✦ 『逆転オセロニア』対戦型 AI コンテンツ『道場』の実装
✦ 『道場』における Google Cloud Platform の活用
✦ AI コンテンツを実装する上で詰まったポイント
話さないこと
✦ 対戦型 AI の研究に関する詳細
オセロニア 深層学習 AI に関する話は以下を参照
✦ 『逆転オセロニア』におけるAI活用 (CEDEC 2018)
✦ Applying Cloud AI in games with DeNA (GDC 2019)
2
『逆転オセロニア』
と
プロジェクト
3
『逆転オセロニア』とは
✦ オセロ × カードゲームをコンセプトにした対戦ゲームアプリ
✦ 2400万ダウンロード*を突破し、現在も規模拡大中!
*2019年4月現在 4
遊び方
数ターン後..
手駒
盤面
相手のHP
5
複雑すぎる対戦 を深層学習 で解決
"オセロ"はすでに人間を上回る AI が既に作成されている* 
* 1997年 にオセロ AI "ロジステロ" が人間に勝利
https://nlab.itmedia.co.jp/nl/articles/1710/06/news013.html
"オセロニア" はオセロよりも更に複雑なルールになるため
一般的なゲーム AI の構築手法では CPU の実装が困難
深層学習を用いてオセロニアの AI を構築しよう!
6
『逆転オセロニア』 対戦型 プロジェクト
2017年4月 2018年4月
深層学習を用いた
AI の研究開発
十分なレベルの AIの見通しが立つ
AI が本当に十分な強さを
持っているかの検証
2018年9月
AI の十分な強さを確認
AI を用いた企画の検討
AI をゲーム内で利用するための実装
2019年3月
道場リリース
7
『逆転オセロニア』深層学習
少しだけ
8
『逆転オセロニア』 深層学習
✦ 日々集まる PvP の棋譜の中からランクの高い
プレイヤーの棋譜を抽出し、学習データとして利用
✦ AI は盤面の特徴量からランクの高いプレイヤーが
打ちそうな手を推測できるように学習 (= 人間レベルのAI)
✦ 学習・データの前処理などは Python で実装
9
棋譜
✦ 盤面や手駒の状況、お互いの
デッキなどの情報をまとめた
JSON ファイル。
✦ 棋譜には同じ状況を再現できる
すべての情報が入っている。
10
特徴量 抽出
✦ AI は棋譜 (JSON) をそのまま理解することはできない
✦ テンソルという形に変換する必要がある
✱ 数字だけの多次元配列という認識で大丈夫です
{
"手駒": [
{
"キャラID": "e0001",
"レベル": 99,
...
},
...
]
}
[[1583, 0, 0], [893, 0, 0],
[1346, 0, 0], [924, 0, 0],
[1307, 0, 0]]
※ 実際の棋譜や特徴量とは異なります。棋譜
特徴量
11
学習の全体像
棋譜 特徴量
特徴量抽出器
(Python)
12
構築された対戦型
棋譜 評価値
とある盤面を再現
できる十分な情報
全ての打ち手に
対する盤面を考慮
した打ち手の良さ
13
『逆転オセロニア』 サーバー
本題!
14
ゲームと深層学習 を繋げる
考えられる様々な方法
✦ AI モデルデータをクライアントに埋め込む
✦ AI 推論を行うサーバーを実装する
✱ リアルタイム通信でゲームの状態を管理する
✱ クライアントから都度推論対象の棋譜を送ってもらう
15
プラットフォームは
16
のデプロイ( を使うための準備)
✦ Google Cloud Machine Learning Engine (CMLE)
✱ 学習済み AI モデルをデプロイして推論できる
✱ 負荷に応じてオートスケール
✦ HTTP API で特徴量をリクエストし推論結果を得る
17
サーバー
要件
✦ クライアントから棋譜を受け取り評価値を返す
✱ クライアントから棋譜を受け取る
✱ 棋譜を特徴量に変換する
✱ 特徴量を CMLE に入力して評価値を得る
✱ 評価値をクライアントに返す
✦ RPS (秒間リクエスト) 1000 に耐える*
*過去の PvE イベントから有り得る最大の RPS を見積もり
18
サーバーの使い方
AI API サーバー
棋譜バトルの状態を
棋譜に出力
評価値
場所 駒 評価値
B5 1 0.9283
B6 1 0.2222
E5 2 -0.76
F6 2 -1.223
打ち手を選定
(B5, 1)
に推論リクエスト
全ての打ち手に対する
評価値を算出
19
開発当初のアイデア
✦ 棋譜を特徴量に変換するプログラムは学習段階で
Python で実装されている
✦ 特徴量プログラムをモジュール化し、HTTP サーバー
プログラムを構築し、 Google App Engine にデプロイ
App Engine (Python)
API サーバー
● 棋譜から特徴量の導出
● CMLE に推論リクエスト
● プレイヤーに結果を返す
Machine Learning Engine
● 特徴量から評価値の算出
20
推論という特殊なケース
小さい規模の負荷であれば前述の構成で問題なく
動作することを確認したが負荷試験にて、
RPS 100 を超えるとこの構成では不十分*
✦ 特徴量抽出は CPU リソースを多めに使い、時間がかかる
✦ CMLE のレスポンスは平均 3 秒ほど待つ必要がある
21
* GAE が RPS 100 を捌けないというわけではありません。
はたくさん待つのが苦手?
GAE はソースコードをデプロイするだけでオートスケールなど、
様々な恩恵を受けることができる一方で、今回のケースでは並列
リクエスト数の制限があったため、構成を変えることにした。
今回は並列リクエスト数の上限に引っかかっていた様子。
CMLE API や特徴量抽出を待つためのサーバー
と
特徴量を抽出するためのサーバー
を分ける
22
サーバーと特徴量抽出サーバー
✦ API サーバー (Go)
✱ Google Kubernetes Engine
✻ Docker イメージをデプロイしクラスタを構築
✱ CMLE と特徴量抽出サーバーの API を利用し
評価値を獲得する(待つ)
✦ 特徴量抽出サーバー (Python)
✱ Google App Engine
✱ 学習時の特徴量抽出プログラムをサーバー化
23
の構成
Kubernetes Engine
Load Balancer
Compute Engine
Docker Container
API サーバー
App Engine
特徴量抽出サーバー
● 棋譜から特徴量の導出
Machine Learning
Engine
● 特徴量から評価値の算出
● 棋譜を受け取る
● 棋譜を特徴量に変換
● 特徴量から評価値を獲得
● 推論結果の作成
24
秒間リクエスト に耐える
25
エラー数 (count/sec)
RPS
推論回数 (count/sec)
追記 エラー数について
26
エラー数がすごく多く見えるが、今回のAIサーバーではCMLE に
2つのモデルを用意しており、メインで推論を行うメインモデルと、
メインモデルの ramp-up 時の速度に耐えるためのバックアップモ
デルを用意している。
序盤のエラーはスケールが追いついていないメインモデルのもの
であり、その推論はバックアップモデルがバックアップするので対
戦型AIの推論としては成功している。
まとめ
27
まとめ
✦ Google Cloud Platform は様々なサービスが用意されてい
て、AI コンテンツを実装しやすかった
✦ AI に限った話ではないが、実装してみると思わぬ
落とし穴が見つかることがあるので強い心が必要
28

More Related Content

Similar to 『逆転オセロニア』対戦型 AI のバックエンドの実装

【ソシャゲ鉄人化計画】スマホソーシャルゲーム市場の現状と実現体制
【ソシャゲ鉄人化計画】スマホソーシャルゲーム市場の現状と実現体制【ソシャゲ鉄人化計画】スマホソーシャルゲーム市場の現状と実現体制
【ソシャゲ鉄人化計画】スマホソーシャルゲーム市場の現状と実現体制
Takuya Kanda
 

Similar to 『逆転オセロニア』対戦型 AI のバックエンドの実装 (14)

Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか?
Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか? Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか?
Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか?
 
【ソシャゲ鉄人化計画】スマホソーシャルゲーム市場の現状と実現体制
【ソシャゲ鉄人化計画】スマホソーシャルゲーム市場の現状と実現体制【ソシャゲ鉄人化計画】スマホソーシャルゲーム市場の現状と実現体制
【ソシャゲ鉄人化計画】スマホソーシャルゲーム市場の現状と実現体制
 
Unreal Studio+建築CADのワークフロー
Unreal Studio+建築CADのワークフローUnreal Studio+建築CADのワークフロー
Unreal Studio+建築CADのワークフロー
 
Face seek ai edge
Face seek ai edgeFace seek ai edge
Face seek ai edge
 
Creating the Future with Firefox OS
Creating the Future with Firefox OSCreating the Future with Firefox OS
Creating the Future with Firefox OS
 
xR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティング
xR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティングxR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティング
xR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティング
 
エンジン戦略におけるブリッジエンジニアの役割
エンジン戦略におけるブリッジエンジニアの役割エンジン戦略におけるブリッジエンジニアの役割
エンジン戦略におけるブリッジエンジニアの役割
 
八子クラウド座談会事前配布 20191214
八子クラウド座談会事前配布 20191214八子クラウド座談会事前配布 20191214
八子クラウド座談会事前配布 20191214
 
ゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetupゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetup
 
ゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetupゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetup
 
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
 
AI神絵師はITエンジニアの未来をどう変えるのか
AI神絵師はITエンジニアの未来をどう変えるのかAI神絵師はITエンジニアの未来をどう変えるのか
AI神絵師はITエンジニアの未来をどう変えるのか
 
人工知能とゲーム(前篇)
人工知能とゲーム(前篇)人工知能とゲーム(前篇)
人工知能とゲーム(前篇)
 
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 20174 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
 

『逆転オセロニア』対戦型 AI のバックエンドの実装