TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

AlphaStarの論文を読む その11(インフラ)

インフラ

  • リーグを訓練するために、多数のStarCraft II対戦を並行して実行し、それらのゲームのデータに基づいてエージェントのパラメータを更新する。
  • これを管理するために、さまざまなタイプの分散ワーカーで非常にスケーラブルな訓練セットアップを開発した。

ハードウェア

  • リーグのすべてのトレーニングエージェントに対して、16,000のStarCraft IIの並列対戦と16のアクタータスク(それぞれ8つのTPUコア*1を備えたTPU v3デバイスを使用)を実行して、推論を実行する。
  • ゲームインスタンスはプリエンプティブCPU(それぞれ28の物理コアを備えた150のプロセッサとほぼ同等)上で非同期に進行するが、エージェントステップの要求はTPUを効率的に使用するために動的にバッチにまとめられる。
  • バッチ推論にTPUを使用すると、以前の研究*2*3よりも大幅に効率が向上する。

訓練パイプライン

  • アクターは、ネットワークを介して中央の128コアTPUラーナーワーカーに観測、アクション、および報酬のシーケンスを送信し、トレーニングエージェントのパラメーターを更新する。
  • 受信したデータはメモリにバッファリングされ、2回再生される。
  • ラーナーワーカーは、大きなバッチで同期更新を実行する。
  • 各TPUコアは、4つのシーケンスのミニバッチを処理し、合計バッチサイズは512である。
  • ラーナーは、毎秒約50,000エージェントステップを処理する。
  • アクターは、ラーナーからのパラメーターのコピーを10秒ごとに更新する。

コーディネーター

  • このアクターとラーナーのセットアップの12の個別のコピーをインスタンス化する:各StarCraft種族に対して、1つのメインエージェント、1つのメインエクスプロイト、2つのリーグエクスプロイトエージェント
  • ある中央コーディネーターは、利得行列(payoff matrix)の推定値を維持し、要求に応じて新しい対戦をサンプリングし、メインおよびリーグのエクスプロイトをリセットする。
  • 追加の評価ワーカー(CPUで実行)を使用して、利得(payoff)の見積もりを補完する。
  • 訓練セットアップの概要については、拡張データの図6を参照。
拡張データ図6|トレーニングインフラストラクチャ|リーグ全体のトレーニング設定

f:id:TadaoYamaoka:20191125083339p:plain

感想

アクターは並列実行を行い、軌跡をラーナーに送信して、ラーナーは同期でパラメータの更新を行うという仕組みになっています。
A2Cの並列処理に近い構成だと思います。

アクターの推論は、1つのサーバ内の並列実行している対戦のステップをまとめてバッチで処理を行っています。
私が作成しているdlshogiの自己対局でも似たような処理を行っています。

リプレイバッファを使用していますが、再生回数は2回と少なめです。
50万ステップ分ごとにパラメータの更新を行っており、AlphaZeroに比べるとパラメータの更新頻度は高いようです。

(続く)

AlphaStarの論文を読む - TadaoYamaokaの開発日記
AlphaStarの論文を読む その2 - TadaoYamaokaの開発日記
AlphaStarの論文を読む その3 - TadaoYamaokaの開発日記
AlphaStarの論文を読む その4 - TadaoYamaokaの開発日記
AlphaStarの論文を読む その5(アーキテクチャ) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その6(アーキテクチャその2) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その7(アーキテクチャその3) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その8(教師あり学習、強化学習) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その9(マルチエージェント学習) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その10(リーグ構成) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その11(インフラ) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その12(評価) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その13(分析、AlphaStarの一般性) - TadaoYamaokaの開発日記