【テレワーク】クラウド ddc (実験的) - (翻訳)

(オリジナルの投稿者: Amanda.Schade ― UE Community Manager 04-23-2020, 05:37 PM)
(オリジナル: Work From Home: Cloud DDC (experimental) - General Discussion - Unreal Engine Forums)

VPN を介して仕事をする場合に大きな問題となるのは、新たなコンテンツを同期させたあとで派生データを再作成しなければならないことです (シェーダーのコンパイル、テクスチャの圧縮などなど) 。オンサイトで作業する場合は、共有 DDC (派生データのキャッシュ) を使って、そのコンテンツを保存することをおすすめしています。 ― すなわち、変換されたアセットをキャッシュするためにエディタが読み書きできるネットワーク共有を利用します。派生データのキャッシュ | Unreal Engine ドキュメント

DDC へのアクセスは、通常、遅延に大きな影響を受けます。これは、多くのエディタでの作業にとって DDC がクリティカルパス上にあるためです。また、VPN を介してネットワーク共有にアクセスする場合、かなりの遅延が生じるとともに、起動時間が非常に低速になります。

私たちは、自宅からエディタを動かす状況を改善するために、いくつかの方法を試してみました。まず、個々のファイルをクラウド ストレージのプロバイダーにアップロードしてみました (結果は、データをローカルで再生成するよりも悪かったです。これは、遅延が増加し、接続の確立に時間が余計にかかるようになったためです) 。次に、共有 DDC フォルダをアーカイブして、クラウドでホストされているドライブに置いてみました (結果は駄目でした。これは、DDC のサイズが大きく、常にメモリ撹拌が生じたためです) 。

最終的にうまくいったソリューションは、次のようなやり方です。

(1) DDC バックエンドを追加し、DDC に対してなされたあらゆるクエリをプレーン テキスト ファイルに記録できるようにしました。

(2) 自動テストを追加し、エディタでよく使われるいくつかのマップに読み込み、play-in-editor のコマンドを実行するようにしました。(1) で述べた DDC の記録バックエンドがテキスト ファイルをネットワーク共有に生成します。

(3) AutomationTool のコマンド (UploadDDCToAWS) を追加して、すべてのテキスト ファイルをスキャンし、派生データ ファイルを 100MB のバンドルに連結し、それを Amazon S3 にアップロードできるようにしました。このスクリプトは、オンサイトのビルド ファームで 4 時間おきに実行されます。

(4) 新たな DDC バックエンドを追加し、エディタの起動時に上記のバンドルをダウンロードおよび解凍することによって、オンデマンドによる実行であれば生じる遅延を取り除くようにしました。自宅のネットワーク接続を介して数十 GB をダウンロードしても、そこそこのパフォーマンスが得られます。これは、キャッシュしているためであり、UploadDDCToAWS を繰り返す際に既存のバンドルを再利用できるためです。

1 - アクセス レコーダーをセットアップする

このためには、ゲームの DefaultEngine.ini ファイル (下記参照) によって設定されるカスタムの DDC バックエンドをもつエンジンを起動します。


[EnumerateForS3DDC]
MinimumDaysToKeepFile=7
Root=(Type=KeyLength, Length=120, Inner=AsyncPut)
AsyncPut=(Type=AsyncPut, Inner=Hierarchy)
Hierarchy=(Type=Hierarchical, Inner=Shared)
Shared=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=5, FoldersToClean=10, MaxFileChecksPerSec=1, Path=\\path	o\your\regular\shared\ddc, EnvPathOverride=UE-SharedDataCachePath, WriteAccessLog="%GAMEDIR%Saved/Logs/DDCAccessLog.txt")

補足: グラフ内の Shared ノードには、標準的に設定されたネットワーク DDC を指す Path パラメータ、および、アクセス ログの出力先を指定する WriteAccessLog パラメータが含まれています。

WriteAccessLog 属性のサポートは、CL 12166433 で追加されました。

エディタ起動時にこの DDC バックエンドを有効にするには、コマンドラインで -DDC=EnumerateForS3DDC パラメータを渡します。

2 - 自動テスト

このプロセスは、ゲームによって実装が異なります。現在のところ利用できる具体例はありません。必要に応じて、手動でこのデータを誰かに定期的に生成してもらうのもよいでしょう。ただし、その場合、レコーディング バックエンドを有効にしてエディタを起動する必要があります。

3 - データを S3 にアップロードする

UploadDDCToAWS コマンドは、/UE4/Main/Engine/Source/Programs/AutomationTool/Scripts/UploadDDCToAWS.cs で実装されています (CL 12626541 を参照)。通常、RunUAT バッチ ファイルによって実行されます。このコマンドは、以下の引数を受け取ります。

-Bucket=… アップロード先の S3 バケットの名前を指定します。
-CredentialsFile=… S3 の認証情報を含むコンフィギュレーション ファイルのパスを指定します。このファイルのフォーマットについては、ここを参照してください。
-CredentialsKey=… 認証情報の取得元である、認証情報ファイル内のセクション名を指定します。
-CacheDir=… 共有ネットワーク DDC のパス。記録された DDC アクセス ログからのパスは、このベース ディレクトリに対して解決されることになります。
-FilterDir=… 記録されたアクセス ログを含むディレクトリのパス
-Days=… FilterDir 内にファイルを保持する日数。これよりも古いファイルは削除されます。
-Manifest=… ルート マニフェストの URL を保存するための、現在のワークスペース内のパスを指定します。このファイルは、P4 にチェックインされることになります。バンドル URL、マニフェスト URL、ルート マニフェストがどのように相互作用するか、ということについては下記のメモを読んでください。
-KeyPrefix=… バケットにアップロードされるあらゆるもののために使用されるオブジェクトのプレフィクス。
-Reset これが設定されると、既存のバンドルが再利用されなくなります。

4 - 実行時にデータをダウンロードする

S3 からデータをダウンロードできるようにするためには、新たな DDC グラフを設定するか、デフォルトの DDC グラフを編集する必要があります。

デフォルトのコンフィギュレーションを変更することによって、ネットワーク共有ではなく S3 バックエンドを使用するためには、ゲームの DefaultEngine.ini ファイルに以下のセクションを追加します。

Shared=(Type=S3, Manifest="%GAMEDIR%Build/S3DDC.json", BaseUrl=“https://foo.s3.us-east-1.amazonaws.com/”, Region=“us-east-1”, AccessKey=“abc123”, SecretKey=“def465”)

上記において、引数 Manifest は、UploadDDCToAWS コマンドによってソースコントロールに送信されるルート マニフェストのパスを指定しています。BaseUrl/Region は、ダウンロード先の S3 バケットを指定しています。AccessKey/SecretKey は、ダウンロード時に使用する認証情報を指定しています。

S3 派生データ バックエンドは、//UE4/Main/Engine/Source/Developer/DerivedDataCache/Private/S3DerivedDataBackend.cpp および S3DerivedDataBackend.h で実装されています。

以下の変更リストが必要となります。

12149604 12149624 12155157 12156082 12158937 12195879 12459547 12468805

S3 DDC を無効化できるオプションを Editor Preferences で表示することができます。そのためには、以下の設定を DefaultEditor.ini に追加します。


[EditorSettings]
bShowEnableS3DDC=true


実装の詳細

(1) で生成されるテキスト ファイルは、UploadDDCToAWS コマンドによって (3) の 7日後にネットワーク共有から削除されます。

(4) の S3 バックエンドは、秘密鍵とアクセスキーにより設定されていますが、これらの認証情報は、ソースコントロールに送信される必要があります。セキュリティを向上させるために、バンドルはランダムで推測不可能な URL が付与されるとともに、マニフェストによってインデックスされます。また、推測不可能な URL によってアップロードされます。ここ数日のマニフェストのパスは、Perforce のコンフィギュレーション ファイルに保存されてから削除されます。バケットは、LIST リクエストを拒否するように設定されているため、アクセスキー/秘密鍵/マニフェスト URL をもっていても、ここ数日のバンドル データへのアクセスしか認められません。

バンドルは、アクティブなマニフェストに保持されます。ただし、少なくてもそのデータの 40% がまだ参照されていることが条件となります。バンドルが破棄されると、その中のデータは新たなバンドルに追加することができます。

クラウド DDC を実装するために必要となる全変更リスト


テレワークのためのチップ](https://forums.unrealengine.com/international/japan/1750060-【テレワーク】チップ-トリック-知恵を共有しましょう!-翻訳)はまだあります!