欢迎收听 Rust 视界,本期给大家带来 《Rust 语言与 AI 生态概要》
Rust 在 AI/ML 领域的定位和优势
- Rust 是一种底层编程语言,注重性能、可靠性和生产力。它被认为在 AI/ML Ops 领域是一个“游戏规则改变者”(game-changer)。
- 与 Python 等依赖垃圾回收的语言不同,Rust 的所有权模型(ownership model)确保了内存安全,同时避免了垃圾回收带来的性能开销。这对于处理大规模数据集和需要高效内存使用的 ML Ops 至关重要。
- Rust 提供接近 C/C++ 的性能,使其非常适合计算密集型任务,例如处理大规模数据集、训练深度学习模型和运行实时推理管道。在 ML Ops 工作流中,Rust 可以显著减少延迟并提高吞吐量。
- Rust 内置的并发和并行支持(如
tokio用于异步编程)确保了安全高效的并行处理。这有助于处理现代 AI 系统中高度并行的工作负载,例如同时运行多个训练实验或管理实时数据流进行推理。对于 CPU 密集型 AI 任务,Rayon等库可以帮助将代码分布到 CPU 核心的线程上。 - Rust 具有跨平台兼容性,可以编译到各种平台,使其适合在云、本地或边缘环境中部署 ML Ops 管道。
- Rust 可以编译成独立的二进制文件,这使得应用程序的分发和远程部署更加便捷且不易出错。对于基于 AI 的终端用户批量市场应用,这一点比 Python 等解释型语言更有优势,因为 Python 很难直接交付一个可以在任何系统上运行的二进制文件。
- 在某些情况下,使用 Rust 进行推理(运行模型)比 Python 更节省内存,因为可以避免数 GB 的 Python 依赖。模型权重本质上是一堆数字,推理不一定需要 Python。
与 Python 和 C++ 的对比
- Python:AI 领域的大部分库都在 Python 中,这是 Python 目前的主要优势。
许多 AI 训练代码只是调用底层的 C/C++ 高性能库的大循环,Python 只是用于调用这些库的“胶水代码”。
Python 的 GIL(Global Interpreter Lock)限制了单个 Python 进程利用多核 CPU 的能力。Rust 没有 GIL。
Python 在处理阻塞数据任务(如从磁盘加载大型模型)时效率不如 Go。
Python 的生态系统非常成熟,尤其是在 AI 领域,但性能较低,内存安全性依赖垃圾回收,并发和并行支持有限。
虽然 Rust 的 AI/ML 库生态系统仍在发展,但PyO3和maturin等工具使得 Rust 代码可以与基于 Python 的 AI 框架无缝集成。 - C++:AI 领域的底层高性能库(如 TensorFlow, Nvidia 的库)通常是用 C/C++ 编写的。所有 AI 工作都由 C/C++ 完成,其他语言只是封装。
一项性能评估研究显示,C++ 在矩阵乘法方面明显更快。然而,Rust 在归并排序方面表现更优。文件操作方面结果混杂,C++ 在读取小文件时更快,Rust 在写入大文件时有优势。总体而言,Rust 和 C++ 在这些实验中的整体性能相似。
C++ 拥有更长的历史和更广泛的行业应用及成熟的生态系统。
Rust 的内存安全特性可以增强关键系统的安全性和可靠性,这是 C++ 不具备的优势。
对于某些任务,如游戏 modding 或服务器仿真中的复杂操作,一些用户发现 Rust 比 C++ 和 C 更容易处理,尤其是在保证非 unsafe 部分可靠安全方面。
Rust 被一些人认为是“C++ 的重建版本,包含了我们现在已知的所有东西”。
Rust 中的 AI/ML 相关库和工具
来源提到了多个用于 AI/ML/NLP/CV 的 Rust 库:
- llm-chain: 用于自然语言处理。Shuttle 的教程使用它构建了一个 CLI 应用来分析 CSV 数据。
- llm-chain-openai: 集成 OpenAI API 的
llm-chain扩展。 - candle: Hugging Face 开发的极简 ML 框架。它可以用作替代
tch-rs的选项,用于在 CPU 核心而非 GPU 上生成 embeddings。TheBloke 在其模型文档中也链接了 Candle。被用于 LLM 的推理和生产代码。也被认为是深度学习库。 - burn: 一个有前途的深度学习库,支持不同的后端。它被描述为“下一代深度学习框架,不牺牲灵活性、效率和可移植性”。它完全用 Rust 编写,提供零成本抽象来轻松创建神经网络模块。虽然生态系统不如 Python 完整,但它提供了构建深度学习模型的工具。
- rust-bert: 适用于 NLP 任务的库,提供预训练模型,如文本分类和情感分析。它可以执行生成 sentence embeddings 等步骤,但不支持向量存储和搜索。
- tch-rs: 允许使用 Python 的 PyTorch 库。可以用于直接处理预训练模型,加载模型和生成 embeddings。它也是一个深度学习库。
- tokenizers: 一个用于将句子分解成 token 的库,这是生成 sentence embeddings 的第一步。
- Milvus: 一个用于存储 embeddings 的向量数据库。
- Tantivy: 一个完全用 Rust 编写的、用于存储 embeddings 的向量数据库,速度极快且经过优化。
- openai-api-rs 和 rs-openai: 社区构建的用于与 OpenAI API 交互的库。
- Linfa: 一个通用的机器学习库,灵感来自 scikit-learn。它提供了分类、回归和聚类算法,可以构建端到端的机器学习管道。
- SmartCore: 被宣传为 Rust 中“最先进的机器学习库”。它提供了多种类型的机器学习算法,包括监督学习和无监督学习。
- opencv-rust: Rust 绑定,允许 Rust 程序员使用 OpenCV 计算机视觉库。
- dfdx: 用于 AI 的 Rust 库,可以进行编译时张量形状检查,帮助避免运行时形状错误。
- DataFusion: 一个基于 Rust 的数据处理库,为构建可扩展 AI 管道进行了优化。
- Polars: 一个用 Rust 构建的高性能 DataFrame 库,在许多场景下性能优于 Python 的 Pandas。
- Tract: 一个用于在边缘设备上运行机器学习模型的 Rust 库,支持 ONNX 和 TensorFlow Lite 等框架。
- Kube-RS: Kubernetes 的 Rust 客户端,支持以编程方式管理容器化的 ML 工作流。
- Crossplane: 使用 Rust 支持的基础设施管理功能扩展 Kubernetes。
- langchaingo: 虽然是 Go 库,但来源中提及了它用于 RAG (Retrieval Augmented Generation),这说明 RAG 是 AI 领域的一个相关概念。
Rust 在 AI/ML 中的应用场景
- 模型推理 (Inference):运行模型进行实际工作。Candle 库被用于 LLM 的推理和生产代码。Rust 的高性能和编译到 WASM 的能力使其适合推理,尤其是在需要分发独立可执行文件或在浏览器/边缘计算环境运行模型时。
- 数据预处理 (Data Preparation):在训练开始前对数据进行转换和格式化。Rust 在数据预处理方面表现出色,特别是在多线程和批处理管道中,能够极大地提高效率。一位用户将 Python 中 40 分钟的数据处理过程用 Rust 重写后缩短到 2-3 分钟。
- ML Ops:管理支持 AI/ML 技术的基础设施。Rust 的性能、内存安全和并发性使其非常适合 ML Ops 领域,用于自动化、部署和监控机器学习模型。关键领域包括 AI 管道、模型部署和推理、基础设施自动化。
- 边缘 AI (Edge AI):在资源受限的设备上部署 AI 模型。Rust 的性能和内存效率使其成为边缘计算的理想选择。Rust 可以编译到 WASM,在浏览器或 WASM "VMs" 中提供模型。
- WebAssembly (WASM):Rust 可以编译到 WASM,这使得在浏览器中提供模型成为可能。一些项目正在构建 AI WebAssembly 运行时。一项研究比较了 Rust 和 C 编译到 WebAssembly 时的性能。
- 与游戏引擎集成:一些开发者希望在 Rust 编写的 3D 引擎中驱动 AI。Rust 的系统级编程能力使其适合构建底层引擎。
- 构建桌面应用:结合 Tauri 等框架构建桌面应用,并将 Rust 用于后端 ML 任务。
- 科学计算和数值编程:Rust 被认为有望成为科学计算和数值编程的良好选择,介于 C/C++ 和 Python 之间。虽然语法可能略显繁琐(例如需要
clone()调用)且第三方库不如 Python 和 C++ 丰富,但像nalgebra这样的库正在开发中。Rust 的生命周期系统有助于避免在使用矩阵视图时出现的 bug。
采用 Rust 进行 AI/ML 的挑战
- 学习曲线陡峭:Rust 的严格编译器和所有权规则对新手来说可能具有挑战性。许多学习 Rust 的人已经有其他语言的经验。
- 库生态系统不够成熟:尽管发展迅速,但 Rust 在 AI 和 ML 领域的库支持目前仍不如 Python 丰富。
- 与现有系统的集成:大多数现有的 AI 工作流基于 Python 构建,将 Rust 集成进去需要额外的努力。
社区看法与未来展望
- 社区对 Rust 在 AI 领域的潜力持积极态度。许多人认为 Rust 是 AI 的未来。
- Rust 的采用率在增长,包括微软、亚马逊和谷歌等大型科技公司。
- Rust Trends 等出版物持续关注 Rust 在 AI 领域的进展,例如 Hugging Face 的 Candle,以及 Rust 如何与 AI 协同工作,例如 Grok 的 AI 解决方案。
- Rust Trends 中也有关于“使用 Rust 嵌入 AI”的内容。
