使用 Redshift 管理 VRAM 问题

Netinho Da Costa
Netinho Da Costa
  • 更新

提示: 当遇到 VRAM 问题时,请先尝试重启计算机,并在不打开其他应用程序的情况下重新启动渲染任务。某些应用程序(例如浏览器或 After Effects)可能会“占用”显存,导致 Redshift 无法使用。此外,如果同一块(用于渲染的)GPU 上连接了多个显示器,可以尝试仅保留一个显示器进行渲染,或者将显示器连接到另一块(非渲染用)GPU(如果可用)。

在 DCC 的渲染首选项面板中 「COMPUTE DEVICES」 部分(以下 Cinema 4D 示例所示),可以选择允许参与渲染的 GPU。此处还可以看到 CPU 的复选框,CPU 也能参与渲染任务。(提示:在某些情况下,禁用 CPU 渲染可能更有利,因为 CPU 相较 GPU 渲染速度更慢。更快的 GPU 有时会被迫等待较慢的 CPU 分块完成后才能继续渲染下一帧。)

如果系统中有多块 GPU,禁用其中一块可让它专门处理系统的其他显存需求,而不参与渲染任务。(提示:如果有多块 GPU,建议尝试仅启用一块 GPU 进行渲染,让另一块 GPU 处理系统的其他显存需求,有时这种方式会比多 GPU 同时渲染更高效。)

 

Level 1 - 可用显存(硬件层面)

在 Redshift 日志文件顶部的 “Initializing GPUComputing Module (CUDA)” 部分,可以查看 GPU 的总显存(硬件层面),以及扣除操作系统保留部分后的剩余显存。

(参见此文档了解如何找到 Redshift 日志文件:
https://support.maxon.net/hc/en-us/articles/16868674965788-Step-by-Step-Finding-Your-Redshift-Log-File

在下面的示例中,GPU 的总显存为 8181MB,扣除操作系统保留后,剩余 7171MB。

该机器配备了两块 GPU,因此可以看到 GPU 1(红色字母 A 标记)和 GPU 2(红色字母 B 标记)的对应信息。

 

 


Level 2 - 剩余显存 

(扣除软件、显示器占用后的数值)

即在扣除当前 3D 应用程序、其他应用程序、显示器等所占显存后的剩余部分。

 

在 “Rendering blocks …” 部分可以看到进一步的显存信息。
在这 7171MB 的显存中,Redshift 实际无法使用全部容量。部分显存会被 3D 应用程序、显示器等占用。CUDA(GPU 驱动)会告知 Redshift 实际可用的显存数值。

日志文件中总会包含一条 “Redshift can use up to …” 的记录。

在下面的示例中,渲染引擎使用了两块 GPU:GTX 1070 和 GTX 1050 Ti。

  • 第一块 GPU 最多可用 6056 MB 显存

  • 第二块 GPU 最多可用 2283 MB 显存

这些数值是驱动报告的可用显存,已经扣除了应用程序和显示器等占用部分。

 
 

 

因此,根据上述日志,我们知道 Redshift 在第一块 GPU 上最多可用 6056 MB 显存,在第二块 GPU 上最多可用 2283 MB 显存。

 

Level 3 - Redshift 保留/使用的显存

(默认占用可用显存的 90%)

 

在这些可用显存中,Redshift 默认会保留最多 90% 用于实际渲染,剩余部分留给系统使用。在上图示例中,第一块 GPU 余下 695 MB,第二块 GPU 余下 317 MB。这些数值是在 Redshift 按 CUDA 报告的可用显存占用 90% 后,留给系统的剩余部分。

默认内存占用比例为 90%,但可以在渲染设置中进行修改。

如果遇到显存相关问题,建议将该比例从默认的 90% 调低,例如设为 70%。下图展示了修改此设置的位置。

 

 

Out of Core(超显存渲染)

 

有时渲染任务需要的显存超过了 Redshift 可用的显存。在这种情况下,渲染会进入 Out of Core(超显存渲染)模式,此时 Redshift 会使用系统 RAM 作为补充继续渲染。虽然渲染仍能完成,但速度会降低。

在日志文件的 “statistics” 部分始终会显示 GPU 内存信息:
在以下示例中,如果 A 大于 B,则说明渲染任务已进入 Out of Core 模式。

 

 

下例 1:未进入 Out of Core

 

 

下例 2:进入 Out of Core(日志中 A > B)

 

 

总结: 当显存不足时,Redshift 会将数据交换至系统 RAM,以较慢的速度继续渲染,这称为 Out of Core(OoC)。但某些数据无法进入 OoC,例如体积 VDB。在这种情况下,日志中会显示显存不足的错误信息。

提示: 如果由于贴图导致进入 OoC,可考虑使用 4K 贴图替代 16K 贴图。尤其在使用 UDIM 时,贴图数量可能迅速累积。

对象一旦经过细分(tessellation)便会保留在缓存中,除非是基于屏幕的动态细分,此时会在每帧重新计算。您可以在渲染视图中冻结细分缓存,但最终渲染阶段不支持此操作。

此外,将 8bit 贴图保存为 32bit 并不会提升画质,因此不建议这样做。

请尽量使用实例(instances)。即使使用代理(proxies),复制的代理对象仍会占用与原代理相同的显存,而实例化的代理几乎不占显存。


VRAM 错误

有时您可能会遇到以下显存错误:

  • Redshift cannot operate with less than 256MB of free VRAM. Frame rendering aborted.

  • There is less than 128MB of free VRAM once fixed data and minimal ray memory are considered.

虽然 Redshift 支持 Out of Core 渲染,但仍需要最低限度的可用显存才能运行。上述信息表示 Redshift 未能找到所需的最小显存,因此渲染被中止。

这些显存不足的报错大多出现在显存容量有限的 GPU 上。

如前所述,部分数据无法进入 OoC,例如 VDB 体积数据、Irradiance Cache(IC)和 Irradiance 点云数据。当显存不足时,Redshift 会直接报错。

不过,对于 Irradiance Cache 和 Irradiance 点云数据,可以在渲染设置的内存部分强制 Redshift 预留更多显存。

 
 

如果您有两块相同型号的 GPU,可以通过 NVLink 将可用显存容量合并,从而实现加倍。

 

 

 

 
 
 

延伸阅读

有关显存不足的更多信息,请参阅以下链接:

https://help.maxon.net/r3d/cinema/en-us/#html/Dealing+with+Out-Of-VRAM+situations.html#DealingwithOutOfVRAMsituations-SLI

 

 

这篇文章有帮助吗?

/

评论

0 条评论

登录写评论。