以及为什么 WasmEdge 是 AGI 采用 Rust的关键路径!
为什么不选 Python?
今天的 LLM 应用程序,包括推理应用程序和代理(Agent),大多用 Python 编写。但这即将发生变化。Python 对于新一波开发者来说简直太慢、太臃肿且矛盾颇多不够轻便。实际上, Chris Lattner, LLVM、Clang和 Swift 的发明者展示出 Python 可能比编译型语言慢35000倍------这是他发明 Mojo 语言的原因,想要替代 Python 。
(根据 Chris Lattner 的说法,编译型语言可以比 Python 快35000倍。)
这迫使开发者将越来越多的应用逻辑转化为原生编译代码 C 、C++ 和 Rust 。例如,非常热门的项目 llama.cpp、whisper.cpp和 llama2.c 都是 C 和 C++ 写的,没有 Python 依赖。
(OpenAI 联合创始人兼总裁 Greg Brockman 也认为 Python 太慢了。https://twitter.com/gdb/status/1676726449934331904)
这反过来降低了 Python 开发者的体验。事实上,管理云上部署的 Python 安装已成为一个重大挑战。
(Wikimedia 的机器学习负责人 Chris Albon 甚至说自己很难弄清"现代"Python。 https://twitter.com/santiviquez/status/1676677829751177219)
换句话说,Python 不仅非常慢,而且用来开发 LLM 应用程序的时候也非常难用。
Rust!
Python 的挑战为高性能编译语言创造了机会。随着 Rust 在开发者社区对 C 和 C++ 攻城略地,Elon Musk 指出 Rust 可能是 AGI 时代的语言。
(好好消化一下这个事实吧!(双关:让水槽进来) https://twitter.com/elonmusk/status/1649603943033450496)
Rust 连续7年被 StackOverflow 评为最受开发者欢迎的编程语言,其市场份额持续稳步增长。
Rust + Wasm 两全其美
然而,将 Rust 直接编译成原生机器代码也有其他问题。
- 安全性。原生二进制文件可能会使整个系统崩溃。
- 可移植性。原生二进制文件特定于底层操作系统和硬件。
- 性能。 由于安全性和可移植性要求,通常需要在 Linux 容器中运行原生二进制文件。 此类容器为程序添加了巨大的启动和运行时开销,从而显著降低了速度。
Wasm 作为 Rust 应用的领先安全运行时环境出现,想要解决这些问题。 有了云原生优化的 Wasm 运行时 WasmEdge,开发者现在可以在 LLM 应用程序栈的每一层使用高性能 Rust,作为 Python 的高性能替代方案。
使用 Rust + Wasm 取代 Python 以提高性能,减少占用空间并改善安全性。
- 代理层 :网络密集型任务,用于接收网络事件、连接数据库和调用其他 Web 服务。Rust 和 WasmEdge 提供异步和非阻塞 I/O,以实现高密度和高性能的代理应用。 示例:flows.network。
- 推理层 :CPU 密集型任务,用于将数据(如单词和句子)预处理为数字,并将数字后处理为句子或结构化的 JSON 数据。这些函数可以用 Rust 编写以实现最佳性能,并在 WasmEdge 中运行以实现安全性和可移植性。 示例:mediapipe-rs。
- 张量层:从 Wasm 将 GPU 密集型任务通过 WasmEdge 的 WASI-NN 插件传递给原生张量库(如llama.cpp、PyTorch 和 Tensorflow)。
结论
Rust 和 Wasm 可以成为 Python 的高性能、开发者友好的替代选择。
- 二者与底层 GPU 张量库(也是用 C/C++/Rust 编写的)有更好地集成。
- 二者在实现应用程序特定的预处理和后处理数据功能方面更高效 ,这也是推理工作量的绝大部分。
- 二者在实现LLM 代理 所需要的网络密集型和长时间运行的任务方面更高效。
- 与 Python 镜像相比,它们的容器镜像大小要小得多(几 MB vs 数百 MB)。
- 由于软件供应链有限和攻击面暴露较小,二者比 Python 容器更安全。
- 与 Python 程序相比,二者更容易安装和管理依赖项。
参考资料?
"顶端仍有足够的空间:摩尔定律之后,什么将推动计算机性能?" MIT的Leiserson和Thompson等人,《科学》,2020年,第368卷,第6495期。 它示范了Python可能比优化的C程序慢62000多倍。 作者预测,从 Python 向编译语言迁移软件将引发新的计算机革命。
"用于 Serverless 函数即服务的轻量级设计" Long, Tai, Hsieh和Yuan,《IEEE软件》,2021年,第38卷,第1期,第75-80页。 它证明了 AOT 优化的 Wasm 应用程序在启动和运行时都可以大大超过 Linux 容器应用程序。
WasmEdge WASI-NN 插件允许 WasmEdge 中的 Rust 程序运行 Pytorch 和 Tensorflow 推理应用程序。
mediapipe-rs 库是一个 Rust 库,供开发者使用 Google 的 mediapipe 系列 AI 模型创建应用程序。它编译为 Wasm 并在 WasmEdge 中运行。
"在小小的 WasmEdge中运行小小的 llama2.c 模型" 作者 Yuan, Medium, 2023。它展示了如何在 WasmEdge 中运行 llama2 模型的一个完整推理应用程序。
flow.network 是一个基于 WasmEdge 构建的 serverless LLM agents (代理)平台。