构建混合渲染农场

Last reviewed 2024-01-09 UTC

本文档介绍了如何扩展现有的本地渲染农场以使用 Google Cloud 上的计算资源。本文档假设您已经在本地实现了渲染农场,并且熟悉视觉效果 (VFX) 和动画流水线、队列管理软件以及通用软件许可方法的基本概念。

概览

为动画、电影、商业广告或视频游戏渲染 2D 或 3D 元素既耗费计算资源又耗费时间。渲染这些元素需要投资大量硬件和基础架构,而且需要专业的 IT 团队来部署和维护硬件及软件。

当本地渲染农场的利用率达到 100% 时,管理作业可能会成为一项挑战。任务优先级和依赖项、重新启动的丢弃帧以及网络、磁盘和 CPU 负载都会形成复杂局面,而在期限紧张的情况下,您通常都必须对这种复杂局面进行密切监控和控制。

为便于管理这些作业,VFX 服务提供商已将队列管理软件纳入其流水线。队列管理软件可以执行以下操作:

  • 将作业部署到本地资源和云端资源。
  • 管理作业间的依赖项。
  • 与素材资源管理系统通信。
  • 为用户提供适用于一些常用语言(例如 Python)的界面和 API。

虽然某些队列管理软件可以将作业部署到云端工作器上,但您仍然需要负责连接到云端、同步素材资源、选择存储框架、管理映像模板以及提供自用的软件许可。

以下选项可用于在云或混合云环境中构建和管理渲染流水线和工作流:

  • 如果您还没有本地或云资源,则可以使用软件即服务 (SaaS) 云端渲染服务,例如 Conductor
  • 如果您要管理自己的基础设施,则可以构建和部署本文档中所述的云资源。
  • 如果您要根据特定要求构建自定义工作流,您可以与 Google Cloud 服务集成商合作伙伴合作,例如 GunpowderAppsBroker。此选项的优势在于您可以在自己的安全 Google Cloud 环境中运行所有云服务。

如需确定适合您的设施的理想解决方案,请与您的 Google Cloud 代表联系。

注意:本文档中会不时提供生产说明。这些说明提供了构建渲染农场时需要遵循的最佳做法。

连接到云端

根据您的工作负载,决定您的设施是通过合作伙伴 ISP、直接连接还是公共互联网连接到 Google Cloud。

通过互联网连接

您无需使用任何特殊连接即可通过互联网访问 Google Cloud 服务,从而连接到 Google 的网络并使用 Google 的端到端安全模型。许多实用程序(例如 gcloudgsutil 命令行工具)以及资源(例如 Compute Engine API)都使用安全身份验证、授权和加密等手段来保护您的数据。

Cloud VPN

无论采用哪种连接方式,我们都建议您使用虚拟专用网络 (VPN) 来保护您的连接。

Cloud VPN 可帮助您通过 IPsec VPN 连接将本地网络安全地连接到 Google Virtual Private Cloud (VPC) 网络。数据在通过一个或多个 VPN 隧道传输之前会被加密。

了解如何为项目创建 VPN

客户提供的 VPN

虽然您可以设置自己的 VPN 网关直接与 Google 建立连接,但我们建议您使用 Cloud VPN,因为它更加灵活且与 Google Cloud 的集成度更高。

Cloud Interconnect

Google 支持以多种方式将您的基础架构连接到 Google Cloud。这些企业级连接(统称为 Cloud Interconnect)提供比标准互联网连接更高的可用性、更短的延迟时间,以及实惠的出站流量价格。

Cross-Cloud Interconnect 可让您为其他云中的数据建立与 Google Cloud 的高带宽专用连接。这样做可以降低网络复杂性、减少数据传输费用,并启用高吞吐量、多云渲染农场。

专用互连

专用互连可在您的本地网络和 Google 网络之间提供直接物理连接和 RFC 1918 通信。专用互连通过以下类型的连接提供连接容量:

  • 一个或多个 10 Gbps 以太网连接,每个互连最多可提供 8 个连接(即 80 Gbps)。
  • 一个或多个 100 Gbps 以太网连接,每个互连最多可提供 2 个连接(即 200 Gbps)。

专用互连流量是不加密的。如果需要以安全方式跨专用互连传输数据,您必须建立自己的 VPN 连接。Cloud VPN 与专用互连不兼容,因此在这种情况下您必须自行搭建 VPN。

合作伙伴互连

合作伙伴互连即由支持的服务提供商提供在本地网络与 VPC 网络之间的连接。如果您的基础设施的物理位置无法访问专用互连对接网点,或者您的数据不需要用尽 10 Gbps 的连接,则您可以选择合作伙伴互连方式。

其他连接类型

您所处的位置可能提供其他连接到 Google 的方式。如需获得相关帮助以确定连接到 Google Cloud 的最佳且最具成本效益的方式,请与您的 Google Cloud 代表联系。

保护您的内容

为了在任何公共云平台上运行内容所有者的内容,诸如主流好莱坞工作室这样的内容所有者会要求供应商遵守内部和组织(如 MPAA)定义的安全最佳做法。 Google Cloud 提供零信任安全模型,内置于 Google Workspace、Chrome Enterprise 进阶版和 BeyondProd 等产品中。

每个工作室对于保护渲染工作负载的安全有不同的要求。此外,您可以访问 cloud.google.com/security 以查阅安全白皮书和合规性文档

如果您对安全合规性审核流程有疑问,请与您的 Google Cloud 代表联系。

组织您的项目

项目是 Google Cloud 的核心组成部分。在您的设施中,您可以在作业自身所属的项目中组织作业,也可以将作业分散到多个项目中。例如,您可能希望为电影的预可视化、研究和开发以及制作阶段创建单独的项目。

项目可以为网络数据和项目管理建立隔离边界。但是,您可以使用共享 VPC 在项目之间共享网络,从而为单独的项目提供访问公共资源的权限。

生产说明:创建一个包含您的所有生产工具资源的共享 VPC 主机项目。您可以将在组织下创建的所有项目指定为共享 VPC 服务项目。此指定意味着组织中的任何项目都可以访问主机项目提供的相同库、脚本和软件。

组织资源

您可以在已经建立的组织资源下管理项目,这是因为将所有项目迁移到一个组织中可带来许多优势

生产说明:将生产经理指定为其各自的项目的所有者,以及将工作室经理指定为组织资源的所有者。

定义对资源的访问权限

项目需要安全访问资源,并限制允许用户或服务运营的位置。为了帮助您定义访问权限,Google Cloud 提供了 Identity and Access Management (IAM),您可以使用 IAM 定义哪些角色对哪些资源拥有什么级别的访问权限,以此来管理访问权限控制。

生产说明:如需限制用户只能访问执行特定任务(基于其角色)所必需的资源,请在本地和云端实施最小权限原则

例如,请考虑使用一个渲染工作器,它是一个虚拟机,您可以通过使用自定义映像的预定义实例模板对这个渲染工作器进行部署。这个在服务账号下运行的渲染工作器可以从 Cloud Storage 中读取数据并将数据写入附加存储(例如云文件管理器或 Persistent Disk)。但是,您根本不需要将各个艺术家添加到 Google Cloud 项目,因为他们不需要直接访问云资源。

您可以分配角色以渲染有权访问所有 Compute Engine 资源的人员或项目管理员,从而允许他们在其他用户无法访问的资源上履行职能。

制定一个政策以确定哪些角色可以访问组织中的哪些类型的资源。下表显示了典型的生产任务如何映射到 Google Cloud 中的 IAM 角色。

生产任务 角色名称 资源类型
工作室管理员 resourcemanager.organizationAdmin 组织
项目
生产管理员 ownereditor 项目
渲染人员 compute.adminiam.serviceAccountActor 项目
队列管理账号 compute.adminiam.serviceAccountActor 组织
项目
个人艺术家 [无访问权限] 不适用

访问权限范围

借助访问权限范围,无论谁登录,您都可以控制正在运行的实例的权限。您可以在自己创建实例时或在队列管理软件用实例模板部署资源时指定访问权限范围。

访问权限范围的优先级高于单个用户或服务账号的 IAM 权限。此优先级意味着访问权限范围可以阻止项目管理员登录到实例以删除存储桶或更改防火墙设置。

生产说明:默认情况下,实例可以读取 Cloud Storage 的数据,但不能将数据写入 Cloud Storage。如果渲染流水线将完成的渲染写回 Cloud Storage,请在创建时将范围 devstorage.read_write 添加到您的实例。

选择如何部署资源

通过云渲染,您可以仅在需要时使用资源,但您可以用多种方式使资源可用于渲染农场。

按需部署

为了达到最佳的资源使用率,您可以选择仅在将作业发送到渲染农场时部署渲染工作器。您可以部署多个虚拟机以在作业中的所有帧之间共享,甚至可以为每个帧创建一个虚拟机。

您的队列管理系统可以监控正在运行的实例,如果虚拟机被抢占,则可以在其完成单个任务后将其重新排队。

部署资源池

此外,您还可以选择部署您的本地队列管理系统可以当作其他资源进行访问、且与任何特定作业无关的一组实例。如果您使用 Google Cloud 的 Spot 虚拟机,则一组正在运行的实例可以使用所有核心并最大限度地提高资源用量来接受每个虚拟机的多个作业。这种方法可能是最直接的实施策略,因为它模仿了本地渲染农场如何填充作业。

许可软件

不同软件包的第三方软件许可差异很大。以下是您在 VFX 流水线中可能遇到的一些许可方案和模式。第三列显示了针对每个方案建议的许可方法。

方案 说明 建议
节点锁定 获得使用特定 MAC 地址、IP 地址或 CPU ID 的许可。只能由一个进程运行。 基于实例
基于节点 已获得特定节点(实例)的许可。任意数量的用户或进程可以在许可的节点上运行。 基于实例
浮动 从跟踪使用率的许可服务器中签出。 许可服务器
软件许可
交互式 允许用户在基于图形的环境中以交互的方式运行软件。 许可服务器基于实例
批量 允许用户仅在命令行环境中运行软件。 许可服务器
云端许可
基于使用率 仅当进程在云端实例上运行时签出。当该进程完成或终止时,许可将被释放。 云端许可服务器
基于正常运行时间 实例处于活动状态且正在运行时已签出。停止或删除实例时,许可会被释放。 云端许可服务器

使用基于实例的许可

某些软件程序或插件可以直接许可给运行它们的硬件。这种许可方法可能会在云端中出现问题,因为硬件标识符(如 MAC 或 IP 地址)是动态分配的。

MAC 地址

创建实例时,只要实例不被删除,就会为实例分配一个保留的 MAC 地址。您可以停止或重新启动实例,但其 MAC 地址会被保留。您可以使用此 MAC 地址创建和验证许可,直到删除实例。

分配静态 IP 地址

创建实例时,实例会获得一个内部 IP 地址,还有可能获得一个外部 IP 地址。要保留实例的外部 IP 地址,您可以预留静态 IP 地址并将其分配给您的实例。此 IP 地址将被预留,仅供此实例使用。由于静态 IP 地址是基于项目的资源,因此它们受地区配额的限制。

此外,您还可以在创建实例时分配内部 IP 地址,这种方法可以将一组实例的内部 IP 地址配置在同一网段内。

硬件加密狗

对于有些较旧版本的软件,您可能仍需通过加密狗(即使用产品许可编程的一种硬件密钥)获得许可。大多数软件公司已停止使用硬件加密狗,但某些用户的旧版软件可能还使用这类硬件中的某一种实施密钥。如果遇到此问题,请与软件制造商联系,了解他们是否可以为您提供特定软件的更新许可。

如果软件制造商无法提供此类许可,您可以使用网络连接的 USB 集线器或实施 USB over IP 解决方案。

使用许可服务器

大多数现代软件都会提供浮动许可方案。这种方案最适合云端环境,但它需要更强的许可管理和访问权限控制,以防止过度消耗有限数量的许可。

为了避免超出许可容量,您可以在作业队列过程中选择要使用的许可,并控制使用许可的作业数量。

本地许可服务器

您可以使用现有的本地许可服务器为在云端运行的实例提供许可。如果选择这种方法,则必须为渲染工作器提供一种通过 VPN 或其他安全连接与本地网络进行通信的方式。

云端许可服务器

在云端,您可以使用共享 VPC 运行许可服务器。该服务器为项目中的实例,甚至是跨项目的实例提供服务。浮动许可有时会关联到硬件 MAC 地址,因此具有静态 IP 地址的小型、长时间运行的实例可以轻松地为许多渲染实例提供许可。

混合许可服务器

某些软件可以按优先顺序使用多台许可服务器。例如,渲染器可能会查询可从本地服务器获得的许可数量,如果发现没有可用的许可,则它会使用云端许可服务器。在您签出其他类型的许可之前,此策略可以帮助您最大限度地使用永久许可。

生产说明:在环境变量中定义一台或多台许可服务器并定义优先级顺序。例如,您可以使用 Autodesk Arnold 这款热门的渲染器来实现这一目标。如果作业无法使用第一台服务器获取许可,则其将尝试使用列出的任何其他服务器获得许可,如以下示例所示:

export solidangle_LICENSE=5053@x.x.0.1;5053@x.x.0.2

在前面的示例中,Arnold 渲染器尝试从 IP 地址为 x.x.0.1、端口为 5053 的服务器获取许可。如果该尝试失败,则它会尝试从 IP 地址为 x.x.0.2 的同一端口获取许可。

云端许可

一些供应商提供云端许可,可根据您的实例按需提供软件许可。云端许可通常以两种方式计费,包括基于使用率和基于正常运行时间。

基于使用率的许可

基于使用率的许可根据软件的使用时间进行计费。如果使用此类许可,通常会在流程启动时从云端服务器签出许可,并在流程完成时释放许可。只要签出许可,就需要支付使用该许可的费用。此类许可通常用于渲染软件。

基于正常运行时间的许可

基于正常运行时间或计量供给的许可是根据 Compute Engine 实例的正常运行时间计费的。实例配置为在启动过程中向云端许可服务器注册。只要实例正在运行,就会签出许可。 停止或删除实例时,许可会被释放。此类许可通常用于队列管理器部署的渲染工作器。

选择存储数据的方式

您在 Google Cloud 上选择的存储类型取决于您所选择的存储策略以及耐用性要求和费用等因素。

Persistent Disk

您可以通过将永久性磁盘 (PD) 合并到工作负载中来完全避免实现文件服务器。PD 是一种符合 POSIX 标准的块存储,大小高达 64 TB,是大多数 VFX 服务提供商都很熟悉的存储。Persistent Disk 既可以是标准硬盘,也可以是固态硬盘 (SSD)。您可以将读写模式的 PD 挂接到单个实例,或者以只读模式挂接到大量实例,例如一组渲染工作器。

优点 缺点 理想的使用场景
作为标准 NFS 或 SMB 卷装载。

可以动态调整大小。

一个实例最多可以挂接 128 个 Persistent Disk。

可以在数百或数千个实例上以只读方式装载相同的 Persistent Disk。
最大大小为 64 TB。

只有在挂接到单个实例时才能写入 Persistent Disk。

只能由位于同一地区的资源进行访问。
可以基于每个作业构建新磁盘的高级流水线。

提供不经常更新的数据(例如软件或常用库)的流水线,用于渲染工作器。

对象存储

Cloud Storage 是高度冗余、高度耐用的存储。与传统文件系统不同,它是非结构化的,且实际上不受容量限制。Cloud Storage 上的文件存储在存储分区中,这些分区类似于文件夹,可在全球范围内访问。

与传统存储不同,对象存储不能由操作系统 (OS) 作为逻辑卷装载。如果您决定将对象存储服务整合到渲染流水线中,则必须通过命令行实用程序(如 gsutil)或通过 Cloud Storage API 修改数据的读写方式。

优点 缺点 理想的使用场景
适用于各种规模文件的耐用的、高可用的存储。

所有存储类别采用统一的 API。

便宜。

数据在全球范围内可用。

几乎无限的容量。
不符合 POSIX 标准。

必须通过 API 或命令行实用程序进行访问。

在渲染流水线中,数据必须在使用前在本地转移。
使用可将数据发布到 Cloud Storage 的素材资源管理系统的渲染流水线。

使用队列管理系统的渲染流水线可在渲染之前从 Cloud Storage 中获取数据。

其他存储产品

其他存储产品包括托管服务,可通过第三方渠道(如 Cloud Marketplace)或通过软件代码库或 GitHub 作为开源项目获得。

产品 优点 缺点 理想的使用场景
Filestore 可以支持数千个并发 NFS 连接的集群文件系统。

能够与本地的 NAS 集群同步。
无法有选择地同步文件。 没有双向同步。 在云端有数百 TB 数据的大中型 VFX 服务提供商。
Pixit MediaPixStor 横向扩缩文件系统,可以支持数千个同时连接的 NFS 或 POSIX 客户端。可以根据需要在本地 NAS 缓存数据,并将更新自动发送回本地存储。 来自 Pixit 的第三方支持费用。 在云端有数百 TB 数据的大中型 VFX 服务提供商。
Google Cloud NetApp Volumes Google Cloud 上的全代管式存储解决方案。

支持 NFS、SMB 和多协议环境。

使用实例恢复功能的时间点快照
并非所有 Google Cloud 区域都提供。 具有能够进行资产同步的流水线的 VFX 服务提供商。

跨虚拟工作站的共享磁盘。
Cloud Storage FUSE 将 Cloud Storage 存储分区作为文件系统装载。费用低。 不符合 POSIX 的文件系统。可能难以配置和优化。 能够部署、配置和维护开源文件系统的 VFX 服务提供商,具有能够进行素材资源同步的流水线。

Google Cloud 还提供其他存储类型。如需了解详情,请与您的 Google Cloud 代表联系。

关于数据存储选项的更多文档

实施存储策略

您可以在 VFX 或动画生产流水线中实施多种存储策略,方法是建立确定如何处理数据的惯例,例如是直接从本地存储访问数据,还是在本地存储与云端之间同步数据。

策略 1:直接装载本地存储

直接在云端渲染工作器上装载本地存储
直接在云端渲染工作器上装载本地存储

如果您的服务提供商与 Google Cloud 的连接速度至少为 10 Gbps 并且非常靠近 Google Cloud 地区,则可以选择直接在云渲染工作器上装载本地 NAS。虽然很简单,但它也属于费用和带宽密集型的策略,因为您在云端创建并写回存储的任何内容都被视为出站流量数据。

优点 缺点 理想的使用场景
实施简单。

对常用存储执行读写操作。

即时可用的数据,无需缓存或同步。
可能比其他选项更昂贵。

需要靠近 Google 数据中心才能实现短延迟时间。

可以连接到本地 NAS 的最大实例数取决于您的带宽和连接类型。
处于 Google 数据中心附近,需要在短时间内将工作负载渲染到云端,并且可承担高额费用的服务供应商。

与 Google Cloud 连接速度至少为 10 Gbps 的服务提供商。

策略 2:按需同步

根据需要在本地存储系统和云存储服务之间同步数据
根据需要在本地存储系统和云存储服务之间同步数据

您可以选择仅在需要数据时(例如在渲染帧或发布素材资源时)将数据推送到云端或从本地存储系统中拉取数据,反之亦然。如果您使用此策略,则可以通过流水线中的机制(例如监控脚本)、事件处理程序(如 Pub/Sub)或作业脚本中的一组命令来触发同步。

您可以使用多种命令执行同步,例如 gcloud scp 命令、gsutil rsync 命令或基于 UDP 的数据传输协议 (UDT)。如果您选择使用第三方 UDT(如 AsperaCloud FastPathBitSpeedFDT)与 Cloud Storage 存储桶通信,请参阅第三方的文档以了解其安全模型和最佳做法。Google 不管理这些第三方服务。

推送方法

通常在发布素材资源、将文件放入观察文件夹或完成渲染作业时使用推送方法,将数据推送到预定义的位置。

示例

  • 云渲染工作器完成渲染作业,并将生成的帧推送回到本地存储。
  • 艺术家发布素材资源,此过程就涉及将关联数据推送到 Cloud Storage 上的预定义路径。

拉取方法

您在请求文件时可以使用拉取方法,通常是通过云端渲染实例进行拉取。

示例:作为渲染作业脚本的一部分,渲染场景所需的所有素材资源都会在渲染之前被拉取至文件系统,以供所有渲染工作器访问。

优点 缺点 理想的使用场景
完全控制哪些数据要同步以及何时同步。

能够选择转移方法和协议。
您的生产流水线必须能够进行事件处理以触发同步推送/拉取数据。

处理同步队列可能需要其他资源。
具有自定义流水线并希望完全控制素材资源同步的小型到大型服务提供商。

生产说明:使用与处理渲染作业相同的队列管理系统来管理数据同步。同步任务可以使用单独的云资源来最大化可用带宽并最小化网络流量。

策略 3:本地存储,云端直读缓存

结合使用本地存储与云端直读缓存
结合使用本地存储与云端直读缓存

Google Cloud 扩展并开发了 KNFSD 缓存解决方案作为开源选项。该解决方案可以满足超出存储基础设施功能的渲染农场性能需求。KNFSD 缓存提供高性能的直读缓存,使工作负载能够扩容到跨多个区域和混合存储池的数百甚至数千个渲染节点。

KNFSD 缓存是一种横向扩容解决方案,可减少主要文件共享服务上的负载。当许多渲染节点同时尝试从文件服务器检索文件时,KNFSD 缓存还可减少过载效应。通过在与渲染节点相同的 VPC 网络上使用缓存层,可以减少读取延迟,从而有助于渲染作业更快地启动和完成。根据您配置缓存文件服务器的方式,数据保留在缓存中,直到:

  • 数据过时,或在指定的时间内没有任何变动。
  • 需要文件服务器上的空间时,会按照创建时间从缓存中删除最旧的数据。

此策略可减少部署大量并发渲染实例所需的带宽和复杂性。

在某些情况下,您可能希望预热缓存以确保在渲染之前所有与作业相关的数据都存在缓存中。如需预热缓存,请 readstat 一个或多个文件来读取云文件服务器上的目录内容。以这种方式访问文件会触发同步机制。

此外,您还可以添加物理本地设备以与虚拟设备进行通信。例如,NetApp 提供了一个存储解决方案,可以进一步减少本地存储和云之间的延迟时间。

优点 缺点 理想的使用场景
自动管理缓存数据。

降低带宽要求。

可以根据作业要求扩大或缩小集群云文件系统。
可能会产生额外费用。

如果您选择预热缓存,则必须实现预作业任务。
部署多个并发实例并在多个作业中读取通用素材资源的大型服务提供商。

过滤数据

您可以构建指定素材资源类型和关联条件的数据库,以定义是否同步特定类型的数据。比如,您可能永远不希望同步某些类型的数据,例如转换过程中生成的临时数据、缓存文件或模拟数据。此外,您还要考虑是否同步未批准的素材资源,因为并非所有迭代都将用于最终渲染。

执行初始批量转移

在实现混合渲染农场时,您可能希望将全部或部分数据集初始转移到 Cloud Storage、永久性磁盘或其他云端存储。基于某些因素(如要转移的数据量和类型以及连接速度),您可以在几天或几周内执行完整同步。下图比较了典型的在线和物理转移时间。

典型的在线和物理转移时间比较
典型的在线和物理转移时间比较

如果您的转移工作负载超出时间或带宽限制,可考虑使用 Google 提供的多种转移方案(包括 Google 的 Transfer Appliance)来将您的数据导入云端。

归档和灾难恢复

您需要注意数据归档和灾难恢复之间的区别。前者是已完成工作的选择性副本,而后者是可以恢复的数据状态。您可能希望设计灾难恢复计划使其符合您的设施的需求,并提供非现场应急计划。请咨询您的本地存储供应商,以获取适合您特定存储平台的灾难恢复计划的相关帮助信息。

在云端归档数据

项目完成后,通常的做法是将完成的工作保存到某种形式的长期存储中,通常是磁带介质,如 LTO。这些磁带盒需要满足环境要求,并且随着时间的推移,在实现逻辑管理方面可能具有挑战性。大型生产服务提供商有时将其整个归档存放在专门建造的房间内,该房间内有一名全职档案管理员,可以跟踪数据并在需要时检索数据。

搜索特定的归档素材资源、镜头或视频片段可能非常耗时,因为数据可能存储在多个胶卷上,归档索引可能缺失或不完整,或者从磁带读取数据时可能存在速度限制。

相比传统存档方法,将数据存档迁移到云端不仅可以消除对本地管理和归档介质存储的需求,还可以使您的数据更易于访问和搜索。

基本归档流水线可能如下图所示,您可以使用不同的云服务来检查、分类、标记和组织归档。在云端,您可以创建归档管理和检索工具,以使用各种元数据条件(如日期、项目、格式或分辨率)搜索数据。同时,您还可以使用机器学习 API 对图片和视频进行标记和分类,将结果存储在云端数据库(如 BigQuery)中。

素材资源归档流水线包括机器学习以对内容进行分类
素材资源归档流水线包括机器学习以对内容进行分类

需要考虑的其他主题包括:

  • 自动生成驻留在 Cloud Storage 存储类别中具有检索费用的内容的缩略图或代理。在媒体素材资源管理系统中使用这些代理,以便用户可以在只读取代理时浏览数据,而无需读取归档素材资源。
  • 考虑使用机器学习对实时操作的内容进行分类。使用 Cloud Vision 为纹理和背景片加标签,或使用 Video Intelligence API 来帮助搜索和检索参考视频片段。
  • 您还可以使用 Vertex AI AutoML 图片创建自定义图片模型,以识别任何素材资源(无论是实时操作的素材资源还是渲染的素材资源)。
  • 对于渲染内容,请考虑将渲染工作器的磁盘映像的副本与渲染的素材资源一起保存。这样如果需要重新创建设置,在需要重新渲染归档镜头时,就会有正确的软件版本、插件、OS 库和依赖项可供使用。

管理资源和生产

多个服务提供商处理同一个项目时可能会带来独特的挑战,尤其是需要在全球范围内提供内容和素材资源时。跨专用网络手动同步数据不仅昂贵和耗费大量资源,而且受到本地带宽的限制。

如果您的工作负载需要确保数据在全球都可用,您可以使用 Cloud Storage 从任何可以访问 Google 服务的位置访问该存储。要将 Cloud Storage 合并到流水线中,必须修改流水线以了解目标路径,然后在渲染之前将数据拉取或推送到渲染工作器。使用此方法可以对已发布的数据进行全球访问,但需要您的流水线在合理的时间内将素材资源交付到需要的位置。

例如,洛杉矶的纹理艺术家可以发布要由伦敦的照明艺术家使用的图片文件。过程如下:

将素材资源发布到 Cloud Storage
将素材资源发布到 Cloud Storage
  1. 发布流水线将文件推送到 Cloud Storage,并在云端素材资源数据库中添加一个条目。
  2. 伦敦的一位艺术家运行一个脚本来收集场景的素材资源。该脚本从数据库中查询文件位置,并从 Cloud Storage 中读取文件到本地磁盘。
  3. 队列管理软件收集渲染所需的素材资源列表,从素材资源数据库中查询它们,并将它们从 Cloud Storage 中下载到每个渲染工作器的本地存储。

如果您选择将 Cloud Storage 用作归档流水线的一部分,则您还可以使用 Cloud Storage 在云端归档所有已发布的数据。

管理数据库

素材资源和生产管理软件依赖于高度可用且耐用的数据库,这些数据库可运行在每秒处理数百或数千个查询的主机上。数据库通常托管在与渲染工作器位于同一机架中的本地服务器上,并受到相同的电源、网络和 HVAC 限制。

您可以考虑将 MySQL、NoSQL 和 PostgreSQL 生产数据库作为托管的云端服务运行。由于这些服务具有高可用性和全球可访问性,因此可在静态和传输过程中加密数据,并提供内置的复制功能。

管理队列

商业化队列管理软件程序,例如 Qube!DeadlineTractor 广泛应用于 VFX/动画行业。您还可选择使用开源软件,例如 OpenCue。您可以使用此软件在各种工作器上部署和管理任何计算工作负载,而不仅仅是渲染。您可以使用用于管理渲染的相同调度程序框架来部署和管理素材资源发布、粒子和流体模拟、纹理烘焙和合成。

一些服务提供商已经在他们的 VFX 流水线中实现通用调度程序,如来自威斯康星大学的 HTCondor、SchedMD 的 Slurm,或 Univa Grid Engine。但是,专为 VFX 行业设计的软件特别注重以下功能:

  • 基于作业、帧和图层的依赖项,这是因为某些任务需要在开始其他作业之前完成。例如,在渲染之前完整地运行流体模拟。
  • 作业优先级,使渲染人员可以根据各个截止期限和时间表来改变作业顺序。
  • 资源类型、标签或目标,可用于将特定资源与需要这些资源的作业相匹配。例如,仅在挂接了 GPU 的虚拟机上部署 GPU 加速渲染。
  • 捕获有关资源使用率的历史数据,并通过 API 或信息中心提供,以用于进一步分析。例如,查看渲染的最后几次迭代的平均 CPU 和内存使用率,以预测下一次迭代的资源使用率。
  • 排期前和排期后的作业。例如,在渲染之前,排期前作业会将所有必要的素材资源拉取到本地渲染工作器上。排期后作业将生成的渲染帧复制到文件系统的指定位置,然后在素材资源管理系统中将这些渲染帧标记为完成。
  • 与流行的 2D 和 3D 软件应用集成,如 Maya、3ds Max、Houdini、Cinema 4D 或 Nuke。

生产说明:使用队列管理软件识别云端资源池,就像它们是本地渲染工作器一样。这种方法需要一些监督措施,通过运行每个实例可以处理的最大渲染量来最大化资源使用率,这种技术称为装箱。通常由算法和渲染人员来处理这些操作。

此外,您还可以按需自动创建、管理和终止云端资源。此方法依赖于队列管理器来运行渲染前和渲染后的按需创建资源的脚本,在渲染期间监控这些脚本,并在任务完成时终止这些脚本。

作业部署注意事项

在实现同时使用本地存储和云端存储的渲染农场时,您需要记住以下关于队列管理器的注意事项:

  • 云端部署和本地部署之间的许可可能不同。有些许可是基于节点的,有些则是流程驱动的。确保队列管理软件能以最大限度利用许可价值的方式部署作业。
  • 请考虑向云端资源添加唯一标记或标签,以确保仅在分配给特定作业类型时才使用这些资源。
  • 使用 Cloud Logging 来检测未使用或空闲的实例。
  • 发布相关作业时,请考虑结果数据的驻留位置以及下一步存储的位置。
  • 如果本地存储和云端存储之间的路径命名空间不同,请考虑使用相对路径以使渲染与位置无关。或者,您可以根据平台构建一个在渲染时替换路径的机制。
  • 一些渲染、模拟或后处理依赖于随机数的生成,这可能因 CPU 制造商而异。来自同一制造商但芯片是不同代的 CPU 也会产生不同的结果。如有疑问,请为作业的所有帧使用相同或类似的 CPU 类型。
  • 如果您使用的是直读缓存设备,请考虑部署排期前作业以预热缓存,并确保在部署云资源之前云上的所有素材资源都可用。这种方法可以最大限度地减少渲染工作器在素材资源移动到云端时被迫等待的时间。

日志记录和监控

记录和监控资源使用率和性能对任何渲染农场都很重要。Google Cloud 提供了许多 API、工具和解决方案,以帮助深入了解资源和服务的利用率。

监控虚拟机活动的最快方法是查看其串行端口输出。当实例通过典型的服务控制层面(例如渲染队列管理监控器)无响应时,此输出就可用于定位问题。

在 Google Cloud 上收集和监控资源使用率的其他方法包括:

  • 使用 Cloud Logging 捕获使用率和审核日志,并将生成的日志导出到 Cloud Storage、BigQuery 和其他服务。
  • 使用 Cloud Monitoring 在虚拟机上安装代理以监控系统指标
  • Cloud Logging API 整合到流水线脚本中,以使用常用脚本语言的客户端库将日志直接记录到 Cloud Logging。
  • 使用 Cloud Monitoring 创建图表以了解资源使用率。

配置渲染工作器实例

为了使您的工作负载真正地在混合模型工作,本地渲染节点必须与云端渲染节点相同,具有匹配的操作系统版本、内核版本、已安装的库和软件。此外,您可能还需要在云端重现装载点、路径命名空间甚至用户环境,因为在本地都有这些元素。

选择磁盘映像

您可以选择某一公共映像,也可以基于本地渲染节点映像创建专用的自定义映像。公共映像包括一组软件包,用于设置和管理用户账号以及启用基于 Secure Shell (SSH) 密钥的身份验证。

创建自定义映像

如果选择创建自定义映像,您需要在 Linux 和 Windows 中添加更多库,以使它们在 Compute Engine 环境中正常运行。

您的自定义映像必须符合安全的最佳做法。如果您使用的是 Linux,请安装适用于 Compute Engine 的 Linux 客机环境以访问默认情况下公共映像提供的功能。通过安装客机环境,您可以使用在公共映像上使用的且与自定义映像上相同的安全控件来执行任务,例如元数据访问、系统配置和优化在 Google Cloud 上使用的操作系统。

生产说明:您应当在组织级别的单独项目中管理自定义映像。这种方法可让您更精确地控制映像的创建或修改方式,并使您可以应用版本,这在跨多个生产环境使用不同的软件或操作系统版本时非常有用。

自动创建映像和部署实例

您可以使用 Packer 等工具来创建更可重现、可审核、可配置且可靠的映像。您还可以使用 Ansible 之类的工具来配置正在运行的渲染节点,并更精细地控制其配置和生命周期。

选择机器类型

在 Google Cloud 上,您可以选择一种预定义机器类型或指定自定义机器类型。使用自定义机器类型可以控制资源,因此您可以根据在 Google Cloud 上运行的作业类型来自定义实例。创建实例时,您可以添加 GPU 并指定 CPU 数量、CPU 平台、RAM 数量以及磁盘的类型和大小。

生产说明:对于每帧部署一个实例的流水线,请考虑根据历史作业统计信息(如 CPU 负载或内存使用率)自定义实例,以优化镜头中所有帧的资源使用率。例如,您可以选择为包含大量动态模糊的帧部署具有更高 CPU 计数的机器,以规范化所有帧的渲染时间。

选择标准虚拟机或抢占式虚拟机

抢占式虚拟机 (PVM) 是指以比标准虚拟机低得多的价格出售的多余 Compute Engine 容量。如果其他任务需要访问该容量,Compute Engine 可能会终止或抢占这些实例。PVM 非常适合渲染容错的工作负载,并由可跟踪在抢占中丢失的作业的队列系统管理。

标准虚拟机可以无限期运行,非常适合需要以永久方式运行的许可服务器或队列管理主机。

抢占式虚拟机会在 24 小时后自动终止,因此请勿使用它们来运行所需运行时间更长的渲染或模拟。

抢占率从 5% 到 15% 不等,考虑到低廉的费用,这对于典型的渲染工作负载而言是可以容忍的。您可以参考一些关于抢占的最佳做法以您确定将 PVM 集成到渲染流水线中的最佳方法。如果您的实例被抢占,Compute Engine 会向实例发送抢占信号,您可以使用该信号触发调度器终止当前作业并重新排队。

标准虚拟机 抢占式虚拟机
可用于长期运行的作业。

非常适合具有较长截止期限的高优先级作业。

可以无限期运行,非常适合许可服务器或队列管理主机。
24 小时后自动终止。

需要队列管理系统来处理抢占的实例。

生产说明:某些渲染器可以按指定的时间间隔对正在进行中的渲染截取快照,因此,如果虚拟机被抢占,您可以暂停和恢复渲染,而无需从头开始重新构建帧。如果您的渲染器支持快照,并且您选择使用 PVM,请在流水线中启用渲染快照以避免丢失工作。在编写和更新快照时,可以将数据写入 Cloud Storage,如果渲染工作器被抢占,则可以在部署新的 PVM 时检索数据。要避免产生存储费用,请删除已完成渲染的快照数据。

授予对渲染工作器的访问权限

IAM 可帮助您将云资源的访问权限分配给个人。对于 Linux 渲染工作器,您可以使用 OS Login 来进一步限制 SSH 会话中的访问权限,从而控制具体的管理员人选。

控制混合渲染农场的费用

在估算费用时,您必须考虑许多因素,但我们建议您在实现渲染农场时利用以下常见最佳做法制定政策:

  • 默认情况下使用抢占式实例。 除非您的渲染作业运行的时间非常长,例如每帧四个小时或更长时间,或者截止期限很长,否则您可以使用抢占式虚拟机。
  • 尽量减少出站流量。仅将您需要的数据复制回本地存储。在大多数情况下,此数据将是最终渲染帧,但也可以是单独传递或模拟的数据。如果您要直接装载本地 NAS,或使用可自动同步的存储产品,请将所有渲染的数据写入渲染工作器的本地文件系统,然后将所需内容复制回本地存储,以避免临时和不必要的数据转移。
  • 适当规模的虚拟机。确保创建具有最佳资源使用率的渲染工作器,仅分配必要数量的 vCPU、最佳数量的 RAM 以及正确数量的 GPU(如果有)。还要考虑如何最小化任何挂接磁盘的大小。
  • 注意一分钟最低消费机制。在 Google Cloud 上,实例按每秒计费,最低消费为一分钟。如果您的工作负载包括不到一分钟的渲染帧,请考虑将任务组合在一起,以避免部署的计算时间短于一分钟的实例按照一分钟进行计费。
  • 在云端保留大型数据集。如果您使用渲染农场生成大量数据(例如深度 EXR 或模拟数据),请考虑使用云端工作站以进一步减轻流水线负担。例如,FX 艺术家可能会在云端运行流体模拟,将缓存文件写入云端存储。然后,照明艺术家可以从 Google Cloud 上的虚拟工作站访问此模拟数据。如需详细了解虚拟工作站,请与您的 Google Cloud 代表联系。
  • 利用持续使用折扣和承诺使用折扣。如果您运行了一个资源池,选择持续使用折扣可为您节省整月实例运行费用,最高可达 30%。在某些情况下,选择承诺使用折扣也可以为您节省不少成本。

将现有的渲染农场扩展到云端是一种经济有效的方法,可以在没有资本支出的情况下使用功能强大、低成本的资源。但请注意,由于没有任何两条生产流水线是完全相同的,因此本文件无法涵盖所有主题和独特的要求。如需获得关于将渲染工作负载迁移到云端的帮助,请与您的 Google Cloud 代表联系。

后续步骤