运行混合渲染农场概念验证


本文档介绍如何运行概念验证 (PoC) 以在 Google Cloud 上构建混合渲染农场。本文档是构建混合渲染农场的配套文档,旨在帮助对 Google Cloud 上的动画、电影、商业广告或电子游戏的渲染进行测试和基准比较。

如果将测试范围缩小至仅包含基本组件,则可以在 Google Cloud 上运行混合渲染农场的 PoC。与构建完整的端到端解决方案相比,请考虑 PoC 的以下用途:

  • 确定如何在云端再现您的本地渲染环境。
  • 衡量本地渲染工作器与云端实例之间在渲染和网络性能方面的差异。
  • 确定本地和云端工作负载之间的费用差异。

以下任务不太重要,可以推迟甚至从 PoC 中排除:

  • 确定您的网点与云端之间的资源同步方式(如果有)。
  • 确定如何使用队列管理软件将作业部署到云端渲染工作器。
  • 确定连接到 Google Cloud 的最佳方式。
  • 测量您的网点与 Google 数据中心之间的延迟。

连接

对于渲染 PoC,您不需要与 Google 建立企业级连接,通过公共互联网连接就足够了。 连接速度、延迟时间和带宽对于渲染性能没那么重要。

由于安排专用互连合作伙伴互连的 PoC 可能需要一些时间,您可以将连接作为单独的 PoC,并且可以与渲染测试同时执行。

目标

  • 创建一个 Compute Engine 实例并对其进行自定义以充当渲染工作器。
  • 创建一个自定义映像
  • 部署一个渲染工作器。
  • 将资源复制到渲染工作器。
  • 执行渲染基准测试。
  • 将渲染工作器中的测试渲染复制到您的本地工作站以进行评估。

费用

预估您的使用量时,请估算本地渲染工作器与云端渲染工作器之间的费用差异。

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 安装 Google Cloud CLI。
  5. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  6. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  7. 确保您的 Google Cloud 项目已启用结算功能

  8. 安装 Google Cloud CLI。
  9. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  10. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  11. 在本文档中,您主要使用 Cloud Shell 执行相关步骤。但是,如需将数据从本地机器复制到 Cloud Storage,您需要在该机器上运行 Google Cloud CLI。

设置您的环境

  • 在 Cloud Shell 中,设置 Compute Engine 地区:

    gcloud config set compute/zone [ZONE]
    

    其中 [ZONE] 是创建了所有资源的区域。

部署实例

为了进行 PoC,您可能希望重新创建本地渲染工作器硬件。虽然 Google Cloud 提供了许多可能与您自己的硬件相匹配的 CPU 平台,但云端虚拟机的架构不同于本地渲染农场中的裸机渲染刀片式服务器。

在 Google Cloud 上,资源是虚拟化的,并且独立于其他资源。虚拟机(实例)由以下主要组件组成:

  • 虚拟 CPU (vCPU)
  • 内存 (RAM)
  • 磁盘

    • 启动磁盘和来宾操作系统
    • 其他存储磁盘
  • NVIDIA Tesla GPU(可选)

您还可以控制资源的其他方面,例如网络、防火墙规则和用户访问权限。但是,对于 PoC 来说,您只需要注意前面介绍的四种组件。

创建实例

  1. 在 Cloud Shell 中,创建原型渲染工作器实例:

    gcloud compute instances create [INSTANCE_NAME] \
        --machine-type [MACHINE_TYPE] \
        --image-project [IMAGE_PROJECT] \
        --image-family [IMAGE_FAMILY] \
        --boot-disk-size [SIZE]
    

    其中:

    • [INSTANCE_NAME] 是您的实例的名称。
    • [MACHINE_TYPE]预定义机器类型custom-[NUMBER_OF_CPUS]-[NUMBER_OF_MB] 格式的自定义机器类型,即由您定义 vCPU 和内存数量的机器类型。
    • [IMAGE_PROJECT] 是该映像系列的映像项目
    • [IMAGE_FAMILY] 是可选标志,用于指定此映像所属的映像系列
    • [SIZE] 是启动磁盘的大小(以 GB 为单位)。

    例如:

    gcloud compute instances create render-worker-proto \
        --machine-type custom-24-32768 \
        --image-project centos-cloud \
        --image-family centos-7 \
        --boot-disk-size 100
    

    上述命令创建一个具有 24 个 vCPU、32 GB RAM 和标准 100 GB 启动磁盘的 CentOS 7 实例。此实例是在您之前设置为默认计算地区的地区中创建的。

您可以选择创建任意大小的虚拟机,最多 96 个 vCPU(如果需要更多,请试试 ultramem 类型),超过 624 GB RAM 或多个 NVIDIA Tesla GPU。实例的可能性是无穷无尽的,但要注意不要过度预配:您应构建一个经济高效、可扩缩、基于云的渲染农场,以适应任何规模的作业。

登录到实例

  1. 在 Cloud Shell 中,使用 SSH 连接到您的实例:

    gcloud compute ssh [INSTANCE_NAME]
    
  2. 在实例上安装和许可软件,就像使用本地渲染工作器一样。

构建默认映像

除非您要测试的自定义软件需要使用自定义 Linux 内核或旧版操作系统等产品,否则我们建议您从我们的公共磁盘映像开始,并添加您要使用的软件。

如果选择导入自己的映像,则需要通过安装其他库来配置此映像,以使客机操作系统能够与 Google Cloud 通信。

设置渲染工作器

  1. 在 Cloud Shell 中,在您之前创建的实例上通过安装软件和库来设置渲染工作器,就像设置本地工作器一样。

  2. 停止实例:

    gcloud compute instances stop [INSTANCE_NAME]
    

创建自定义映像

  1. 在 Cloud Shell 中,确定虚拟机的启动磁盘的名称:

    gcloud compute instances describe [INSTANCE_NAME]
    

    输出会包含您的实例的启动磁盘名称:

    mode: READ_WRITE
    source:https://www.googleapis.com/compute/v1/projects/[PROJECT]/zones/[ZONE]/disks/[DISK_NAME]
    

    其中:

    • [PROJECT] 是您的 Google Cloud 项目的名称。
    • [ZONE] 是磁盘所在的地区。
    • [DISK_NAME] 是挂接到您的实例的启动磁盘的名称。磁盘名称通常与实例名称相同(或类似)。
  2. 从您的实例创建映像:

    gcloud compute images create [IMAGE_NAME] \
        --source-disk [DISK_NAME] \
        --source-disk-zone [ZONE]
    

    其中:

    • [IMAGE_NAME] 是新映像的名称。
    • [DISK_NAME] 是您要从中创建新映像的磁盘。
    • [ZONE] 是磁盘所在的地区。

部署渲染工作器

现在您已准备好具有所需的操作系统、软件和库的自定义映像,便可以使用此自定义映像而非公共映像来部署渲染工作器实例了。

  • 在 Cloud Shell 中,创建一个渲染工作器实例。添加范围 devstorage.read_write 以便您可以从此实例向 Cloud Storage 写入。

    gcloud compute instances create [WORKER_NAME] \
        --machine-type [MACHINE_TYPE] \
        --image [IMAGE_NAME] \
        --scopes https://www.googleapis.com/auth/devstorage.read_write \
        --boot-disk-size [SIZE]
    

    其中 [WORKER_NAME] 是渲染工作器的名称。

许可软件

您可以使用本地许可服务器在 PoC 期间提供许可,因为您无需为新的基于云的许可服务器重新颁发许可。要从您的云实例安全地连接到本地许可服务器,请创建仅允许通过必要端口进行通信的防火墙规则。此防火墙规则还允许来自本地互联网网关的 IP 地址或许可服务器本身的流量。

您可能需要配置网点的互联网网关,以允许来自 Google Cloud 实例的流量到达您的本地许可服务器。

使用本地许可服务器

您可以通过创建防火墙规则来允许流量进入您的 Virtual Private Cloud (VPC) 网络。

  • 在 Cloud Shell 中,创建防火墙规则:

    gcloud compute firewall-rules create [RULE_NAME] \
       --direction=INGRESS \
       --priority=1000 \
       --network=default \
       --action=ALLOW \
       --rules=[PROTOCOL]:[PORT] \
       --source-ranges=[IP_ADDRESS]
    

其中:

  • [RULE_NAME] 是防火墙规则的名称。
  • [PROTOCOL] 是流量的协议。
  • [PORT] 是流量所经过的端口。
  • [IP_ADDRESS] 是本地许可服务器的 IP 地址。

使用云端许可服务器

云端许可服务器不要求连接到本地网络,并且与渲染工作器在同一 VPC 网络上运行。由于提供许可是一项相对轻量级的任务,因此小型实例(2-4 个 vCPU、6-8 GB RAM)即可处理向少数渲染工作器提供许可的工作负载。

根据需要许可的软件类型,您可能需要将许可密钥重新设置为唯一的硬件 ID 号,例如许可服务器的 MAC 地址。其他许可证管理器可以从任何连接到互联网的主机验证软件许可。许可管理器有许多种,因此请参考产品许可文档以了解相关说明。

允许实例之间通信

渲染工作器和许可服务器实例需要相互通信。防火墙规则 default-allow-internal 允许您的项目中的所有实例相互通信。创建新项目时便会创建此防火墙规则。如果您使用的是新项目,则可以跳过本部分。如果使用的是现有项目,则需要测试您的 Google Cloud 项目中是否仍存在此防火墙规则。

  1. 在 Cloud Shell 中,检查此防火墙规则是否存在于您的项目中:

    gcloud compute firewall-rules list \
        --filter="name=default-allow-internal"
    

    如果您的项目中存在此防火墙规则,您将看到以下输出:

    NAME                   NETWORK DIRECTION PRIORITY ALLOW DENY                   DISABLED
    default-allow-internal default INGRESS   65534m   tcp:0-65535,udp:0-65535,icmp False
    

    如果您的项目中没有此防火墙规则,则输出不会显示任何内容。

  2. 如果需要创建此防火墙规则,请使用以下命令:

    gcloud compute firewall-rules create default-allow-internal \
        --direction=INGRESS \
        --priority=65534 \
        --network=default \
        --action=ALLOW \
        --rules=tcp:0-65535,udp:0-65535,icmp \
        --source-ranges=0.0.0.0/0
    

存储资源

即使是在一家公司内,渲染流水线也会有很大差异。要利用最低配置快速实施 PoC,您可以使用渲染工作器实例的启动磁盘来存储资源。您的 PoC 还不应评估数据同步或更高级的存储解决方案。您可以在单独的 PoC 中评估这些选项。

Google Cloud 提供多种存储选项,但我们建议您在单独的 PoC 中测试可扩缩的共享存储解决方案。

如果您正在测试多个渲染工作器配置并需要共享文件系统,则可以创建 Filestore 卷并使用 NFS 将其装载到渲染工作器。Filestore 是一种充当文件服务器的代管式文件存储服务,可跨多个实例装载并进行读/写操作。

将数据传输到 Google Cloud

要运行渲染 PoC,您需要将场景文件、缓存和资源提供给渲染工作器。对于大型 (>10 GB) 数据集,您可以使用 gsutil 将数据复制到 Cloud Storage,然后再复制到渲染工作器。对于较小的 (<10 GB) 数据集,您可以使用 gcloud CLI 将数据直接复制到渲染工作器上的某个路径下(仅限 Linux)。

在渲染工作器上创建目标目录

  1. 在 Cloud Shell 中,使用 SSH 连接到您的渲染工作器:

    gcloud compute ssh [WORKER_NAME]
    

    其中 [WORKER_NAME] 是渲染工作器的名称。

  2. 为您的数据创建目标目录:

    mkdir [ASSET_DIR]
    

    其中 [ASSET_DIR] 是渲染工作器上任何位置的本地目录。

使用 gsutil 复制大量数据

如果要将大型数据集传输到渲染工作器,请使用 gsutil 与 Cloud Storage 作为中间步骤。如果您要传输较小的数据集,可以跳到下一部分并使用 gcloud CLI 传输较少量的数据

  1. 在本地工作站上,创建 Cloud Storage 存储分区:

    gsutil mb gs://[BUCKET_NAME_ASSETS]
    

    其中,[BUCKET_NAME_ASSETS] 表示要复制的文件或目录所在的 Cloud Storage 存储分区的名称。

  2. 将数据从本地目录复制到此存储分区:

    gsutil -m cp -r [ASSETS] gs://[BUCKET_NAME_ASSETS]
    

    其中 [ASSETS] 是要复制到此存储分区的文件或目录列表。

  3. 使用 SSH 连接到渲染工作器:

    gcloud compute ssh [WORKER_NAME]
    
  4. 将存储分区的内容复制到您的渲染工作器:

    gsutil -m cp -r gs://[BUCKET_NAME_ASSETS]/* [ASSET_DIR]
    

使用 gcloud CLI 复制少量数据

如果您要传输较小的数据集,则可以使用 gcloud CLI 直接从本地工作站复制到正在运行的 Linux 渲染工作器。

  • 在本地工作站上,在本地目录与您的渲染工作器之间复制数据:

    gcloud compute scp --recurse [ASSETS] [INSTANCE_NAME]:[ASSET_DIR]
    

    其中:

    • [ASSETS] 是要复制到存储分区的文件或目录列表。
    • [INSTANCE_NAME] 是渲染工作器的名称。
    • [ASSET_DIR] 是渲染工作器上的任何本地路径。

运行测试渲染

在安装和许可渲染软件并复制场景数据后,您就可以运行渲染测试了。此过程完全取决于渲染流水线如何运行渲染命令。

基准测试工具

如果要针对本地硬件对云端资源进行基准测试,可以使用 Perfkit 基准测试来计算网络带宽和磁盘性能等统计信息。

某些渲染软件有自己的基准测试工具,例如 V-RayOctaneMaxon,建议您在本地和云端运行这些工具来比较常用渲染配置。

从 Google Cloud 获取数据

执行渲染测试后,如果要查看结果,您需要将生成的渲染复制到您的本地工作站。根据要传输的数据集的大小,您可以使用 gsutil 或 gcloud CLI。

在本地工作站上创建目标目录

  • 在本地工作站上,为渲染创建一个目录:

    mkdir [RENDER_DIR]
    

    其中 [RENDER_DIR] 是渲染工作器上的本地路径。

使用 gsutil 复制大量数据

如果要传输大型数据集,请使用 gsutil。否则,请跳到下一部分以使用 gcloud CLI。要将数据从渲染工作器复制到 Cloud Storage 存储分区,请创建单独的 Cloud Storage 存储分区,以使渲染与资源数据分开。

  1. 在本地工作站上,创建一个新的 Cloud Storage 存储分区:

    gsutil mb gs://[BUCKET_NAME_RENDERS]
    

    其中 [BUCKET_NAME_RENDERS] 表示渲染数据的 Cloud Storage 存储分区名称。

  2. 使用 SSH 连接到渲染工作器:

    gcloud compute ssh [WORKER_NAME]
    
  3. 将渲染数据复制到存储分区:

    gsutil -m cp -r [RENDERS] gs://[BUCKET_NAME_RENDERS]
    

    其中:

    • [RENDERS] 是要复制到存储分区的文件或目录列表。
  4. 在本地工作中,将文件从 Cloud Storage 存储分区复制到本地目录:

    gsutil -m cp -r gs://[BUCKET_NAME_RENDERS]/* [RENDER_DIR]
    

使用 gcloud CLI 复制少量数据

如果要复制较小的数据集,则可以直接从渲染工作器复制到本地工作站。

  • 在本地工作站上,将渲染复制到目标目录中:

    gcloud compute scp --recurse [WORKER_NAME]:[RENDERS] [RENDER_DIR]
    

    其中 [RENDERS] 是要复制到本地工作站的文件或目录列表。

清除数据

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

逐个删除资源

  1. 删除实例:
    gcloud compute instances delete INSTANCE_NAME
  2. 删除存储分区:
    gcloud storage buckets delete BUCKET_NAME

后续步骤