近期,Hugging Face 低調(diào)開源了一個(gè)重磅 ML 框架:Candle。Candle 一改機(jī)器學(xué)習(xí)慣用 Python 的做法,而是 Rust 編寫,重點(diǎn)關(guān)注性能(包括 GPU 支持)和易用性。
根據(jù) Hugging Face 的介紹,Candle 的核心目標(biāo)是讓 Serverless 推理成為可能。像 PyTorch 這樣的完整機(jī)器學(xué)習(xí)框架非常大,這使得在集群上創(chuàng)建實(shí)例的速度很慢。Candle 允許部署輕量級(jí)二進(jìn)制文件。另外,Candle 可以讓用戶從生產(chǎn)工作負(fù)載中刪除 Python。Python 開銷會(huì)嚴(yán)重影響性能,而 GIL 是眾所周知的令人頭疼的問(wèn)題。
Rust 真的可以嗎?
Pytorch 框架是用 Python 編寫的,API 也是基于 Python 的,這讓用戶上手開發(fā)會(huì)非??臁A硗?,Python 本身就是一種簡(jiǎn)潔而易于學(xué)習(xí)的編程語(yǔ)言,很適合初學(xué)者和專業(yè)開發(fā)者使用。
但基于 Python 的 Pytorch 框架問(wèn)題也很明顯。相對(duì)于一些靜態(tài)圖框架(如 TensorFlow),Python 在某些情況下可能會(huì)導(dǎo)致性能問(wèn)題。Python 的全局解釋器鎖(GIL)可能會(huì)在多線程的情況下影響性能,尤其是在涉及 CPU 密集型任務(wù)時(shí)。Python 的解釋性質(zhì)還可能會(huì)引入一些運(yùn)行時(shí)開銷。另外,將基于 Python 的 PyTorch 模型部署到生產(chǎn)環(huán)境中可能需要一些額外的步驟,不如其他編譯型語(yǔ)言那么方便。
顯然,Hugging Face 一直在尋找解決辦法,它給出的答案是用時(shí)下最快的語(yǔ)言 Rust 重寫一個(gè) ML 框架?!白羁岬氖牵@是來(lái)自 Hugging Face 的,不僅僅是某人的愛好項(xiàng)目?!庇芯W(wǎng)友贊嘆道。實(shí)際上,許多 HF 生態(tài)系統(tǒng)已經(jīng)使用 Rust,例如 safetensors、tokenizer。
不過(guò),Rust 的難度也讓一些開發(fā)者望而卻步,“編寫 Rust 是一件艱難的事情,你必須跳來(lái)跳去,花更多的時(shí)間思考編程語(yǔ)言的抽象,而不是思考要解決的問(wèn)題。所以,我現(xiàn)在還不著急重寫任何 Python 的東西?!?/p>
開發(fā)者“fooblaster”指出,Pytorch 部署模型有多個(gè)生產(chǎn)路徑無(wú)需 Python 解釋器,如 torchscript 和 libtorch,或是更煩人的路徑如 onnx export 和 onnx runtime,所以不需要 Rust 來(lái)解決這個(gè)問(wèn)題。另外很人知道,現(xiàn)在可以使用 C++ 編寫 Torch 訓(xùn)練代碼,并與推理和訓(xùn)練共享一種通用語(yǔ)言。
對(duì)此,開發(fā)者“malcolmgreaves”表示,這些是使模型推理獨(dú)立于 Python 的偉大技術(shù)。然而,總是有大量的預(yù)處理、后處理或其他業(yè)務(wù)邏輯需要圍繞模型推理。這種事情需要在通用編程語(yǔ)言中完成,因此 Python 經(jīng)常被使用(因?yàn)橹С帜P偷拇a通常是由同一個(gè)人編寫的,并且這些代碼很可能是 Python,因?yàn)槟哪P陀?xùn)練和 eval 代碼很可能也是 Python)。這就是非 Python PL(如 Rust)可以在簡(jiǎn)化生產(chǎn)部署 / 維護(hù)以及具有真正高效的生產(chǎn)推理方面發(fā)揮巨大作用的地方。
當(dāng)然,也有開發(fā)者為 Python 打抱不平。
“任何編程語(yǔ)言在生產(chǎn)環(huán)境中都可能是一種痛苦。Python 的缺點(diǎn)之一也是它的優(yōu)點(diǎn)之一。使用 Python 或 JavaScript 等‘混亂’語(yǔ)言很容易陷入糟糕的生產(chǎn)環(huán)境,因此避免這些痛點(diǎn)的工具已經(jīng)非常成熟。有了這些,Python 在生產(chǎn)中就會(huì)變得很棒?!遍_發(fā)者“devjab”進(jìn)一步表示,“是的,這將要求您的組織做出一些嚴(yán)肅的 CI 文化決策并強(qiáng)制執(zhí)行。但問(wèn)題是,雖然使用某些編程語(yǔ)言可以不必如此,但當(dāng)企業(yè)達(dá)到一定規(guī)模時(shí),總是會(huì)需要它們。因此,更早建立這個(gè)流程就會(huì)容易得多,而且如果您認(rèn)真使用 Python,早就會(huì)這樣做了。我認(rèn)為,如果在生產(chǎn)環(huán)境中工作很痛苦,那么問(wèn)題不在于技術(shù),而在于流程?!?/p>
實(shí)際上,業(yè)內(nèi)一直在努力解決 Python 帶來(lái)的問(wèn)題。
5 月份,LLVM 和 Swift 編程語(yǔ)言聯(lián)合創(chuàng)始人 Chris Lattner 創(chuàng)辦的新公司 Modular AI 發(fā)布了一個(gè)名為 Mojo 的新編程語(yǔ)言。Mojo 將 Python 特性與 C、C++ 和 CUDA 的系統(tǒng)編程功能結(jié)合了起來(lái),并通過(guò)其所謂“極限加速”與其他 Python 速度增強(qiáng)方案區(qū)分了開來(lái)。據(jù)悉,憑借著硬件加速,Mojo 在運(yùn)行 Mandelbrot 等數(shù)字算法時(shí)比原始 Python 快上 3.5 萬(wàn)倍。
另一方面,Python 自身也在做改進(jìn)。最近,Python 終于宣布要?jiǎng)h GIL,Python 默認(rèn)版本將逐漸過(guò)渡到無(wú) GIL 版本。這一決定能否鞏固其在機(jī)器學(xué)習(xí)領(lǐng)域的地位,也需要時(shí)間驗(yàn)證。
與 PyTorch 對(duì)比
據(jù)悉,當(dāng)前 Candle 已經(jīng)支持如今的前沿模型,像 Llama2。經(jīng)過(guò)改寫的模型,比如 Llama2 能夠方便、快速的運(yùn)行在容器環(huán)境,甚至可以運(yùn)行在瀏覽器中。Candle 結(jié)構(gòu)包括:
Candle-core:核心操作、設(shè)備和 Tensor 結(jié)構(gòu)定義。
Candle-nn:構(gòu)建真實(shí)模型的工具。
Candle-examples:在實(shí)際設(shè)置中使用庫(kù)的示例。
Candle-kernels:CUDA 自定義內(nèi)核;
Candle-datasets:數(shù)據(jù)集和數(shù)據(jù)加載器。
Candle-Transformers:與 Transformers 相關(guān)的實(shí)用程序。
Candle-flash-attn:Flash attention v2 層。
Pytorch 和 Candle 對(duì)比
該項(xiàng)目正在處于快速迭代過(guò)程中,更新非常頻繁,很多功能在不斷開發(fā)中,目前包含如下功能和特點(diǎn):
語(yǔ)法簡(jiǎn)單, 風(fēng)格與 PyTorch 相似。
CPU 和 Cuda Backend:m1、f16、bf16。
支持 Serverless(CPU)、小型和快速部署
支持 WASM,可在瀏覽器中運(yùn)行模型。
模型訓(xùn)練
使用 NCCL 進(jìn)行分布式計(jì)算。
開箱即用的模型:Llama、Whisper、Falcon、StarCoder...
嵌入用戶定義的操作 / 內(nèi)核,如 flash-attention v2。
對(duì)于 Hugging Face 的這一新 ML 框架,大家有什么感想或使用感受?歡迎在評(píng)論區(qū)分享!
-
框架
+關(guān)注
關(guān)注
0文章
403瀏覽量
17515 -
pytorch
+關(guān)注
關(guān)注
2文章
808瀏覽量
13291 -
Rust
+關(guān)注
關(guān)注
1文章
229瀏覽量
6630
原文標(biāo)題:Python 失寵!Hugging Face 用 Rust 新寫了一個(gè) ML框架,現(xiàn)已低調(diào)開源
文章出處:【微信號(hào):AI前線,微信公眾號(hào):AI前線】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論