Unity を検索

Unity ML-Agents Toolkit v0.7 ― クロスプラットフォームな推論の実現に向けた飛躍

2019年3月1日 カテゴリ: Engine & platform | 6 分 で読めます
取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

本日(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 人の他プレイヤーと対戦できます。各プレイヤーは、できるだけ多くのエネルギー・クリスタルを収集してそれらを制限時間内に自分の基地に持ち帰ることを目指します。ラウンド終了時点で最も多くのエネルギー・クリスタルを基地に集めることのできたプレイヤーの勝ちとなります。他のプレイヤーにぶつかられたプレイヤーは、全てのエネルギー・クリスタルを落としてしまい、他のプレイヤーはそれらをを盗むことができます。

このコンテンツはサードパーティのプロバイダーによってホストされており、Targeting Cookiesを使用することに同意しない限り動画の視聴が許可されません。これらのプロバイダーの動画の視聴を希望する場合は、Targeting Cookiesのクッキーの設定をオンにしてください。

『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 のページにご投稿ください。

2019年3月1日 カテゴリ: Engine & platform | 6 分 で読めます

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック