亚马逊AWS官方博客

利用 AWS Deadline 提升渲染效率

内容制作过程中渲染环节现有困境

内容制作人士通常会有这样的一些抱怨:“这个短片已经开始渲染,这N天的工作就可以暂停,没办法,只有等待渲染完成再继续下一步工作”。通常一个短片的制作会包含多次的制作-渲染-调整再渲染的工作周期,在整个周期中,渲染会占用大部分制作时间,且这段时间内制作人员通常处理空闲等待状态,严重影响生产效率。

以由软件为基础的视频制作流程如下:

图一

根据业内人士的反馈,虽然渲染只是内容制作过程中的一个环节,但渲染时间通常会占到整个内容制作时间的一半,以一个制作周期为2个月的广告为例,其中几乎一个月的时间都在进行渲染工作。

当前主流的内容制作包括电视,电视,广告,宣传片都向着4K以及8K演进(日本已经开始进入到8K时代),渲染所占用的时间在整个内容制作过程中比重将会进一步加大。

以现今主流的4K短片在本地10台20核服务器集群渲染上为例,一份3分钟每秒50帧的短片,一共9000帧,一帧的渲染时间为11分钟,则整个短片的渲染时长为一周左右的时间,在这一周的时间内内容制作人员基本处于等待状态,并且这只是单次渲染时间,一个完整的视频制作会经过反复的修改再渲染,会有更多的人员等待时间。

另外,以拍摄为基础的视频制作流程如下,渲染也只众多环节中的一环,但也要占用制作周期中的大量时间。

图二

 

解决办法

渲染也属于HPC应用中的一种,同样可以使用增加并行节点来提供整体效率,且各渲染任务之间不存在关联性,整体的渲染效率随着渲染节点的增多而线性增加,非常适合使用大量节点并发渲染。将1(并发task)x1000(小时)转化为1000(并发任务)*1(小时),在保持成本不增加的情况下,大大缩减渲染时间。

AWS云平台提供丰富的计算资源,并且提供了Deadline渲染调度软件来负责渲染任务的提交、渲染任务的管理、渲染节点的调度、渲染结果的管理。Deadline与AWS有着良好的集成,可以通过Deadline直接调用AWS云平台计算实例开启渲染工作。

同时,Deadline支持与多达80多种内容制作软件的集成,可以按需在AWS云平台上使用Deadline构建成自己的渲染农场。针对本地环境已经渲染硬件资源的情况,Deadline也可以统一调度,构建基于本地,延伸到云的混合架构渲染农场,保证本地现有投资的同时,利用云的弹性提升渲染效率。

 

使用Deadline构建渲染集群

本文使用的Deadline架构如下所示,所有组件全部基于云端。

图三

用户直接与内容制作软件如3dsmax进行交互,在制作完成渲染文件后,利用Deadline对多达80多种渲染软件的直接集成能力,在渲染软件中直接提交任务,任务提交脚本自动将渲染文件和关联的资产文件提交到文件服务器供渲染节点渲染使用,同时生成一个Job提交到Deadline任务分发服务器。渲染节点主动发现有待渲染的Job时,会自动向任务分发服务器申请task,执行一帧或者连续多帧的渲染任务,并从文件服务器获取渲染文件及相关资产文件开始真正的渲染任务,当渲染完成后,将结果文件统一保存到文件服务器中指定位置供用户使用。

本文将聚焦于渲染节点制作部分,阐述如何利用AWS的AMI构建自定义的渲染节点AMI用于批量生成渲染节点,并对Deadline使用中的一些问题给出建议。Deadline本身的部署可以参考另一篇文章:<< Deadline 使用 SPOT Event Plugin 开启低成本渲染农场>>

本文包含两种类型的渲染节点制作,第一种是使用CPU 的3dsmax渲染节点制作,第二种是使用GPU的Maya渲染节点制作,使用的硬件及软件资源如下所示:

  • 渲染硬件:CPU,渲染软件:3dsmax,渲染插件:V-ray。
  • 渲染硬件:GPU,渲染软件:Maya,渲染插件:Redshift。

 

渲染节点AMI制作

渲染节点的硬件制作遵循AWS AMI的标准制作流程,再针对渲染节点的需要进行一些必要的设置。

3dsmax+V-ray渲染节点AMI制作:

基础镜像选择

用户可以选择上传自己已有的桌面版Windows系统镜像,也可以使用AWS平台已有的服务器版AMI如2016版的AMI。

实例类型选择

3dsmax+V-ray的使用CPU执行渲染任务,不依赖GPU资源,而且渲染过程中主要使用CPU,对内存的需求不大,所以选择C系列如最新一代基于Nitro的C5系统即可提供高性价比的渲染实例。后启动实例制作基础镜像。

安装渲染软件及渲染插件

3dsmax软件的安装按照其标准流程,安装即可。Deadline调用的是3dsmax的命令行模式执行渲染任务,此任务下不需要License。

然后按照标准方式安装V-ray渲染插件,和3dsmax安装一样,直接选择默认安装选项即可。V-ray的正常运行需要有合格的License。

另外推荐安装multiscatter-for-3dsmax插件,此插件包括充分利用多核VPU的功能大大加速渲染效率。

安装Deadline渲染节点代理软件

Deadline通过安装在每个渲染节点上的Deadline Slave软件控制渲染节点上渲染任务的执行,所以需要在渲染节点上安装Deadline Client软件包,安装此软件会安装Deadline Slave,当渲染节点上的Slave启动后会注册到渲染集群的任务分发服务器,后续从任务分发服务器上获取任务执行渲染工作。

定制化AMI镜像

此步骤为制作渲染节点重要的一步,包括以下几个方面的内容

  1. 开机自动挂载文件服务器到本渲染节点

在安装Deadline Slave的时候,会指向共享文件服务器共享路径,在Slave启动的时候,从共享路径中加载任务服务器的地址,从而注册到任务服务器。挂载共享路径是渲染启动后第一件需要做的事,这是Slave能成功注册的关键。通过启动时执行的定时任务执行共享路径的自动挂载,

  • 选择不管用户是否登录都要运行。确保只要启动系统后即完成共享路径的挂载,如图四。
  • 触发器选择在每次系统启动时执行,确保渲染节点重启后仍然能自动挂载共享路径。
  • 操作项中的程序或者脚本值设置为powershell的执行路径:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

添加脚本运行的参数项值为:

-Command net use \\$samba-server-ip\DeadlineRepository10 /user:$deadlineuser” $password

其中$samba-server-ip为共享文件服务器的私有IP,$deadlineuser为samba共享目录挂载的用户名,$password为samba目录挂载的用户密码,需要替换成相应的值。

图四:建立每次启动时执行的计划任务:挂载共享文件路径

图五:建立第一次启动时执行的计划任务:重启

  1. 每个渲染节点使用自己的主机名在任务分发服务器中标识自己才能被Deadline识别,否则渲染节点将不能被识别而参与渲染任务,所以每个渲染节点都必须有自己的名字,如Slaves中的Slave Name名字列。

图六:渲染节点以自身的十六进制IP地址唯一标识自己

Windows系统可以利用Ec2LaunchSettings将主机名更改为IP-XXXXXX格式,XXXXXX是主机私有IP的十六进行表示,从而让每个节点都有唯一的主机名。但在利用生成的AMI镜像第一次启动一个新实例后,其主机名仍为制作模板主机的主机名,需要重新启动以更新其主机名。这需要再添加一个定时任务让其在第一次启动时自动且仅重启一次。

  • 创建一个在启动时即执行的计划任务,由于没有只在第一次启动时执行的选项,所以需要在具体的执行脚本中添加条件让计划任务只执行一次。
  • 操作项中的程序或者脚本设置为powershell的执行路径
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

添加脚本运行的参数项值为

-NoProfile -NonInteractive -NoLogo -ExecutionPolicy Unrestricted -File "C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\Restart-Computer.ps1

其中Restart-Computer.ps1为自定义脚本,脚本内容如下

 

if(!( Test-Path C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\renamed.txt))
{
echo "Already restarted after rename-computer" > C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\renamed.txt
Restart-Computer -Force
#write $computername
}

该脚本通过文件renamed.txt标识实例是否已经执行过自动重启,确保在后续启动后不再自动重启。

  1. 可选:配置windows系统为自动登录,从此处下载自动登录设置软件。
  2. 使用Ec2LaunchSettings工具设置AMI模板
  • 选择Set Compute Name ,主机名将在重启后设置为IP-XXXXXX(十六进制IP)的格式,以唯一标识实例自身。
  • 选择Set Wallpaper,桌面背景将添加上实例的元数据信息。
  • 密码设置处选择Specify,指定自定义的密码,方便在需要时登录进渲染节点。
  • 选择Shutdown without Sysprep,实例将在不清除用户数据的情况下自动关机
  • 在关机状态下选中实例,从实例制作最终的AMI镜像。

 

Maya+Redshift镜像制作:

Maya+Redhsift的AMI镜像制作流程与3dmax的AMI制作流程相同,本节只列出与3dmax制作流程不同的点。

实例类型选择

由于Redshift是新一代基于GPU的渲染,所以渲染节点需要选择带GPU类型的实例。在AWS平台上有G和P两类带GPU的实例。从AWS官网可以看出两个系列的不同应用场景:

  • P3系列应用场景:

  • G3系列应用场景:

实际上P3系列上搭载的是Nvidia Tesla V100 GPU,主要用于科学计算场景,G3系列搭载的是Nvidia Tesla M60 GPU,主要用于图形处理相关场景,所以选择G3系列实例。

安装渲染软件及渲染插件

按照正常的Maya和Redshift的安装方法进行安装。

注意事项:

  1. 显卡驱动的安装使用Nvidia官方最新的驱动,可以识别出多显卡G3实例的多个显卡用于渲染。不推荐使用AWS官方针对G3实例的驱动,使用此驱动后多块显卡只能被识别为一块,而且普通的显示任务也会用到此显卡的资源导致任务争抢,导致显卡的利用率不超过80%。
  2. GPU渲染只工作在非服务模式下,因为windows希望GPU卡只是一个图形设备,不允许后台服务访问。所以如果在Maya和Softimage中使用redshift渲染,不能将deadline salave 安装为service,而是安装为一个用户程序。
  3. 默认配置下,由于在远程桌面中不支持OpenGL在远程桌面中无法打开Maya,参见此处设置修改Maya配置,

 

利用制作的渲染AMI进行渲染

启动新的渲染节点

制作完渲染节点AMI后,就可以利用AMI启动新的实例注册成渲染节点,开启渲染工作。

可以在AWS控制台中启动按需实例和Spot实例,也可以利用Deadline Spot Event插件自动从Deadline启动新的渲染实例,如果利用Deadline Spot Event插件自动启动新实例请参见<<Deadline 使用 SPOT Event Plugin 开启低成本渲染农场>>。启动后的实例以唯一标识自动注册到Deadline中,可以在Deadline Monitor中查看到。

提交任务到渲染集群

在使用3dsmax完成渲染文件制作后,在3dsmax的Rendering项中设置好渲染选项,设置的选项将被提交到Deadline渲染集群的渲染节点,按照设置参数进行渲染。

向Deadline集群提交任务有两种途径:

  1. 第一种是在渲染客户端中通过Deadline Monitor提交渲染任务,在设置好渲染参数后,通过归档的方式将渲染文件及相关的资产文件保存为本地的一个压缩包文件,然后使用Deadline Monitor提交。

  1. 也可以在客户端的3dsmax软件中安装Deadline提交插件直接从3dsmax提交任务,推荐使用此种方式,因为可以进行更多的配置选择。(如何在制作软件中安装插件请参考https://docs.thinkboxsoftware.com/products/deadline/10.0/1_User%20Manual/manual/app-blender.html#integrated-submission-script-setup)

安装插件过后,重启启动3dsmax软件,会多出一项Deadline菜单栏。在3dsmax中打开渲染文件后,点击Deadline菜单项准备任务提交

注意:在Render栏的Render中要设置输出文件目标目录为共享服务器目录,渲染完成后会自动将结果文件拷贝到共享路径中,方便用户从统一位置下载。

点击SUBMIT进行完整性检查,通过后会在Deadline中生成Job,开启渲染工作,如下

  • 在Job中列举出当前的所有Job。
  • 在Tasks中列出当前Job分解成的多个task并行渲染进度。
  • 在Slaves中列举出各个渲染节点的当前状态,是否是空闲还是参与某个渲染任务。

 

针对每一个渲染完成的task,可以直接查看其结果文件

 

Deadline使用过程中的Troubleshooting一些注意事项

查看渲染节点的运行信息

当某个渲染节点不能正常工作时,可以查看每个节点的运行日志,查找错误原因。在选择的Slave上右键选择Connect to Slave Log… .

登录进渲染节点实时查看渲染过程

当第个任务的渲染时间过长时,可以登录进渲染节点实时查看渲染进度,判断渲染是否正常进行,如果渲染效果不符合预期,可以提前结束渲染Job,待调整后重新渲染。

Deadline会自动解析实例的IP,调用RDP工具进行远程连接,输入定制AMI使用的用户名和密码就可以登录进渲染节点查看渲染过程,

渲染结果缺少相应的效果

如果渲染的结果文件缺少相应的效果,如缺少相应的贴图,则要保证所有的资产文件都被提交,在提交Job时确保资产提交选项为“Copy ALL External File References to Repository”:

如果渲染节点的日志中在”Updating Instance”处花费固定较长的时间

也是因为资产文件缺少,在资产文件加载时间超时后才会进入到下一步,解决办法同上。

禁用重新加载插件

如果在每次执行新的渲染任务时,都重新加载渲染插件,则每个任务都会有固定的启动,表现为每个task的“Startup Time”不为0,建议禁用此选项,以提升渲染任务有效率。除非有因为缓存原因导致渲染结果不正常的情况发生。

渲染文件的资产文件路径替换

当渲染文件是在其他环境中制作时,渲染文件中保存的资产文件路径为当地的文件路径,从其他环境将渲染文档归档后拷贝到Deadline客户端再提交时,资产文件的路径就变得不正确,此时可以使用Deadline的路径替换功能,将符合指定规则的路径替换为目标路径,如存在于公共文件服务器的资产文件路径,此时Deadline客户端得以正常提交渲染Job。

节点同一时间只执行一个渲染任务

Deadline可以让渲染同时执行多个渲染任务,但推荐一个渲染节点只并行执行一个渲染任务,当并行执行多个渲染任务时,由于渲染软件的原因,有些渲染任务会失败。

将Mongodb做成系统服务

分发服务器上的Mongodb并没有设置成自动启动,如果分发服务器发生重启,Mongodb服务将不会运行,整个渲染工作将无法开展。建议将Mongodb做成系统服务,以便在系统启动时自动启动,请参考:https://docs.thinkboxsoftware.com/products/deadline/10.0/1_User%20Manual/manual/install-db-repo-manual-db-install.html#create-windows-service-windows

 

Deadline渲染效果提升

如下,是对同一4K渲染文件和8K渲染文件在本地环境和AWS云中Deadline环境中进行的渲染效率对比。本地环境中已经达到最大的资源使用,而云环境中,可以利用Deadline调度任意多的计算资源并行参与渲染,从而大大缩短渲染所需要时间。

600帧基于CPU的4K文件渲染对比

2400帧基于CPU的8K渲染文件渲染对比

106帧基于GPU的2K渲染文件渲染对比

 

进一步阅读

Deadline不仅可以利用云中的计算独立开展渲染服务,同时也可以将本地渲染资源进行整合,不浪费本地资源,让本地和云上协作共同完成渲染任务。可以使用本地环境渲染非紧急任务,云中环境高效率渲染紧急任务。

本地云中协同渲染

 

如何实现本地与云中协同渲染请参考:https://docs.thinkboxsoftware.com/products/deadline/10.0/1_User%20Manual/manual/aws-portal-setup-overview.html

Deadline参考文档:https://docs.thinkboxsoftware.com/products/deadline/10.0/1_User%20Manual/index.html

 

本篇作者

岳亮

AWS中国区解决方案架构师,致力于为客户提供基于AWS云平台的解决方案,同时对私有云及开源也有所涉及,期望与同行互相交流。