近期,Hugging Face 低調開源了一個重磅 ML 框架:Candle。Candle 一改機器學習慣用 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 的東西?!?/p>
開發者“fooblaster”指出,Pytorch 部署模型有多個生產路徑無需 Python 解釋器,如 torchscript 和 libtorch,或是更煩人的路徑如 onnx export 和 onnx runtime,所以不需要 Rust 來解決這個問題。另外很人知道,現在可以使用 C++ 編寫 Torch 訓練代碼,并與推理和訓練共享一種通用語言。
對此,開發者“malcolmgreaves”表示,這些是使模型推理獨立于 Python 的偉大技術。然而,總是有大量的預處理、后處理或其他業務邏輯需要圍繞模型推理。這種事情需要在通用編程語言中完成,因此 Python 經常被使用(因為支持模型的代碼通常是由同一個人編寫的,并且這些代碼很可能是 Python,因為您的模型訓練和 eval 代碼很可能也是 Python)。這就是非 Python PL(如 Rust)可以在簡化生產部署 / 維護以及具有真正高效的生產推理方面發揮巨大作用的地方。
當然,也有開發者為 Python 打抱不平。
“任何編程語言在生產環境中都可能是一種痛苦。Python 的缺點之一也是它的優點之一。使用 Python 或 JavaScript 等‘混亂’語言很容易陷入糟糕的生產環境,因此避免這些痛點的工具已經非常成熟。有了這些,Python 在生產中就會變得很棒。”開發者“devjab”進一步表示,“是的,這將要求您的組織做出一些嚴肅的 CI 文化決策并強制執行。但問題是,雖然使用某些編程語言可以不必如此,但當企業達到一定規模時,總是會需要它們。因此,更早建立這個流程就會容易得多,而且如果您認真使用 Python,早就會這樣做了。我認為,如果在生產環境中工作很痛苦,那么問題不在于技術,而在于流程?!?/p>
實際上,業內一直在努力解決 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 結構包括:
Candle-core:核心操作、設備和 Tensor 結構定義。
Candle-nn:構建真實模型的工具。
Candle-examples:在實際設置中使用庫的示例。
Candle-kernels:CUDA 自定義內核;
Candle-datasets:數據集和數據加載器。
Candle-Transformers:與 Transformers 相關的實用程序。
Candle-flash-attn:Flash attention v2 層。
Pytorch 和 Candle 對比
該項目正在處于快速迭代過程中,更新非常頻繁,很多功能在不斷開發中,目前包含如下功能和特點:
語法簡單, 風格與 PyTorch 相似。
CPU 和 Cuda Backend:m1、f16、bf16。
支持 Serverless(CPU)、小型和快速部署
支持 WASM,可在瀏覽器中運行模型。
模型訓練
使用 NCCL 進行分布式計算。
開箱即用的模型:Llama、Whisper、Falcon、StarCoder...
嵌入用戶定義的操作 / 內核,如 flash-attention v2。
對于 Hugging Face 的這一新 ML 框架,大家有什么感想或使用感受?歡迎在評論區分享!
-
框架
+關注
關注
0文章
399瀏覽量
17436 -
pytorch
+關注
關注
2文章
803瀏覽量
13151 -
Rust
+關注
關注
1文章
228瀏覽量
6574
原文標題:Python 失寵!Hugging Face 用 Rust 新寫了一個 ML框架,現已低調開源
文章出處:【微信號:AI前線,微信公眾號:AI前線】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論