周末的晚上,百無聊賴,于是我擺弄起 JetBrains 的 Projector。IntelliJ 是一款非常強(qiáng)大的 IDE,而 Projector 就是安裝在遠(yuǎn)程服務(wù)器上、能夠通過瀏覽器訪問的 IntelliJ。
我想試試看,如果將一些繁重的計(jì)算任務(wù)(比如訓(xùn)練和評(píng)估大型機(jī)器學(xué)習(xí)模型)從本地轉(zhuǎn)移到遠(yuǎn)程服務(wù)器上,會(huì)不會(huì)影響編程用戶的體驗(yàn)。
項(xiàng)目的設(shè)置非常容易,從點(diǎn)擊 AWS 上的“創(chuàng)建實(shí)例”,到我的 iPad Pro 上運(yùn)行一個(gè)成熟的 AI 項(xiàng)目,前后花了不到一個(gè)小時(shí)。
感覺一切都很神奇。
將開發(fā)環(huán)境從本地機(jī)器上移動(dòng)到遠(yuǎn)程服務(wù)器,這個(gè)概念大膽而新穎。這種方式可以有效地將工作流集中到大型服務(wù)器上。那么,此時(shí)的 localhost 是什么呢?
當(dāng)然,這個(gè)想法并不是 JetBrains 獨(dú)有的。微軟的 Visual Studio Code 也在朝著相同的方向發(fā)展,不僅已有了在線服務(wù),而且所有 GitHub 代碼庫現(xiàn)在都支持在線的 VSCode。Replit 之類的小公司也在嘗試將 IDE 轉(zhuǎn)變?yōu)槎嗳梭w驗(yàn)。
在自己的服務(wù)器上編程也不再意味著必須依賴本地設(shè)備了,因?yàn)檫@種方式本質(zhì)上是將編寫代碼的機(jī)器與實(shí)際運(yùn)行代碼的機(jī)器相分離。
這個(gè)想法打開了新的機(jī)遇與大門。
軟件與硬件的獨(dú)立
從軟件方面來說,完全遠(yuǎn)程的環(huán)境可以讓開發(fā)人員不再受雙啟動(dòng)、驅(qū)動(dòng)不兼容等問題的煩擾,開發(fā)環(huán)境就在 Ubuntu 服務(wù)器上,所有工具的使用都會(huì)變得更加容易。同時(shí),我還可以本地 macOS機(jī)器上保留 Lightroom、Cinema 4D 和 Photoshop。理論上你甚至可以將部分 Adobe CreativeCloud 打包成 Docker,但是否合法就未可知了(畢竟聽上去這種想法不太正常)。
更有趣的是硬件的獨(dú)立。將計(jì)算全權(quán)委托給專業(yè)的供應(yīng)商,我們就可以獲得巨大的靈活性,同時(shí)也不必再糾結(jié)一些權(quán)衡利弊,例如 CPU 與電池、硬盤與價(jià)格、電池與重量等。
我可以在小巧的 iPad 上寫代碼,配備 XHDR 顯示器,電池壽命更長(zhǎng),內(nèi)部驅(qū)動(dòng)器相對(duì)較小,同時(shí)我仍然在 Linux 環(huán)境中工作,不僅有 CUDA 驅(qū)動(dòng)程序,而且還可以訪問 Nvidia GPU 或 Google TPU。如果臨時(shí)需要更多 RAM 來訓(xùn)練大型模型,則可以擴(kuò)展我所消費(fèi)的服務(wù),完成之后再收縮。
因此,非常經(jīng)濟(jì)實(shí)惠。
如果我的遠(yuǎn)程實(shí)例24小時(shí)全年無休地運(yùn)行,則每月大約需要支付 35 美元。但是,我可以在周末(甚至晚上)關(guān)閉實(shí)例。這樣就可以節(jié)省35%~50%的成本。另一方面,成熟的MacBook Pro 以每月 50 美元的速度貶值,因此算下來成本反而增加了 40%~50%。這些節(jié)省下來的成本可以投資購(gòu)買屏幕更大、重量更輕、電池壽命更長(zhǎng)的客戶端設(shè)備。
此外,遠(yuǎn)程開發(fā)環(huán)境的擴(kuò)展性也很好,團(tuán)隊(duì)越大,遠(yuǎn)程開發(fā)服務(wù)器的效率就越高。數(shù)據(jù)科學(xué)等大型團(tuán)隊(duì)已經(jīng)采用了這種方式:在遠(yuǎn)程實(shí)例上運(yùn)行 Jupyter notebook 是很常見的做法,團(tuán)隊(duì)可以遠(yuǎn)程連接到服務(wù)器,然后迭代AI 模型。隨著支持多人協(xié)作的成熟云 IDE(比如JetBrains 的 Code With Me、VisualStudio 的 Live Share)的發(fā)展,從理論上說,這一概念可應(yīng)用于不同的開發(fā)團(tuán)隊(duì),從而大幅削減成本。
我并不是第一個(gè)有這種想法的人。
例如,MightyApp 將 Chrome 虛擬化,他們的目標(biāo)是用戶無需購(gòu)買昂貴的硬件,將運(yùn)行現(xiàn)代網(wǎng)絡(luò)應(yīng)用所需的計(jì)算能力外包給他們,這樣既能享受高性能,同時(shí)也能節(jié)省維護(hù)的成本。
然而,隱私方面的影響也是深遠(yuǎn)的。這就是為什么雖然 Replit 和微軟希望我們朝著這個(gè)方向邁進(jìn),但我不認(rèn)為專有云 IDE 將成為現(xiàn)代軟件開發(fā)的未來的原因之一。如果開發(fā)人員輸入的每一個(gè)字符都會(huì)被記錄或匯總成報(bào)告,那么他們就不太可能會(huì)冒險(xiǎn),不論這種方式有多么合適,他們也不會(huì)調(diào)整自己的工作安排。如此一來,開發(fā)人員學(xué)習(xí)和工作的速度都會(huì)受阻,他們的表現(xiàn)可能會(huì)回歸到團(tuán)隊(duì)的平均水平。而這絕不是我們希望看到的局面。
但隱私只是一個(gè)方面。大多數(shù)遠(yuǎn)程開發(fā)服務(wù)器的優(yōu)勢(shì)都在于擁有對(duì)整個(gè)技術(shù)棧的控制,尤其是服務(wù)器本身。
你不需要再關(guān)心底層的機(jī)器,也不再需要旁門左道,而且還能獲得更多的微觀管理機(jī)會(huì)。云 IDE 最吸引用戶的地方莫過于外包原始的計(jì)算能力,同時(shí)保持對(duì)底層硬件的控制。
這是編程的未來嗎?
說實(shí)話,我也不確定。
盡管我非常喜歡在 iPad 上運(yùn)行 Tensorflow,但我也有兩個(gè)疑慮。
首先,蘋果 M1 芯片的成本效益帶來的沖擊很大。有些人報(bào)告說他們的開發(fā)速度有了數(shù)量級(jí)的提升。如果能夠擁有如此強(qiáng)大且廉價(jià)的本地機(jī)器,又何必使用開發(fā)服務(wù)器呢?隨著計(jì)算能力需求的不斷增長(zhǎng),PC 的性能也在持續(xù)提升。這種趨勢(shì)與需要在瀏覽器中運(yùn)行的 IDE 截然相反,而且這種趨勢(shì)不會(huì)輕易消亡。
其次,事實(shí)證明,跨平臺(tái)移動(dòng)開發(fā)只是一個(gè)破碎的美夢(mèng)(蘋果和 Google 為此付出了太多努力)。原生客戶端的表現(xiàn)更佳,它們的速度更快,延遲更低,并且可以更好地與本地機(jī)器交互(比如快捷鍵就是個(gè)很大的問題)。移動(dòng)應(yīng)用的問題不僅限于計(jì)算能力,現(xiàn)代手機(jī)芯片很強(qiáng)大,但與原生應(yīng)用相比,React Native 簡(jiǎn)直不堪一擊。在瀏覽器中運(yùn)行的 IDE 能夠提供與原生本地實(shí)例相同的用戶體驗(yàn)嗎?
我有點(diǎn)矛盾。
我希望能夠?qū)㈤_發(fā)環(huán)境轉(zhuǎn)移到遠(yuǎn)程服務(wù)器,同時(shí)研發(fā)更好的本地設(shè)備,與客戶端更好的交互,而不是更快的機(jī)器來運(yùn)行代碼。
但目前我們還沒有發(fā)展到這個(gè)水平。
Chromebook在朝著正確的方向發(fā)展,這絕非偶然。Google 試圖實(shí)現(xiàn)“一切皆云”的宏偉愿景。但是,我覺得 Chromebook 不適合編程:糟糕的鍵盤、糟糕的屏幕、糟糕的 shell 體驗(yàn)。
我們需要將這個(gè)概念提升到一個(gè)新的水平:讓遠(yuǎn)程服務(wù)器完成所有繁重的工作,同時(shí)投資硬件和軟件工具,改善開發(fā)人員的體驗(yàn)。
我很好奇,能否有人打開新局面,并徹底地改變我們與機(jī)器的交互方式。