MRが楽しい

MRやVRについて学習したことを書き残す

Unity AIのドキュメントを読む その56(ワーカーを作成する)

本日はUnityの技術調査枠です。
Unity AIのドキュメントを読みながら実際に操作を試して記事に残します。

Unity AI

以下のUnity AIのドキュメントを試しながら実行時のキャプチャをしていきます。
docs.unity3d.com

モデルを実行するためのエンジンを作成する

モデルを実行するにはワーカーを作成する必要があります。ワーカーはモデルを実行可能なタスクに分割するエンジンです。
グラフィックス・プロセッシング・ユニット (GPU) や中央処理装置 (CPU) などのバックエンドで実行されるタスクをスケジュールします。

ワーカーを作成する

ワーカーを作成するにはnew Worker(...)を使用します。このtきバックエンドの種類を指定する必要があります。
バックエンドの種類は推論エンジンにワーカーの実行場所とランタイムモデルを指示します。

例えば、以下のコードは推論エンジンのコンピュートシェーダーを使用してGPU上で実行されるワーカーを作成します。

using UnityEngine;
using Unity.InferenceEngine;

public class CreateWorker : MonoBehaviour
{
    [SerializeField]
    private ModelAsset modelAsset;

    private Model runtimeModel;

    private Worker worker;

    void Start()
    {
        runtimeModel = ModelLoader.Load(modelAsset);
        worker = new Worker(runtimeModel, BackendType.GPUCompute);

        // ワーカーのバックエンド情報をコンソールに出力する
        Debug.Log("Worker created with backend: " + worker.backendType);
    }
}


バックエンドの種類

推論エンジンはCPUとGPUの2種類のバックエンドタイプを提供します。
推論エンジンが各種バックエンドでどのように演算を実行するかについては以下の「推論エンジンによるモデルの実行方法」を参照ください。
bluebirdofoz.hatenablog.com

バックエンドタイプがモデル内の推論エンジンレイヤーをサポートしていない場合ワーカーはアサートします。

バックエンドタイプ 使用方法
BackendType.CPU 小規模なモデルや入出力がCPU上にある場合、GPUよりも高速です。WebGLではBurstはWebAssemblyにコンパイルされるため、パフォーマンスが低下する可能性があります。
BackendType.GPUCompute 一般的にほとんどのモデルで最も高速なバックエンドです。出力がGPU上に残っている場合、コストのかかるデータ転送を回避します。
BackendType.GPUPixel コンピュートシェーダーをサポートしていないプラットフォームでのみ使用します。SystemInfo.supportsComputeShadersでプラットフォームのサポート状況を確認してください。

モデルのパフォーマンス速度はプラットフォームのBurstにおけるマルチスレッドのサポート、コンピュートシェーダーの完全サポート、そしてゲームまたはアプリケーションのリソース使用量に依存します。
モデルのパフォーマンスを理解するにはモデルのプロファイルを作成することが重要です。