为什么不是Python?
当今的LLM应用程序,包括推理应用程序和代理,大多是用 Python 编写的。但这种情况即将改变。对于新一波的开发人员来说,Python 实在是太慢、太臃肿,而且要命的是太笨拙了。事实上, LLVM、Clang 和 Swift 的发明者Chris Lattner已经证明 Python 比编译语言慢 35,000 倍——这就是他发明 Mojo 作为Python 替代品的原因。
Chris Lattner 表示,编译语言可能比 Python 快 35,000 倍。
这迫使开发人员将越来越多的应用程序逻辑推送到本机编译的代码中,例如 C、C++ 和 Rust。例如,非常流行的项目,如llama.cpp、llama.cpp和llama2.c,都是以Python 依赖编写的。
格雷格·布罗克曼 (Greg Brockman) 是 OpenAI 的联合创始人兼总裁。他也认为 Python 太慢了
这反过来又会降低 Python 开发人员的体验。事实上,管理云部署的 Python 安装已成为一项重大挑战。
Chris Albon 是维基媒体机器学习总监。即使是他也很难理解“现代”Python
换句话说,Python 不仅非常慢,而且很难用于开发 LLM 应用程序。
Python 面临的挑战为高性能编译语言创造了机会。随着 C 和 C++ 在一般开发者社区中逐渐被 Rust 取代,Elon Musk 指出 Rust 可能成为 AGI 的语言。
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。
- 张量层: GPU 密集型任务,通过 WasmEdge 的 WASI-NN 插件从 Wasm 传递到本机张量库,例如 llama.cpp、PyTorch 和 Tensorflow。
结论
Rust 和 Wasm 可能是当今 Python 的高性能且对开发人员友好的替代品。
- 它们与底层 GPU 张量库集成得更好,这些库也是用 C/C++/Rust 编写的。
- 它们在实现特定于应用程序的预处理和后处理数据功能(这是推理工作负载的大部分)方面更加高效。
- 它们可以更有效地执行LLM 代理所需的网络密集型和长时间运行的任务。
- 它们的容器映像大小比 Python 映像小得多(几 MB 与数百 MB)。
- 由于软件供应链有限且攻击面减少,它们比 Python 容器更安全。
- 它们比 Python 程序更容易安装和管理依赖项。