PyTorch,你是不是想用Julia?不,我們還想要Python的生態(tài)
「人生苦短,我用 Python?!惯@是 Python 開(kāi)發(fā)領(lǐng)域廣泛流傳的一句話。在過(guò)去的幾年中,Python 也的確憑借其在易用性、生態(tài)等方面的優(yōu)勢(shì)一路高歌猛進(jìn),在很多編程語(yǔ)言排行榜中穩(wěn)居前三。
但伴隨著 Julia 等新勢(shì)力的崛起,這種局面正在發(fā)生變化。在前段時(shí)間出爐的「Stack Overflow 2021 全球開(kāi)發(fā)者調(diào)查報(bào)告」中,Python 受開(kāi)發(fā)者喜愛(ài)程度僅排第六,而 Julia 則排在了第五。雖然生態(tài)等方面依然存在不足,但毋庸置疑,Julia 已經(jīng)成為 Python 有力的競(jìng)爭(zhēng)對(duì)手,其競(jìng)爭(zhēng)優(yōu)勢(shì)包括速度快、簡(jiǎn)潔等。在 Julia 中,我們可以用類似 Python 的優(yōu)美語(yǔ)句獲得類似 C 的性能。
最近,這種趨勢(shì)甚至影響到了主流深度學(xué)習(xí)框架對(duì)編程語(yǔ)言的選擇,比如 PyTorch:
「PyTorch 將走向何方?為什么它越來(lái)越像 Julia,但又不完全像?」這是 PyTorch 核心開(kāi)發(fā)人員 Edward Z. Yang 參與討論的一個(gè)問(wèn)題。在這個(gè)問(wèn)題下方,他回答道:
我們?cè)?jīng)開(kāi)玩笑地說(shuō):下一個(gè)版本的 PyTorch 是用 Julia 編寫(xiě)的。之所以廢棄了 Lua Torch 而主要使用 Python 編寫(xiě)的 PyTorch,一個(gè)重要的原因是想利用 Python 龐大的生態(tài)系統(tǒng)。直到今天,都很難有一種新語(yǔ)言能夠克服 Python 的網(wǎng)絡(luò)效應(yīng)。
我們?cè)?jīng)開(kāi)玩笑地說(shuō):下一個(gè)版本的 PyTorch 是用 Julia 編寫(xiě)的。之所以廢棄了 Lua Torch 而主要使用 Python 編寫(xiě)的 PyTorch,一個(gè)重要的原因是想利用 Python 龐大的生態(tài)系統(tǒng)。直到今天,都很難有一種新語(yǔ)言能夠克服 Python 的網(wǎng)絡(luò)效應(yīng)。
然而,最近我一直在思考我們?cè)?PyTorch 中進(jìn)行的各種項(xiàng)目,包括:
這些項(xiàng)目都有一個(gè)共同點(diǎn):有些功能以前只能用 C++ 實(shí)現(xiàn),而現(xiàn)在 PyTorch 使得用 Python 完成這些功能成為可能,提升了 hackability,并讓開(kāi)發(fā)變得更加簡(jiǎn)易。 PyTorch 以前主要是用 Python 編寫(xiě)的,后來(lái)我們將所有內(nèi)容都移到了 C++,以使其運(yùn)行得更快。因此,我們?cè)絹?lái)越多地處于這樣一種情況:我們想要擁有這塊蛋糕(hackability),同時(shí)吃掉它(性能)。 這與 Julia 講了近十年的故事不謀而合。Julia 的開(kāi)發(fā)團(tuán)隊(duì)一直認(rèn)為: 一種語(yǔ)言必須能被編譯為高效的代碼,Julia 語(yǔ)言添加了一些限制(類型穩(wěn)定性),以確保這一點(diǎn);一種語(yǔ)言必須允許后續(xù)可擴(kuò)展(多重派發(fā),multiple dispatch),Julia 語(yǔ)言圍繞 JIT 編譯組織生態(tài)系統(tǒng)使這一點(diǎn)成為可能。 上述兩個(gè)特性的結(jié)合為用戶提供了一個(gè)兼具動(dòng)態(tài)語(yǔ)言靈活性(可擴(kuò)展性)和靜態(tài)語(yǔ)言性能(高效代碼)的系統(tǒng)。 實(shí)際上這也是 PyTorch 一直追求的。我們已經(jīng)從 Julia 語(yǔ)言中獲得了很多靈感,例如 ATEN 的作者 Zachary DeVito 將 PyTorch 調(diào)度器中多重派發(fā)的設(shè)計(jì)靈感歸功于 Julia。 總體來(lái)說(shuō),我認(rèn)為 Julia 可以作為一個(gè)非常強(qiáng)大的愿景,并且相比于 Julia,PyTorch 本身也有一些優(yōu)勢(shì)。例如 Julia 經(jīng)常稱用戶可以直接使用數(shù)學(xué)運(yùn)算編寫(xiě)循環(huán)并將其編譯為高效代碼,而我們不需要嘗試這樣做,因?yàn)槲覀兊膬?nèi)核非常復(fù)雜,在任何情況下都能實(shí)現(xiàn)最佳的低級(jí)別實(shí)現(xiàn)。 為什么不直接使用 Julia?因?yàn)槲覀兗认胍?Julia 的愿景,也想要 Python 強(qiáng)大的生態(tài)系統(tǒng)。這個(gè)方向具有巨大的潛力,但我們也有很多要做的工作和許多未解決的設(shè)計(jì)問(wèn)題。我對(duì)接下來(lái)的發(fā)展感到非常興奮。 |
從這份回答我們可以看出,PyTorch 逐漸靠近 Julia 已成定勢(shì),但鑒于 Python 在生態(tài)系統(tǒng)方面的絕對(duì)優(yōu)勢(shì),下一代 PyTorch 不太可能直接用 Julia 編寫(xiě)。
對(duì)于這一做法,有人表示非常不理解。ta 認(rèn)為,以 PyTorch 的生態(tài)號(hào)召力,如果下一版他們直接宣布用 Julia,那么生態(tài)問(wèn)題很快就會(huì)迎刃而解。
而且,長(zhǎng)遠(yuǎn)來(lái)看,轉(zhuǎn)向 Julia 似乎收益更高。
但也有人認(rèn)為,PyTorch 的這種做法其實(shí)是為用戶著想,即把麻煩留給自己,把簡(jiǎn)單留給用戶,這是一種非常值得肯定的態(tài)度。
如果你也是一位 PyTorch 用戶,你會(huì)贊成哪種做法呢?
參考鏈接:
- https://dev-discuss.pytorch.org/t/where-we-are-headed-and-why-it-looks-a-lot-like-julia-but-not-exactly-like-julia/276
- https://news.ycombinator.com/item?id=29354474
【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】