uba」タグアーカイブ

UE5 の UnrealBuildAccelerator で C++ とシェーダーのコンパイルを高速化する

Unreal Build Accelerator (UBA) を使うと、複数台の PC を使って UnrealEngine 5 のビルド時間を短縮することができます。UBA は UE5 5.4 で Beta 機能として搭載され、5.5 以降正式版になりました。以下そのインストール方法や設定方法についてまとめます。以前 5.4 で解説を行いましたがそのアップデートとなります。

1. サーバーのインストール (Windows)

どれか一台の PC をサーバーとしてセットアップします。

(1) Horde Server のインストール

  1. UnrealHordeServer.msi をインストールします
    • ソースコード版エンジンの Engine/Extras/Horde/UnrealHordeServer.msi
    • または GitHub の Release ページから直接ダウンロードできます
  2. 途中で出てくる「Horde Server Configuration」はデフォルトのままで OK です
    • Port は 13340
  3. 完了したら自動的にブラウザが開きます
    • 「UNREAL ENGINE HORDE」のページが表示されていれば完了です。HordeServer のドキュメントをここから読むことができます。
    • もし自動的に開かない場合は「 http://localhost:13340 」を開いてください

(2) Windows Firewall の設定

Port 13340 で受信できるように許可します

  1. スタートメニューで “fire” を検索して「Windows Defender ファイアウォール」を開きます
  2. 左側の「詳細設定」をクリックして、「セキュリティが強化された Windows Defener ファイアウォール」を立ち上げます
  3. 「ローカル コンピューター のセキュリティ」の中の「受信の規則」をクリック
  4. 一番右の「操作」の中にある「受信の規則」にある「新しい規則…」をクリック
  5. 「新規の受信の規則ウィザード」が開くの以下の順番に入力します
    1. 「ステップ: 規則の種類」で「ポート」を選択して「次へ」
    2. 「ステップ: プロトコルおよびポート」で TCP(T) のまま、「特定のローカルポート」に「13340,13342」を入力して「次へ」
    3. 「ステップ: 操作」で「接続を許可する(A)」のまま「次へ」
    4. 「ステップ: プロファイル」は「パブリック」からチェックを外して「次へ」
    5. 「ステップ: 名前」に “Horde Server 13340,13342” と入力して「完了」

2. Horde Agent のインストール (Windows)

分散ビルドをさせたい PC で Horde Agent をインストールします。Agent は何台でも構いません。Horde Server を入れた PC にもインストールできます。

(1) Unreal Toolbox のインストール

  1. ブラウザで Horde Server をインストールした PC の Port 13340 を開きます
    • 「 http://<HordeサーバーのIPアドレス>:13340 」
    • 例えば IP アドレスが 192.168.0.100 なら「 http://192.168.0.100:13340 」
  2. 開いたページ上部メニューの「TOOLS」から「Downloads」を選択します
  3. 一番下の「Unreal Toolbox (Windows Installer)」をダウンロードします
  4. ダウンロードした UnrealToolbox.msi をインストールします
  5. 「Horde Server URL:」の入力欄が出たらサーバーの URL を入力します
    • 例えば IP アドレスが 192.168.0.100 なら「 http://192.168.0.100:13340 」
  6. インストールが完了すると Unreal Toolbox の設定画面が開くので次に進みます

(2) Unreal Horde Agent のインストール

  1. Toolbox のインストールが完了すると Unreal Toolbox の設定画面が自動的に開きます
    • もし開かない場合はスタートメニューから Unreal Toolbox を直接開いてください
  2. Toolbox 上で「Horde Agent (Windows Installer)」をインストールします
    • General → Tools の中にある「Horde Agent」の右の「Add」をクリック
  3. Horde Agent のインストーラーが立ち上がるのでそのままインストールします
  4. 途中の「Horde Server URL:」は先程 Toolbox インストール時に入れたものと同じです
    • 最初から URL が入ってるので変更不要です
    • もし手動で入力するなら「 http://<HordeサーバーのIPアドレス>:13340 」
  5. 「Sandbox directory:」もデフォルトのままで OK です
    • 別の場所に設定しても構いません
  6. 最後の画面で「Enroll agent with Horde server」にチェックを入れたまま「Finish」
    • ブラウザが開いて自動的に Agent Enrollment 画面になるので次に進みます

(3) Agent PC の登録

  1. ブラウザページに「Enroll Agent ~」とダイアログが表示されていたら青い「Register」ボタンをクリックします
  2. その後 PC のブラウザで「 http://<HordeサーバーのIPアドレス>:13340/agents 」を開いて、登録した PC が一覧に含まれていれば登録完了です

もし自動的にブラウザが開かなかったり、Agent 一覧に PC が表示されていない場合は以下の手順で登録を行います。

  1. Windows のタスクトレイにある Unreal の “u” アイコン右クリックから「Enroll with Server…」
  2. ブラウザが開いて “Agent Enrollment” のページが開くので、「Enroll Agent~」のダイアログで「Register」をクリック
  3. もし自動的にダイアログが出ていない場合は、自分の PC 名にチェックを入れて右上の「Enroll Agents」をクリック
    • すでに登録済みの場合はこの画面が出ないことがあります。agents のページで確認してみてください

    (4) Windows Firewall の設定

    サーバーと同じように Port 7000-7010 で通信できるように設定しておきます。

    1. スタートメニューで “fire” を検索して「Windows Defender ファイアウォール」を開きます
    2. 左側の「詳細設定」をクリックして、「セキュリティが強化された Windows Defener ファイアウォール」を立ち上げる
    3. 「ローカル コンピューター のセキュリティ」の中の「受信の規則」をクリック
    4. 一番右の「操作」の中にある「受信の規則」にある「新しい規則…」をクリック
    5. 「新規の受信の規則ウィザード」が開くの以下の順番に入力
      1. 「ステップ: 規則の種類」で「ポート」を選択して「次へ」
      2. 「ステップ: プロトコルおよびポート」で TCP(T) のまま、「特定のローカルポート」に「7000-7010」を入力して「次へ」
      3. 「ステップ: 操作」で「接続を許可する(A)」のまま「次へ」
      4. 「ステップ: プロファイル」は「パブリック」からチェックを外して「次へ」
      5. 「ステップ: 名前」に “Horde Agent 7000-7010” と入力して「完了」

    3. Unreal Engine 側の設定

    UE5 5.7 以降

    ~Engine.ini に以下の設定を追加します。同じエンジンを使うプロジェクト全部で同じ設定を使う場合は Engine 側の Engine/Config/BaseEngine.ini に記述します。プロジェクト側の Config/DefaultEngine.ini や UserEngine.ini で定義しても構いません。

    [Uba.Provider.Horde.UE5]
    Enabled=true
    ServerUrl="http://<HordeサーバーのIPアドレス>:13340/"
    MaxCores=500
     
    [UbaController]
    +Providers=Uba.Provider.Horde.UE5

    例えば Horde Server をインストールした PC の IP アドレスが 192.168.0.100 の場合は次のようになります。

    [Uba.Provider.Horde.UE5]
    Enabled=true
    ServerUrl="http://192.168.0.100:13340/"
    MaxCores=500
     
    [UbaController]
    +Providers=Uba.Provider.Horde.UE5

    これで C++ やシェーダーのビルドが複数の PC に分散されるようになります。

    UE5 5.6 以前

    UE5 もしくは HordeServer のバージョンによって設定方法に違いがあります。UE5 5.6 以前など古いバージョンを使用している場合は以下のページも参照してください。

    C++ のビルド分散ビルドには DefaultEngine.ini だけでなく BuildConfiguration.xml の設定も必要なので注意してください。

    関連ページ

    UE5 Intel N100 1台だけでも分散ビルドの効果はあるかどうか

    Unreal Engine を使った開発ではビルドに時間がかかります。特にソースコード版のエンジンを使うとエンジン全体のコンパイルも同時に行われる場合があり、1時間近く待たされることも少なくありません。

    時間がかかるコンパイルを複数台の PC を使って高速化する仕組みが分散ビルドです。UE5 5.4 ではエンジンの機能として分散ビルドツール UnrealBuildAccelerator (UBA) が付属するようになりました。

    前回の記事で UE5 の分散ビルド UBA を使うとビルドを大幅に高速化できることがわかりました。ですが家に PC が何台もあるケースはそんなに多くないと思われます。そこで非力な PC 1台との組み合わせでも、分散ビルドを行う意味があるのかどうか調べてみました。

    Intel N100 (Alder Lake-N) の場合

    以下は開発用 PC に Intel N100 搭載 PC を組み合わせて分散ビルドを行った結果です。(Intel N100 の性能について詳しくはこちら)

    CPUARCHCore数Thread数単独でのビルド時間分散ビルド利用時削減時間
    Ryzen 5 3600Zen261291m 28s74m 46s-16分42秒
    Core i7-13700RaptorLake162448m 00s44m 37s-3分23秒
    ↑UE5 5.4.2 の Win64 Development Editor の C++ コンパイル時間の比較

    Ryzen 5 3600 単独でビルドを行うと 91分かかりますが、N100 との分散ビルドで約 17分短縮できることがわかりました。思ったよりも効果が出ています。

    流石に性能が高い Core i7-13700 の場合は 3分少々しか変わりませんが、それでもきちんと速くなっています。

    分散ビルドでは通信のオーバーヘッドがありますし、非力な PC の完了待ちで逆に遅くなる可能性も考えられます。ですがこの結果を見ると少ないながら速度が向上しているため、安心して分散化できそうです。なお HordeServer も同じ N100 PC 上で走らせています。

    さらに、他の PC との組み合わせでもビルド時間を調べてみました。

    他の PC との組み合わせの結果一覧

    ビルドPC組み合わせた分散PC合計Core数合計Thread数ビルド時間削減時間
    Ryzen 5 3600なし61291m 28s
    Ryzen 5 3600Core i5-1030NG7102077m 37s-13分51秒
    Ryzen 5 3600Intel N100101674m 46s-16分42秒
    Ryzen 5 3600Core i7-4790K102061m 40s-29分48秒
    Ryzen 5 3600Ryzen 5 2600122457m 24s-34分04秒
    Ryzen 5 3600Ryzen 5 5560U122456m 55s-34分33秒
    Ryzen 5 3600Core i7-13700223634m 17s-57分11秒
    Core i7-13700なし162448m 00s
    Core i7-13700Inte N100202844m 37s-3分23秒
    Core i7-13700Core i7-1030NG7203244m 20s-3分40秒
    Core i7-13700Core i7-4790K203239m 29s-8分31秒
    Core i7-13700Ryzen 5 2600223637m 38s-10分22秒
    Core i7-13700Ryzen 5 5560U223637m 26s-10分34秒
    Core i7-13700Ryzen 5 3600223633m 32s-14分28秒
    ↑UE5 5.4.2 の Win64 Development Editor の C++ コンパイル時間の比較

    結果から、分散ビルドに使えるマシンが 1台だけ (合計 2台) でもエンジンのビルドではそれなりに効果があることがわかります。UE5 の開発で頻繁にエンジンビルドが走る場合は、空いている PC を使って UBA を入れておくと良さそうです。詳しい導入手順については前回の解説記事をご覧ください。

    開発に使っている PC の性能が低い方が恩恵は多いのですが、Ryzen 5 3600 と Core i7-13700 の組み合わせ結果を見ると、どちらでビルドを開始してもビルド時間がほぼ変わりませんでした。このケースではかなり効率よく分散できていることがわかります。

    台数でカバーする

    使える CPU コア数が多い方がビルドは速くなっています。以下の表は、性能が高い PC 1台使った場合と、非力&古い PC を多数組み合わせた場合を比較したものです。

    ビルドPC組み合わせた分散PC合計CORE数合計THread数ビルド時間削減時間
    Ryzen 5 3600Core i7-13700223634m 17s-57分11秒
    Ryzen 5 3600N100+1030NG7+2600+4790K+6700K285236m 23s-55分05秒
    ↑UE5 5.4.2 の Win64 Development Editor の C++ コンパイル時間の比較

    使用した PC は Intel N100、Core i5-1030NG7、Ryzen 5 2600、Core i7-4790K、Core i7-6700K の 5台です。コア数が少ないものだけ選んでいますが、非力な PC でも数を集めることで、おおよそ Core i7-13700 1台分くらいの性能を出すことができていることがわかります。

    速い PC の中に N100 を入れた場合

    今度は速い PC 複数台でかなり高速に分散ビルドできている状態で、N100 や Core i5-1030NG7 など性能が低い PC を追加してみます。ビルドに使った PC は Core i7-13700 です。

    組み合わせた分散PC台数合計CORE合計THREADビルド時間
    13700+3950X+4750G+3600+2600+5560U+4790K76211614m 37s
    13700+3950X+4750G+3600+2600+5560U+4790K+N10086612014m 07s
    13700+3950X+4750G+3600+2600+5560U+4790K+1030NG786612414m 26s
    13700+3950X+4750G+3600+2600+5560U+4790K+1030NG7+N10097012813m 42s
    ↑UE5 5.4.2 の Win64 Development Editor の C++ コンパイル時間の比較

    遅い PC が足を引っ張ることもなく安定して動作しました。むしろわずかながら速度が向上しているため、性能が低くてもとりあえず Agent を追加して増やしていく方針で大丈夫そうです。

    使った PC のスペック一覧その他

    以下はテストに使った PC のスペック詳細になります。Ryzen 5 3600, Core i7-6700K など一部電力制限をかけた状態となっていますのでご了承ください。すべて 有線 LAN を使っています。

    CPUTDPARCHCORE数THREAD数RAM容量SSD
    Ryzen 5 360045WZen261264GBNVMe3
    Core i7-1370065WRaptorLake162464GBNVMe4
    Intel N10020WAlderLake-N4416GBNVMe3
    Core i5-1030NG710WIceLake4816GBNVMe3
    Core i7-4790K88WHaswell4816GBSATA
    Core i7-6700K60WSkyLake4832GBSATA
    Ryzen 5 260065WZen1+61232GBNVMe3
    Ryzen 5 5560U25WZen361232GBNVMe3
    Ryzen 7 4750G65WZen281632GBNVMe3
    Ryzen9 3950X105WZen2163232GBNVMe3

    UnrealBuildAccelerator は PC 性能によらず分散の効果がわかりやすいので、導入のハードルがかなり下がったのではないかと思います。今回は C++ のコンパイルのみ試しましたが、ビルド時間を短縮できますので UE5 での開発効率が大きく向上しそうです。

    関連エントリ

    UE5 のビルドを速くする、分散ビルド UnrealBuildAccelerator を使う

    UE5 5.4 には UnrealBuildAccelerator (以下 UBA) という分散ビルドツールが付属しています。家に複数台の PC がある場合は、それぞれインストールしておくとことでビルド時間を大幅に短縮することができます。

    実際に空いている PC を使って UE5 のビルドがどれくらい速くなるの比較してみました。以下の表は UE5 5.4.2 Win64 Development Editor のエンジンリビルド時間の比較です

    CPUARCHCoRE数THREAD数単独ビルド時間分散ビルド利用時ビルド速度
    Core i7-13700RaptorLake162448m 00s15m 21s3.1 倍
    Ryzen 5 3600Zen261291m 28s16m 28s5.6 倍
    UE5 ビルド時間の比較、ビルド時間が短い方が高速

    Core i7-13700 では 48分かかっていたビルドが分散ビルド利用時でわずか 15分。単独でビルドしていた場合の 1/3 の時間で完了しています。

    コア数が少ない Ryzen 5 3600 の場合はさらに効果が大きく、ビルド速度は 5.6倍にもなります。91分から 16分まで短縮できており、スタンドアロンの場合は Core i7-13700 の倍の時間がかかっていたものが、分散ビルドを使うとほぼ同じ時間で完了しました。

    今回分散ビルドで使用した PC は以下のとおりです。

    CPUARCHCORE数THREAD数RAM容量
    Ryzen 5 2600Zen1+61232 GB
    Ryzen 5 3600Zen261264 GB
    Ryzen 5 5560UZen361232 GB
    Ryzen 7 4750GZen281632 GB
    Ryzen 9 3950XZen2163232 GB
    Core i7-13700RaptorLake162464 GB
    合計58108
    ビルドに使用したヘルパー (Agent) PC 一覧

    全部で PC 6台、合計 58コア 108スレッド使用しています。

    Core i7-13700 でビルドした場合は他の 5台がビルド用のヘルパー (Agent) になります。本体 16コア 24スレッドで、加えて外部の PC が Agent として 42コア 84スレッド分追加される形になります。同じように Ryzen 5 3600 の場合は本体 6コア 12スレッドに対して外部の PC が 52コア 96スレッドです。

    非常に効果が大きかったので、PC が複数台ある場合は UBA を使うことでビルド時間をだいぶ短縮できそうです。

    以下分散ビルド UBA のインストール方法の詳細です。

    インストール手順

    インストールにあたってこちらのページを参考にさせていただきました。UBA について詳しくはこちらのページも参照してください。

    (1) HordeServer インストール

    どれか 1台の PC に HordeServer をインストールします。この手順は GitHub のソースコード版エンジン UE5 5.4 のものです。

    1. UnrealHordeServer.msi を実行してインストールします
      • GitHub 版のエンジンをビルドしている場合は Engine/Extras/Horde/UnrealHordeServer.msi にあります。
      • GitHub からダウンロード直後は Extras フォルダがないので、先に Setup.bat を実行しておく必要があります。
    2. このマシンに Port 13340 でアクセスできるようにしておきます
      • Firewall で制限がかかっている場合は、TCP Port 13340 でアクセスできるように設定しておいてください

    (2) HordeAgent のインストール

    ビルドに使いたい PC それぞれに Agent をインストールします。HordeServer と同じマシンにインストールしても構いません。

    1. ブラウザで HordeServer をインストルした PC にアクセスします
      • 「 http://サーバーPCのIPアドレス:13340/tools 」を開きます
    2. ダウンロードページが開くので「Horde Agent (Windows Installer) 」をダウンロードします
    3. ダウンロードした UnrealHordeAgent.msi を実行してインストールします
      • 「Horde Server URL:」には「 http://サーバーPCのIPアドレス:13340」を入力します
        • 注意: サーバーが自分自身の場合でも絶対に「localhost」や「127.0.0.1」を使わないでください。ここで接続に使用したアドレスが他の PC に配布されるので、localhost だとこの Agent にアクセスできなくなります。
      • 「Sandbox directory: 」はキャッシュとして使うフォルダを指定します
        • 空き容量の多い SSD ドライブをおすすめします。問題なければそのままでも構いません。
    4. インストールが終わると、ブラウザで自動的に「Agent Enrollment」のページが開きます
      • もし開かない場合は、タスクトレイの「U」アイコン (Unreal Engine のロゴ) 右クリックから「Enroll with Server…」を選択してください
    5. しばらくすると Agent Enrollment のページに PC 名が表示されるので、選択して右上の「Enroll Agents」をクリックします
      • PC が表示されるまで時間がかかる場合があります。数分待ってみてください。
    6. 登録が終わったら、「http://サーバーPCのIPアドレス:13340/agents」を開いて PC が表示されていることを確認してください
    7. タスクトレイに UnrealEngine ロゴのアイコン (UnrealHordeAgent) が登録されているので、右クリックして Status を「When Idle」に変更します
      • Status → When Idle
    8. Agent PC に Port 7000~7010 でアクセスできるようにしておきます
      • Firewall の設定で TCP Port 7000~7010 で受信できるようにしておきます

    同じ手順で各 PC にそれぞれ HordeAgent をインストールしておきます。今回のテストでは 6台の PC 全てに Agent をインストールしています。

    なお VisualStudio などビルド環境のセットアップは不要です。

    (3) ビルドするための設定

    ビルドを行う側の PC にもさらに追加の設定が必要です。

    1. BuildConfiguration.xml を作成します
      • 特定のエンジンだけで使用する場合は、エンジンフォルダ内の Engine/Saved/UnrealBuildTool/BuildConfiguration.xml に保存します
      • もし全部のエンジンで同じ設定を使いたい場合は、自分のドキュメントフォルダの中に 「ドキュメント\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml」のように入れてください
    2. BuildConfiguration.xml の内容は以下のとおりです
      • xml 内の「サーバーPCのIPアドレス」の部分は置き換えてください。
      • すでに BuildConfiguration.xml が存在する場合は内容を追加してください。
    <?xml version='1.0' encoding='utf-8'?>
    <Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
        <BuildConfiguration>
            <bAllowFASTBuild>false</bAllowFASTBuild>
            <bAllowUBAExecutor>true</bAllowUBAExecutor>
        </BuildConfiguration>
        <Horde>
            <Server>http://サーバーPCのIPアドレス:13340</Server>
            <WindowsPool>Win-UE5</WindowsPool>
        </Horde>
        <UnrealBuildAccelerator>
            <bLaunchVisualizer>false</bLaunchVisualizer>
            <bForceBuildAllRemote>false</bForceBuildAllRemote>
        </UnrealBuildAccelerator>
    </Configuration>

    これで完了です。この設定をした PC 上で UE5 の C++ ビルドを行うと分散ビルドが行われます。

    ビルドを行う場合の注意点

    ステータス切り替えについて

    HordeAgent には PC の Idle 状態かどうか判定して Status を動的に切り替える機能があります。

    ですが負荷の高い作業やゲームのテストプレイ、負荷の調査などを行う場合は、意図しないビルドタスクが割り当てられてしまわないように予め手動でステータスを切り替えておくことをおすすめします。

    1. タスクトレイの「U」(UnrealEngine ロゴ)アイコン右クリック → Status
    2. 普段は「 When Idle 」にしておく
    3. テストプレイ前に「 Disabled 」に切り替え、終わったら「When Idle」に戻す

    Horde Agent の設定変更

    サーバーの URL やキャッシュフォルダなど、インストール時に入力したパラメータをあとから UI 上で変更する方法が見つかりませんでした。変更したい場合は、もう一度インストーラーを実行し直すのが確実なようです。