绿巨人浩克的威力—ILM Linux 死星
星球大战死星是真实存在的!但它不是一个威胁性的行星毁灭武器。ILM 的死星渲染农场是工业光魔制作的众多电影背后的计算力量。“Linux 将会持续增长”,ILM 首席技术官 Cliff Plumer 说。“我们的渲染农场目前拥有超过 1,500 个处理器,而且几乎每天晚上都会增加 1,000 个来自桌面电脑的处理器。” 渲染农场同时利用专用 CPU 和空闲桌面电脑的计算能力。
“自从我们从 SGI 机器切换过来后,我们的核心渲染农场几乎完全由 Linux 服务器组成”,ILM 系统开发人员 Mike Thompson 说。“我们大约有 750 个节点,即 1,500 个 CPU。” 渲染农场以一排计算塔的形式存在,这些计算塔由 1U 机架式双处理器 PC 组成。然而,这并非传统意义上的超级计算机。每台机器在网格配置中半独立运行,并非像运行单一作业的超级计算机那样绑定在一起。在 ILM,一个名为 ObaQ 的专有批处理调度程序管理跨机器的工作负载。
随着系统原始性能的提升,ILM 机房对电力和冷却的需求也随之增加。“降低功耗和热量非常重要”,Thompson 说。“我们选择了 AMD Athlon 1600 CPU,这是一种低功耗型号,可能有点难找。” 每个节点有 2GB 内存,可扩展至 4GB,并且每个节点通常同时运行两个作业以利用双处理器,但有时为了充分利用内存,会减少到一个作业。
AMD 驱动的节点是 RackSaver 生产的 RS-1100 单元。RackSaver 在美国广播电视展 (NAB) 大会上引起了 ILM 的注意,并获得了竞标构建渲染农场的机会。RackSaver 主要与重量级企业 IBM 和戴尔竞争。RackSaver 首席执行官 David Diggers 表示,RackSaver 的优势在于服务器的密度是竞争对手的两倍。“我们在垂直市场非常强大,客户包括 ILM、皮克斯和华纳兄弟”,他说。
RackSaver 渲染农场服务器通过 100BASE-TX 连接到 Foundry 8000 交换机,该交换机将网络流量聚合到千兆链路中,并连接到网络核心。“最近我们添加了一个 10 千兆链路到我们的核心,这有很大帮助”,Thompson 说。“我们有一个文件服务器核心和 2,500 个渲染核心,每天的总聚合流量约为 70TB。”
“绿巨人不是一部典型的漫画电影”,技术总监 Doug Sutton 说。“这是我们多年来完成的最具挑战性的工作之一。让一个 15 英尺高的绿色巨人看起来真实是一个不可思议的挑战!” 绿巨人是一个计算机生成的 (CG) 数字演员,具有情感和复杂的绿色皮肤。
“胶片的设计目的是使人们看起来不绿,要排斥绿色”,首席软件工程师 Rod Bogart 说。“我们正在使用柯达 Premiere 印刷胶片,它的色彩比柯达 Vision 更深。如果角色是绿色的,就像绿巨人一样,就很难让它看起来像绿色的皮肤。侏罗纪公园中的绿色恐龙就没有那么难。恐龙没有像人类一样的皮肤高光。” 观众对人脸——即使是绿色的脸——也更不宽容。“绿色在变成白色时会经过黄色”,Sutton 补充道。“你需要在显示器上看到这一点,才能抵消或接受它。”
实景拍摄是在加利福尼亚州旧金山的街道上进行的。詹妮弗·康纳利会站在街道中央,对着一个不存在的绿色巨人表演。一个拿着一根顶端有绿色头部的杆子的工作人员将是她唯一的提示。“他们做了一些非常酷的实际效果,爆炸,但主要是 CG”,Sutton 说,“Maya 和 SOFTIMAGE 的结合”。
捕捉胶片图像需要比典型的 JPEG 或 PNG 支持更高的动态范围。柯达 Cineon 长期以来一直是数字化胶片的标准。Cineon 是一种 10 位对数格式。与 8 位线性(即 24 位 RGB)的 JPEG 相比,Cineon 图像具有更大的动态范围,并且在接近黑色的颜色中尤其丰富。随着计算能力的提高,大多数计算已切换到浮点,而使用 10 位对数已成为一种限制。OpenEXR 是一种新的浮点图像格式。
“OpenEXR 文件格式是胶片更好的数字表示,因为它具有超过 30 档光圈的动态范围,而不会损失精度”,Plumer 说。“以前的 8 位文件格式的动态范围只有大约 7 到 10 档光圈,无法准确再现具有极端对比度的图像。” ILM 在 2000 年夏天创建了 EXR 格式,并已在哈利·波特与魔法石、黑衣人 2、纽约黑帮、天兆、捕梦网、绿巨人、范海辛、小飞侠、时间线和加勒比海盗中使用。
OpenEXR 使用像 PNG 这样的无损压缩,而不是像 JPEG 这样的有损压缩。实际上,有一个未使用的 Piz12 有损压缩选项。与 PNG 或 JPEG 不同,OpenEXR 使用小波编码——基本上是一个包含像素之间有符号差异的树状结构。由于数字的幅度较小,并且唯一值较少,因此 Huffman 编码可以更有效地压缩它。EXR 支持 32 位浮点、32 位整数和 16 位浮点到任意数量的通道。通道可以具有不同的深度;例如,RGBAZ 图像需要在 Z 深度上具有更高的精度——典型的为 16-16-16-16-32。Z 通道是物理深度,而不是颜色或 alpha 蒙版——可以将 Z 视为声纳。2003 年 1 月,ILM 发布了开源 OpenEXR。第一个支持它的开源应用程序是 CinePaint。
CinePaint,直到最近还被称为 Film Gimp,是一个逐帧电影修饰系统,它于 1998 年从 GIMP 分支出来。在我为Linux Journal撰写了一些关于 Film Gimp 的文章后,我偶然成为了 CinePaint 项目负责人。除了通常的静态图像格式外,CinePaint 还支持电影行业流行的文件格式。这些格式包括 Cineon、RnH 16 位浮点(一种由工作室 Rhythm & Hues 创建的格式,它截断了 32 位浮点数的一半)、Radiance HDR、LogLuv TIFF 以及现在的 OpenEXR。ILM 为 CinePaint 编写了 OpenEXR 插件。
“我们从不希望在没有适当的 SDev 的情况下查看图像”,Sutton 说。“重要的是你所看到的就是你所得到的。SDev——一个模拟设备——是我们让显示器看起来像胶片的方式。自从切换到 OpenEXR(稍后会详细介绍)后,我们不再经常使用 LUT,但我们一直都在使用 SDev。” LUT 是用于调整图像以校正伽玛的查找表。显示器亮度与输入电压不成正比,而是与输入电压的幂成正比。该指数称为伽玛,并且因显示器而异。Mac 通常约为 1.8,而 PC 约为 2.2。
“LUT 的工作方式主要是改变对比度”,Bogart 说。“LUT 不能做的是增加或减少饱和度。” ILM 使用更复杂的 lattice 计算来代替 LUT。将 lattice 想象成空间中的一个 13 × 13 × 13 立方体——一个 3-D 索引数组。使用奇数是为了使中心为灰色。在 lattice 中,每个 RGB 值都被映射——不像 LUT 那样按通道映射。使用三个独立的查找表不足以获得胶片的观感——尤其是饱和的绿色。lattice 使用一个包含 64k 条目的计算表调整到 12 点胶片曲线。lattice 中 0 到 1 之间的索引使用三线性或四面体插值返回三个值,然后对这些值进行伽玛校正。该过程速度较慢,因为每个像素都必须一起处理,但比典型的基于 RGB 通道的查找更准确。“Lattice 不仅仅是绿巨人的事情”,Bogart 指出。“对于少数派报告,那是一种漂白工艺印刷——非常不饱和。我们用 lattice 模拟了这种外观。你也无法用 LUT 进行去饱和。”
原始的 16 位 OpenEXR 数据格式称为 Half,即 32 位浮点数的一半。Half 数据格式是 NVIDIA 显卡的内部格式。如果可以将消耗 CPU 周期的 lattice 计算直接在显卡上的图形处理单元 (GPU) 上运行,那就太好了。事实上,由于显卡的进步,这正在成为可能。“我们期待着这一点”,Bogart 说。“我们打算将图像计算卸载到 GPU 上运行像素着色器。” NVIDIA 提供了一个新的类 C 编译器/库,称为 Cg,用于在 GPU 上运行像素代码位,通常称为着色器。ATI 提供了类似的技术,称为高级着色语言,而 3Dlabs 提供了 OpenGL 着色语言。
GPU 编程有点像嵌入式系统编程,代码在主机平台上编译,然后下载到嵌入式系统。GPU 程序可以在运行时编译并下载到显卡。编译器是运行时库的一部分。
一些 3-D 软件包,例如 SOFTIMAGE 和 Maya,已经开始使用 Cg 来提高渲染性能。
Alias|Wavefront Maya 用于粒子和一些角色动画模型。Pixar RenderMan 和 Mental Images Mental Ray 软件用于渲染。光线追踪可以更好地渲染反射表面,但需要更长的时间。由于更快、更便宜的 Linux 系统,光线追踪正变得越来越实用。RenderMan 和 Mental Ray 都支持着色器编程,以赋予图像自定义外观。RenderMan 提供了自己的着色器语言,该语言被认为易于学习。Mental Ray 使用 C 语言,该语言被认为更具挑战性,但也更强大。使用哪种软件取决于具体场景。每个场景都在批处理调度程序的控制下渲染。
“Florian Kines,他也是 OpenEXR 的幕后功臣,很久以前为 SGI Irix 编写了我们的批处理调度程序以及其他几个程序”,Hess 说。“这利用了大型机和桌面电脑。当我们开始向 Linux 迁移时,我们希望获得更好的资源管理。” 第一个版本的 ObaQ 按节目划分机器——资源利用率不高。
“我们尝试用一个名为 IMP Project 的集中式资源管理系统取代 ObaQ,但没有成功”,Hess 说。“我们回到了 ObaQ,而 Linux 端口的移植大约花了两个星期。三四个月前,Florian 决定他要修复这个问题,以便任何节目都可以使用任何机器。” ObaQ 是一个对等 (P2P) 调度系统。P2P 调度程序的优点是调度程序服务器故障不会导致整个系统脱机。ObaQ2 使用单台机器进行全局调度,但它仅建议独立机器运行 ObaQ。丢失 ObaQ2 服务器不会使整个设施瘫痪。还有其他调度系统替代方案,例如流行的专有产品 Platform LSF 或开源 Condor 和 OpenPBS 调度程序,但 ILM 计划继续使用 ObaQ。
SGI 在 IRIX 内核中添加了进程监控功能,例如 CPU 时间和临时空间。这些值决定了 ILM 机器时间如何由中央会计部门向项目收费。ILM 发现 Linux /proc 文件系统没有提供所有这些统计信息,或者产生了过多的开销,并且在不进行更改的情况下无法支持 ObaQ。
“Florian 要求我解决一些 Linux 内核问题”,Hess 说。“首先,Linux 没有办法判断什么是线程或进程。在 ps 中,每个线程都显示为一个单独的进程。” 有些作业,例如 Mental Ray,可以在每个帧中并行运行多个线程。Linux top 或 ps 显示每个线程使用 1GB RAM,但那是共享内存被重复计算。Linux 也无法分辨哪个作业正在打开临时文件。ObaQ 需要知道这一点,以便在终止作业时清理临时文件。
Hess 创建了一个 Linux 内核模块来捕获 opens、forks、clones、vforks、exits 和 renames,以使准确的统计信息成为可能。内核模块完成了大部分工作,但钩子调用应忽略任何未由 ObaQ 运行的作业。为此,需要破解内核。“我使用了 ptrace 标志中一个未使用的位”,Hess 说。“每个 x86 作业都有一个 32 位 ptrace 向量。截至 2.4.20,10 位用于指示 ptrace 模式,例如单步执行。去年某个时候,Linux 或 glibc 更改了 ptrace 标志的工作方式,使其在 fork 时清除。我找到了内核清除这些位的所有位置,并保留了第 32 位。” Hess 说 2.5 内核中的 OPROFILE 功能增强了计费功能,因此他的黑客行为在 2.5 中可能不再需要。征用 ptrace 标志中未使用的位是一种快速的黑客手段,用于将作业标记为 ObaQ 任务。“这是 Linux 的伟大之处之一”,Hess 说。“因为我们拥有源代码,所以我们可以自己进行此更改,而且速度非常快。与 IRIX 情况一样,无需第三方供应商参与进行定制工程。”
“现在我们在渲染农场中拥有了所有这些火力,它可能会压垮任何文件服务器”,Thompson 说。“在绿巨人中,我们有这些核爆炸渲染,它们非常粗糙——最近给我们带来了很大的麻烦。艺术家很容易将渲染任务 proc-up [向任务添加更多处理器],以至于使文件服务器崩溃。我们正在交付的数据量是我们以前的 700 倍!”
ILM 使用 Sun T3 磁盘阵列来提供 NFS 服务。一年前半采用 Linux 作为 NFS 客户端时,出现了很多问题。由于 Linux NFS UDP 数据包乱序错误(在 2.4.18 中修复),几个小时后,Sun Solaris 服务器将飙升至 100% 并被拖垮。Sun 提供了专有的 Solaris 内核模块和 IP 堆栈补丁来解决 Linux 错误,从而解救了困境。
选择 Linux NFS UDP 的一个恼人的问题是没有流量控制。“当我们在文件服务器上遇到热点问题时,渲染农场会对我们的文件服务器进行拒绝服务攻击”,Thompson 说。“我们将再次尝试 Linux 客户端上的 TCP NFS,现在已经过去一年半了。我们下周将开始对此进行测试。” TCP 大约增加 5% 的开销。
ILM 正在扩大规模,从现在的大约 20TB 文件服务器存储到明年翻一番。“为了星球大战 III 部曲,我们将把渲染农场的规模扩大一倍”,Thompson 说。“我们可以通过从 RackSaver 再订购 3,000 个节点来做到这一点——但这可能会摧毁我们的文件服务器。” Thompson 计划通过转向集群文件服务器(Sistina GFS 或类似的东西)来避免 NFS 服务器崩溃。文件服务不仅限于 ILM 设施内部。
ILM 通过 ILM Conduit(一种使用加密 SSL 传输的专有文件传输系统)在全球范围内发送样片。一切都使用 Blowfish 双重加密。ILM 拥有适用于 Windows、Macintosh 和基于 Web 的 Java 小程序版本的播放软件,该小程序版本可在任何地方运行。“MJPEG-A QuickTime 是我们的核心电影容器格式”,Thompson 说,“但 Conduit 可以承载任何东西——匹配移动数据、数字图片、样片。人们可以在普通网络连接上的 Linux 桌面电脑上播放样片。这非常令人印象深刻。过去你只能在 SGI 设备上做到这一点”。对于样片,ILM 在 EMC Clarrion FC4700 阵列中拥有 20TB 存储,前端是 4 路 Sun E420R 服务器,配备 4GB 内存和千兆以太网。“镜头磁盘”以四分之一 TB 的存储块排列。
“Linux 意味着拥有令人难以置信的计算能力来解决任何问题”,Sutton 说。“在绿巨人中,我们不知道皮肤和头发有多少层纹理。我们可以使用 Linux 完成极其复杂的场景。” 工作室制作哪些电影受到成本和进度的影响。更快、更便宜的 Linux 意味着更多的电影。
感谢 RackSaver, Inc. 的营销协调员 Jimmy Perry (jimmy@racksaver.com) 对此专题的构思和开发提供的帮助。
Robin Rowe (Robin.Rowe@MovieEditor.com) 是电影技术公司 MovieEditor.com 的合伙人,Film Gimp 的发布经理,以及 LinuxMovies.org 和 OpenSourceProgrammers.org 的负责人。