Search Unity

本日(3 月 1 日)、Unity ML-Agents Toolkit にメジャーなアップグレードが行われ、クロスプラットフォームな推論を可能にする新しいライブラリ「Unity Inference Engine」が使用される形になりました。このアップグレードによってデベロッパーは、Unity ML-Agents Toolkit の生成するニューラルネットワークモデルを、Unity が対応するすべてのプラットフォームで実行できるようになりました。本記事ではこの Unity Inference Engine の紹介と、ML-Agents Toolkit ワークフローに加えられる変更についての説明をお伝えします。また、What Up Games 開発の『Jelly Bowl』において、ML-Agents Toolkit を使用してトレーニングしたキャラクターの挙動を Xbox プラットフォームに配信するために Unity Inference Engine がどのように使用されているかもご紹介していきます。

Unity の ML-Agents Toolkit は、多くのゲームデベロッパーによって、プレイヤーキャラクターとノンプレイヤーキャラクター両方のトレーニングに使用されて来ました。ハイレベルな報酬信号の指定あるいは Unity Editor 内でのデモンストレーションによってキャラクターの挙動のトレーニングを行えることにより、スクリプトを記述するよりも安定性が高く、かつ時間効率の良い方法でキャラクターの挙動を作成することが可能となっています。Unity の ML-Agents Toolkit によって作成されたキャラクターの挙動は、 TensorFlow の生成するニューラルネットワークモデルファイル内にエンコードされます。以前のバージョンの ML-Agents Toolkit では、開発者がモデルを実行できるようにするために、サードパーティのプラグインである TensorFlowSharp を使用していました。しかし残念なことにこのプラグインの対応プラットフォームは Windows、Linux、Mac、iOS、Android の 5 種類のみであったため、Unity が対応する 20 種類以上のプラットフォームのすべてでテストを行うことはできませんでした。

本日(3 月 1 日)をもって、これが変わります。ML-Agents Toolkit によってトレーニングされたニューラルネットワークのデプロイに Unity Inference Engine(コードネーム「Barracuda」)が使用されるようになりました。Unity Inference Engine は、迅速・効率的かつ安定したクロスプラットフォームのニューラルネットワーク推論の実現に向けた、大きな飛躍です。

Unity Inference Engine

私達の大きな目標のひとつは、真に性能の高いクロスプラットフォーム推論をUnity 内で実現することです。これを行うには、3 つの条件が満たされる必要があります。1 つ目は、Unity が対応する 20 種類以上のプラットフォームで推論が使用可能であることです。これにはウェブ、コンソール、モバイルのプラットフォームも含まれます。2 つ目は、大きなニューラルネットワークの実行に不可欠となる GPU 対応を、あらゆるメーカーにわたって幅広く実現することです。3 つ目は、Unity エンジンおよび Unity エディターとの、可能な限り高いレベルでの統合の実現です。例えば、ゲーム内でレンダーした画像を、追加的メモリコピーや GPU 遅延を一切発生させずに推論エンジンに直接送信できる必要があります。Tensorflow Lite、WinML、CoreML など、一般的な推論ライブラリは数多く存在しますが、いずれも単体では十分なレベルのサポートを提供できていません。Unity はこの状況を受け、独自の推論ソリューション「Unity Inference Engine」(コードネーム「Barracuda」)の開発に踏み切りました。

Unity Inference Engine は、Unity Labs の研究チームによって開発されました。このエンジンは、Unity のクロスプラットフォーム技術(IL2CPPBurstUnity コンピュートシェーダーなど)を基盤としたものです。このため、すべての Unity 対応プラットフォームで、サイズをごく小さいもの(現時点で 600KB)に保ちながら非常に高いパフォーマンスを実現することができます。Unity Inference Engine は、CPU と、コンピュートシェーダーに対応可能なすべての GPU で、ニューラルネットワークを実行できます。ご自身のプロジェクトの負荷やレイテンシーの条件に合うように、CPU と GPU のどちらでもお試しになることができます。ML-Agents Toolkit でトレーニングされた、Visual Observation(視覚的観測情報)に依存せず、かつゲームプレイに直接影響を及ぼすモデルの場合は、普通は CPU での推論の実行が最適となります。しかし、ぜひ実際にお試しになって、結果をご報告ください!

現段階では Unity Inference Engine は ML-Agents Toolkit とセットになっています。今後のプロジェクトの発展に合わせて将来的には独立した Unity パッケージとなり、他の深層学習アプリケーションに対応可能となる予定です。ML-Agents Toolkit に Unity Inference Engine を使用することによって、数多くの改善が実現されました ― 例えばインストールのプロセスの改善、エディターワークフローの強化、そしてビルドサイズの縮小(Unity 対応の全プラットフォームにデプロイ可能なサイズ)などです。以下の項では、これらの改良について詳しくご紹介します。

ワークフローの改良とクロスプラットフォーム対応

以前のバージョンの ML-Agents Toolkit では、ニューラルネットワークモデルを Unity 内で実行するために、TensorFlowSharp ライブラリを含む Unity パッケージをユーザーが別にダウンロードする必要がありました。ML-Agents Toolkit v0.7 には Unity Inference Engine がデフォルトで含まれています。追加的なライブラリのダウンロードや統合は一切必要なくなり、ML-Agents Toolkit をそのまま使用して、皆様のモデルを Unity の対応プラットフォームで実行できるようになりました。また、これにより Android プラットフォームの IL2CPP 対応も可能となり、今後施行される Google の 64 ビット要件への対応にも役立ちます。Unity Inference Engine は PC、Mac & Linux スタンドアロン、および Android、iOS でテスト済です。詳細はこちら(英語)をご覧ください。また、もちろん Unity エディターでも機能します ― 再生ボタンを押すだけで、デモシーンのひとつをお試しいただけるようになっています!

この新しいバージョンの ML-Agents Toolkit では、トレーニングのプロセスにおいて、従来の .bytes ファイルではなく、新しい .nn 形式のファイルが生成されます。この新しい形式は Unity Inference Engine と互換性があり、ヒエラルキー内でのアセットのフィルタリングが簡単になります。また .nn モデルファイルを簡単に識別できる新しいアイコンも導入されています。

Learning Brain Inspector ウィンドウ内で、推論の実行に CPU と GPU のどちらを使うか指定できます。小さなモデルの場合は CPU の方が速くなります。これはデータが CPU に残るためです。GPU は、Visual Observation(視覚的観測情報)を使用するものなど、大きなモデルに適しています。

もうひとつ注目すべき改良は、Unity Inference Engine のサイズです。TensorFlowSharp のバイナリサイズと比べて大幅に縮小されており、モバイルデバイスへのデプロイが格段に行い易くなっています。例えば、TensoFlowSharp で3D Balance Ball の環境を iOS でビルドした場合のビルドサイズは 135 MB になりますが、Unity Inference Engine でビルドした場合、たった 83.5 MB で済みます。

Jelly Bowl の実演

Unity は、昨年 10 月に開催された Unite Los Angeles で、Unity Inference Engine の以前のバージョンを統合した初めてのゲーム『Jelly Bowl』の実演を行いました。『Jelly Bowl』は What Up Games の開発した Xbox 向けゲームで、各プレイヤーが最大 5 人の他プレイヤーと対戦できます。各プレイヤーは、できるだけ多くのエネルギー・クリスタルを収集してそれらを制限時間内に自分の基地に持ち帰ることを目指します。ラウンド終了時点で最も多くのエネルギー・クリスタルを基地に集めることのできたプレイヤーの勝ちとなります。他のプレイヤーにぶつかられたプレイヤーは、全てのエネルギー・クリスタルを落としてしまい、他のプレイヤーはそれらをを盗むことができます。

『Jelly Bowl』は ML-Agents Toolkit を使用してプレイヤーキャラクターの挙動のトレーニングを行いました。このプレイヤーキャラクターは実際のプレイヤーの代替として使用することができます。これにより、トレーニングされたエージェントと人間のプレイヤーが競い合うゲームのシングルプレイヤーモデルが可能となります。そして、トレーニングされたこれらのエージェントの挙動を Xbox プラットフォームで実行するために Unity Inference Engine が使用されました。What Up Games の場合、トレーニングされたエージェントを使用するに当たり、実装がより容易に行えただけでなく、より環境に適応したリアリスティックな挙動を作成することができました。また、Xbox プラットフォームでニューラルネットワークモデルを実行する手段としてサポートされた唯一の方法は、Unity Inference Engine を使用することでした。

今後の発展に向けて

今回の Unity ML-Agents Toolkit のリリースは、トレーニングされた挙動のゲームへの組み込みをクロスプラットフォーム対応させるという目標に向けた、大きな飛躍です。このリリースに含まれる機能をご使用になった皆様から、ご意見・ご感想をお聞かせいただければ幸いです。Unity ML-Agents Toolkit に関するフィードバックはメールにて直接お寄せいただけます。問題やご不明な点がある場合は ML-Agents GitHub の Issues のページにご投稿ください。

10 コメント

コメントの配信登録

コメント受付を終了しました。

  1. Gregory Pierce

    3月 16, 2019 8:59 pm

    If only these recent moves were a sign that Python was becoming a first class supported language in Unity. That would be AWESOME!

  2. Juraj Letko

    3月 9, 2019 7:16 pm

    Thanks Unity ML Team!
    I believe that in the near future the Reinforcement learning, or in general, ML/neural nets will play big role in games. And later in real-life tasks as well.

  3. Michiel Smuts

    3月 7, 2019 5:26 pm

    Hi, Anyone having trouble dragging the .nn file to the model? My .nn files seem to be ignored by the editor, although they do get the nice new icon.

    1. Marwan Mattar

      3月 18, 2019 4:13 pm

      Hi Michiel – can you please submit an Issue to the ML-Agents GitHub Repo? This is the best way to get in touch with the ML-Agents team and the broader ML-Agents community for feedback.

    2. Hey, Michiel Smuts try replacing “ENABLE_TNESORFLOW” with “ENABLE_BARRACUDA” in the scripting define symbols it should allow you to drag the .nn files then. I had this similar issue before.

  4. Thank you to the team for that great upgrade.
    ML-Agents is opening so many possibilities for independent developers!

  5. Artur Vidal

    3月 2, 2019 1:30 am

    Hi, will the inference engine be available for developers to use? Is there any plans to allow it to be used as something like a Prolog inference engine with backwards chaining? Or maybe lisp?

    1. ReJ aka Renaldas Zioma

      3月 2, 2019 1:57 pm

      Yes, inference engine will be available to developers.
      And no, no backward chaining is planned. Unlike inference in logic languages, we aim only at inference strictly in neural networks terms – forward pass only.

    2. Renaldas Zioma

      3月 2, 2019 2:07 pm

      Yes, inference engine will be available to developers.
      And no, no backward chaining is planned. Unlike inference in logic languages, we aim only at inference strictly in neural networks terms – forward pass only.

  6. Congratulations on v0.7 release! New inference engine is very welcome addition!

    Would like to mention that official Unity discord group (discord.gg/unity) also got #machine-learning channel in case one wants to join and discuss about ML Agents :)