Python 失宠!Hugging Face 用 Rust 新写了一个 ML 框架,现已低调开源

作者 | 褚杏娟
近期,Hugging Face 低调开源了一个重磅 ML 框架:Candle 。Candle 一改机器学习惯用 Python/ target=_blank class=infotextkey>Python 的做法,而是 Rust 编写,重点关注性能(包括 GPU 支持)和易用性 。
根据 Hugging Face 的介绍,Candle 的核心目标是让 Serverless 推理成为可能 。像 PyTorch 这样的完整机器学习框架非常大,这使得在集群上创建实例的速度很慢 。Candle 允许部署轻量级二进制文件 。另外,Candle 可以让用户从生产工作负载中删除 Python 。Python 开销会严重影响性能,而 GIL 是众所周知的令人头疼的问题 。
Rust 真的可以吗?
Pytorch 框架是用 Python 编写的,API 也是基于 Python 的,这让用户上手开发会非常快 。另外,Python 本身就是一种简洁而易于学习的编程语言,很适合初学者和专业开发者使用 。
但基于 Python 的 Pytorch 框架问题也很明显 。相对于一些静态图框架(如 TensorFlow),Python 在某些情况下可能会导致性能问题 。Python 的全局解释器锁(GIL)可能会在多线程的情况下影响性能,尤其是在涉及 CPU 密集型任务时 。Python 的解释性质还可能会引入一些运行时开销 。另外,将基于 Python 的 PyTorch 模型部署到生产环境中可能需要一些额外的步骤,不如其他编译型语言那么方便 。
显然,Hugging Face 一直在寻找解决办法,它给出的答案是用时下最快的语言 Rust 重写一个 ML 框架 。“最酷的是,这是来自 Hugging Face 的,不仅仅是某人的爱好项目 。”有网友赞叹道 。实际上,许多 HF 生态系统已经使用 Rust,例如 safetensors、tokenizer 。
不过,Rust 的难度也让一些开发者望而却步,“编写 Rust 是一件艰难的事情,你必须跳来跳去,花更多的时间思考编程语言的抽象,而不是思考要解决的问题 。所以,我现在还不着急重写任何 Python 的东西 。”
开发者“fooblaster”指出,Pytorch 部署模型有多个生产路径无需 Python 解释器,如 torch 和 libtorch,或是更烦人的路径如 onnx export 和 onnx runtime,所以不需要 Rust 来解决这个问题 。另外很人知道,现在可以使用 C++ 编写 Torch 训练代码,并与推理和训练共享一种通用语言 。
对此,开发者“malcolmgreaves”表示,这些是使模型推理独立于 Python 的伟大技术 。然而,总是有大量的预处理、后处理或其他业务逻辑需要围绕模型推理 。这种事情需要在通用编程语言中完成,因此 Python 经常被使用(因为支持模型的代码通常是由同一个人编写的,并且这些代码很可能是 Python,因为您的模型训练和 eval 代码很可能也是 Python) 。这就是非 Python PL(如 Rust)可以在简化生产部署 / 维护以及具有真正高效的生产推理方面发挥巨大作用的地方 。
当然,也有开发者为 Python 打抱不平 。
“任何编程语言在生产环境中都可能是一种痛苦 。Python 的缺点之一也是它的优点之一 。使用 Python 或 JAVA 等‘混乱’语言很容易陷入糟糕的生产环境,因此避免这些痛点的工具已经非常成熟 。有了这些,Python 在生产中就会变得很棒 。”开发者“devjab”进一步表示,“是的,这将要求您的组织做出一些严肃的 CI 文化决策并强制执行 。但问题是,虽然使用某些编程语言可以不必如此,但当企业达到一定规模时,总是会需要它们 。因此,更早建立这个流程就会容易得多,而且如果您认真使用 Python,早就会这样做了 。我认为,如果在生产环境中工作很痛苦,那么问题不在于技术,而在于流程 。”
【Python 失宠!Hugging Face 用 Rust 新写了一个 ML 框架,现已低调开源】实际上,业内一直在努力解决 Python 带来的问题 。
5 月份,LLVM 和 Swift 编程语言联合创始人 Chris Lattner 创办的新公司 Modular AI 发布了一个名为 Mojo 的新编程语言 。Mojo 将 Python 特性与 C、C++ 和 CUDA 的系统编程功能结合了起来,并通过其所谓“极限加速”与其他 Python 速度增强方案区分了开来 。据悉,凭借着硬件加速,Mojo 在运行 Mandelbrot 等数字算法时比原始 Python 快上 3.5 万倍 。
另一方面,Python 自身也在做改进 。最近,Python 终于宣布要删 GIL,Python 默认版本将逐渐过渡到无 GIL 版本 。这一决定能否巩固其在机器学习领域的地位,也需要时间验证 。
与 PyTorch 对比
据悉,当前 Candle 已经支持如今的前沿模型,像 Llama2 。经过改写的模型,比如 Llama2 能够方便、快速的运行在容器环境,甚至可以运行在浏览器中 。Candle 结构包括: