使用Horde进行Cook时missing cached shadermap的编译没有uba加速

我们使用Horde做打包流水线,编译部分也接了uba。我们最近一次改动到了基础材质导致需要编译大量shader,在打包机的log中看到有大量的“LogMaterial: Display: [CookWorker 3]: Missing cached shadermap for MI_c1470_31 in PCD3D_SM6, Default, SM6, Game (DDC key hash: c52c85c564d714259d8c8c5ee8bb5337166eb807), compiling.”

我们预期是shader编译应该也会被uba加速,当时我们其他的Agents都是ready状态,不过实际情况是所有的shader都是这台机器自己编译完的,我们的cook时间因此变长了4倍

我想问一下,是不是有什么没有配置正确的地方,要怎么让cook时的shader编译能正确被uba加速?

[Attachment Removed]

您好,请问是所有shader都没有通过UBA运行吗?还是仅仅几个shader?

[Attachment Removed]

您好 这是log文件

[Attachment Removed]

您好,我又仔细看了一下log。

情况是这样的,我们forcerecook 正常情况下是15分钟左右,这两次修改基础材质之后cook总时间有3个小时,其中确实只有200多条Missing cached shadermap,其余大量的是Waiting on job [M_Env_8f96e1f21a683f02/Medium/FInstancedStaticMeshVertexFactory/TVirtualTexturePSBaseColor/0] (input hash fd9c753ed7f637b89235a947dc0710ac99487b969518a61dc6557cffc06c266d); current status is Queued类似这样的log,这个情况是正常提交给uba但是被阻塞了吗?

[Attachment Removed]

这里看不太出来是不是uba卡住,可以提供一下log吗,我看一下

不过这里有一些参数可以试一下强制退出:

r.ShaderCompiler.ShadermapCompilationTimeout=7200 (默认2小时标记为hung)

r.ShaderCompiler.CrashOnHungShaderMaps=0 (标记为hung之后,0为打印error,继续等待,1为触发crash退出)

[Attachment Removed]

从log里看并没有启用uba:LogUbaHorde: Display: UBA/Horde Configuration [Uba.Provider.Horde]: Not Enabled

可以在defaultengine.ini里加入

[Uba.Provider.Horde]

Enabled=true

ServerUrl=“http://your-horde-server:5000”

Pool=Win-UE5

MaxCores=50000

不过对于一个shader卡住很久的情况,即使通过uba分发也有可能发生,可以考虑使用超时机制

[Attachment Removed]

另外我看了下参数,CookProcessCount=6可能有点大,如果内存不足会效率会变低

一般256GB RAM的机器可以设置为4

[Attachment Removed]

[UbaController]

+Providers=Uba.Provider.Horde.Custom

[Uba.Provider.Horde.Custom]

Enabled=True

ServerUrl=“http://192.168.21.126:13340/”

Pool=Compute

[Horde]

ServerUrl=“http://192.168.21.126:13340/”

您好,以上是我们目前的配置,只是加了一个custom的Provider没有用默认的,Pool的话是我们给机器手动打了一批Compute用于uba编译,我们自己编译或者打包机编译Editor都是正常触发了uba的,这样写是不行的吗?

[Attachment Removed]

GConfig->GetArray(TEXT(“UbaController”), GIsBuildMachine ? TEXT(“BuildMachineProviders”) : TEXT(“Providers”), ProviderList, GEngineIni);

buildmachine的逻辑不太一样​,如果自定义的话,读的是BuildMachineProviders,否则就是Uba.Provider.Horde

所以要改成​

[UbaController]

+Providers=Uba.Provider.Horde.Custom

+BuildMachineProviders=Uba.Provider.Horde.Custom

[Attachment Removed]