Google 刚刚让 TensorFlow.js 变得过时了(LiteRT.js)

BBetter Stack
컴퓨터/소프트웨어게임/e스포츠AI/미래기술

스크립트

00:00:00Google 刚刚发布了一个全新的运行时库,让你能在浏览器中以近乎原生的速度
00:00:05运行机器学习和 AI 模型。它叫作 LiteRT.js,非常令人惊艳。所以,
00:00:12在这个视频里,我们将深入了解 LiteRT.js,看看它是如何工作的,并通过
00:00:18构建一个完全在浏览器中运行的实时 3D 动作捕捉应用来进行测试。这会
00:00:24非常有趣,让我们开始吧。那么 LiteRT.js 到底是什么呢?简单来说,它是 LiteRT 的 JavaScript 绑定,
00:00:36而 LiteRT 是他们的端侧推理运行时,多年来一直运行在安卓、iOS 和嵌入式
00:00:42硬件上。但 LiteRT.js 通过 WebAssembly 将同样的运行时引入了浏览器,使用的是
00:00:50LiteRT.js 核心 npm 包。这就是 LiteRT.js 的独特之处。Google 之前已经有一个
00:00:58浏览器机器学习库叫作 TensorFlow.js,它已经存在好几年了。但是,
00:01:04TensorFlow.js 运行在基于 JavaScript 的内核上,这是一个巨大的瓶颈。你看,JavaScript 内核
00:01:11无法像原生运行时那样充分利用 CPU 或 GPU。因此,TensorFlow.js 在性能上一直落后于
00:01:19原生应用。但 LiteRT.js 使用了 WebAssembly,并且自带了经过优化的内核。
00:01:27因此,支持安卓和 iOS 推理的同一个原生运行时被编译成了 WASM,并暴露给
00:01:34LiteRT.js。所以你不再得到的是一种 Web 风格的抽象层,而是真正得到了
00:01:40一个真正经过优化的运行时引擎。这也体现在他们的后端架构中。LiteRT.js 有
00:01:47三个不同的层级,使其能在 CPU、GPU 甚至 NPU 上表现出色。在 CPU 端,
00:01:55它使用 XNNPack,这是 Google 的优化 CPU 内核库,支持多线程和松散的 SIMD。
00:02:04这是你的通用兜底方案,无需 GPU 即可在任何地方运行。但对于 GPU,
00:02:11它通过 WebGPU 使用 ML Drift,这才是真正发挥性能的地方。它利用了原生 GPU
00:02:18内核,所以像着色器这类渲染任务不再需要通过某种 JavaScript 编排来完成。至于
00:02:24NPU,它有 WebNN,目前在 Chrome 和 Edge 中仍处于实验阶段,它针对的是专用的神经网络
00:02:31处理硬件以实现高效的推理。根据 Google 自己的基准测试,他们
00:02:37在搭载 M4 芯片的 2024 款 MacBook Pro 上进行了测试,其推理速度似乎比
00:02:45其他 Web 运行时在 CPU 和 GPU 上都要快三倍,涵盖视觉和音频模型。而在运行诸如
00:02:53物体追踪、音频转写或图像处理等工作负载时,如果使用 GPU 或 NPU 而不是 CPU,
00:03:00我们获得的性能提升从五倍一直到 60 倍不等,
00:03:07具体取决于任务。值得一提的是,那是最佳情况。Google 也
00:03:13承认了这一点。所以实际情况会有所不同,要考虑到你具体的 GPU、
00:03:18热节流以及驱动程序的质量。对于这个运行时,还有一件事非常重要。
00:03:24如果你已经有在 PyTorch 或 TensorFlow 上运行的模型,如果你有一个现有的
00:03:30TF Lite 文件,LiteRT.js 实际上可以直接运行它。如果你用的是 PyTorch,还有一个 LiteRT
00:03:38Torch,可以将你的模型直接转换为 .TF Lite。此外,还有一个 AI Edge
00:03:44量化工具,无需完全重写即可缩小模型体积。因此,你在
00:03:50TensorFlow.js 上使用的遗留工作流可以轻松移植到新的 LiteRT.js,这非常酷。但你
00:03:58实际上能用它做什么呢?Google 提供了一些非常酷的演示,让你能感受到它的
00:04:03能力范围。比如你可以进行实时的 YOLO 物体检测、单目深度估计,
00:04:09利用 depth anything 库将你的网络摄像头画面转为实时 3D 点云。它还可以进行
00:04:16图像超分辨率处理,使用 real ESR GAN 库。所有这些演示都是在客户端完全运行的,
00:04:23没有后端,没有 API,直接就在你的浏览器里。他们已经宣布了接下来要发布的内容:
00:04:29LiteRT.LM.js。这将用于在浏览器中本地运行完整的语言模型。
00:04:36所以这不仅仅是为了计算机视觉。很快,它也将提供本地 LLM 推理功能。
00:04:42好了,听起来都很不错,但我还是想自己测试一下,看看它到底有多强大。
00:04:48所以对于这个演示,我决定创建一个真实的动作捕捉应用,利用你的网络摄像头进行
00:04:55实时姿态估计。而且它也完全在你的浏览器客户端离线运行,没有任何
00:05:03附加条件。我是在 Cloud Code 上使用新的 Fable 5 模型编写了这个应用。这是最终结果。
00:05:10顺便说一下,如果你想下载这个仓库自己尝试一下,我也在
00:05:15下方的说明栏里添加了项目链接。现在 LiteRT.JS 正在浏览器中使用 blaze pose 模型运行,
00:05:23具有 33 个身体关键点,并使用 3.js 实时驱动一个 3D 角色。没有后端服务器,
00:05:31你看到的一切现在都完全离线发生在这台机器上。所以我们可以看到,在
00:05:38CPU 上,我们平均在 38 FPS 左右,推理时间为 23.3 毫秒。我们也可以看到,姿态
00:05:47估计稍微有些延迟。但现在如果我们切换到 Web GPU 版本,可以看到我们现在
00:05:54达到了稳定的 120 帧每秒,推理时间仅为 8.4 毫秒。而且姿态估计也
00:06:02更快了一些。这大约是帧率的三倍提升和推理时间的 2.8 倍缩减,这
00:06:10与 Google 给出的数据基本吻合,尽管这处于他们发布数据中比较保守的一端。但我们必须
00:06:16考虑到 blaze pose 本身确实是一个小模型。所以 GPU 的原始计算负担
00:06:23较小。但即便如此,将张量运算从 CPU 转移到 Web GPU,确实使延迟
00:06:30大幅降低了, lag 明显减少。我还添加了一个功能,可以录制你的动作捕捉
00:06:36动画,并导出为 JSON 或生物视觉动作捕捉文件,然后在
00:06:44像 Blender 这样的软件中打开,并将动画重定向到你自己的自定义角色身上。如你所见,
00:06:49它还不完美。动作不够精细或精确。所以这仍然是一个非常
00:06:56进行中的工作。但能用新的 LiteRT.js 在短短 10 分钟内做出这个初始版本,真是太酷了。
00:07:01好了,朋友们,这就是 LiteRT.js 的简介。看到 WebAssembly
00:07:08在浏览器中运行复杂应用程序的能力方面推动了多远,真是令人惊叹。
00:07:14这个新的 LiteRT.js 库确实证明了,有时 JavaScript
00:07:21确实会成为实现近乎原生性能速度的瓶颈。我对这个库印象非常深刻,
00:07:27迫不及待想在 LiteRT.js 今年晚些时候最终发布时试用它。你对
00:07:35LiteRT.js 有什么看法?你试用过了吗?你会使用它吗?请在下方的评论区告诉我们。朋友们,
00:07:40如果你喜欢这类技术解析,请点击视频下方的点赞按钮告诉我。
00:07:45也别忘了订阅我们的频道。这里是 BetterStack 的 Andres,
00:07:50我们下个视频再见。

핵심 요약

LiteRT.js 通过将原生 AI 推理运行时编译为 WebAssembly,使浏览器机器学习性能显著提升,并在特定场景中实现比传统 TensorFlow.js 快达 60 倍的运行速度。

하이라이트

  • LiteRT.js 通过 WebAssembly 和原生运行引擎替代了基于 JavaScript 的 TensorFlow.js 内核,消除了性能瓶颈。

  • 在 M4 芯片的 MacBook Pro 上,LiteRT.js 的推理速度在 CPU 和 GPU 上比其他 Web 运行时快三倍。

  • 针对特定工作负载,利用 GPU 或 NPU 代替 CPU 进行推理可实现 5 倍至 60 倍的性能提升。

  • LiteRT.js 支持现有的 .tflite 模型文件,并提供 LiteRT Torch 将 PyTorch 模型直接转换为 .tflite 格式。

  • 在实际的 3D 动作捕捉测试中,WebGPU 版本的帧率从 CPU 的 38 FPS 提升至 120 FPS,推理时间从 23.3 毫秒缩短至 8.4 毫秒。

  • 未来发布的 LiteRT.LM.js 将实现浏览器本地的大语言模型推理功能。

타임라인

LiteRT.js 的架构优势

  • LiteRT.js 是 LiteRT 的 JavaScript 绑定,通过 WebAssembly 在浏览器中实现原生级推理。
  • TensorFlow.js 受限于 JavaScript 内核,而 LiteRT.js 直接运行经优化的原生引擎。
  • 该库通过 XNNPack 支持 CPU 多线程,通过 WebGPU 利用原生 GPU 内核,并实验性支持 WebNN 硬件加速。

LiteRT.js 不再作为 Web 抽象层运行,而是将安卓和 iOS 上久经考验的运行时引擎直接引入浏览器。CPU 层级利用 XNNPack 库实现多线程处理,GPU 层级通过 WebGPU 绕过 JavaScript 编排任务。这种后端架构允许模型在不同硬件上发挥最优性能,避免了旧有库在性能上的滞后。

模型兼容性与应用场景

  • 现有 TensorFlow Lite 和 PyTorch 模型可通过工具链直接移植到 LiteRT.js。
  • 客户端支持实时 YOLO 物体检测、单目深度估计及图像超分辨率处理。
  • LiteRT.LM.js 将在后续版本中支持本地浏览器大语言模型推理。

开发者可以使用现有的 AI Edge 量化工具缩小模型体积,无需重写架构即可将遗留工作流迁移至新环境。目前已实现的客户端演示包括实时 3D 点云生成和图像增强,且无需任何后端服务器或 API 支持,所有计算均在用户浏览器中离线完成。

动作捕捉应用实测

  • 使用 BlazePose 模型在浏览器中实现 33 关键点实时姿态估计。
  • WebGPU 模式相较于 CPU 模式实现了 3 倍的帧率提升。
  • 录制的动作捕捉数据支持导出为 JSON 或生物视觉格式以供 Blender 使用。

通过使用 BlazePose 模型驱动 3D 角色,该测试显示从 CPU 切换至 WebGPU 后,推理延迟显著降低,帧率从 38 FPS 飙升至 120 FPS。尽管当前动作捕捉精度仍有待提升,但该运行时库证明了在浏览器中处理复杂实时应用的巨大潜力,且大幅缓解了 Web 端机器学习的滞后问题。

커뮤니티 글

모든 글 보기