在微軟內(nèi)部,Python 從一個(gè)不受重視的語(yǔ)言變成了香餑餑。
最近,微軟 Python 開發(fā)者 Steve Dower 發(fā)布博文(如下文,下文中 Steve Dower 以“我”自稱),回憶了 Python 如何在公司內(nèi)部流行起來(lái)的。Steve Dower 在學(xué)生時(shí)代參與了 Python Tools for Visual Studio (PTVS)這一微軟開源工具的開發(fā),項(xiàng)目經(jīng)理后來(lái)邀請(qǐng)他來(lái)公司當(dāng)暑期實(shí)習(xí)生,一年之后成為微軟的全職開發(fā)者。到了 2018 年,開發(fā)工具 Visual Studio 和 Visual Studio Code 都支持 Python,他們還雇傭了五名 Python 語(yǔ)言的核心開發(fā)者,積極參與世界各地的 Python 活動(dòng),他們?yōu)?Python 感到驕傲。
Python,是微軟公司未來(lái)云業(yè)務(wù)體系的重要組成部分,屬于服務(wù)與團(tuán)隊(duì)支持工作中需要使用的基礎(chǔ)語(yǔ)言之一,同時(shí)更是公司快速增長(zhǎng)的數(shù)據(jù)科學(xué)與分析領(lǐng)域內(nèi)最受歡迎的語(yǔ)言選項(xiàng)。然而,Python早期在微軟公司顯然沒有獲得與其重要地位相符的盛名。
2010年,微軟內(nèi)部開始有幾位Python支持者,但他們一直低調(diào),以防有人注意到他們已經(jīng)有權(quán)限為自己的項(xiàng)目分配開發(fā)人員。雖然這支隊(duì)伍還不大,也不新,主要來(lái)自以往的工作,但其仍受到微軟公司企業(yè)文化中“并非原創(chuàng)”問題的影響:Python是一種屬于他人的語(yǔ)言,因此微軟對(duì)其并不感興趣。
轉(zhuǎn)眼過(guò)去八年以來(lái),情況出現(xiàn)了戲劇性的轉(zhuǎn)變。如今,微軟的眾多產(chǎn)品都開始支持 Python,一些最新產(chǎn)品甚至只支持 Python,部分關(guān)鍵工具也是用 Python 編寫的,微軟正積極投資于 Python 語(yǔ)言及相關(guān)社區(qū)。
我從2011年開始在微軟公司工作,有幸參與了多個(gè)重要的Python項(xiàng)目,并與多支團(tuán)隊(duì)合作其它項(xiàng)目。最近一段時(shí)間,我轉(zhuǎn)而為微軟公司貢獻(xiàn)力量,旨在幫助微軟建立自己的Python儲(chǔ)備,同時(shí)通過(guò)與技術(shù)社區(qū)合作,使每個(gè)人都能更好地使用Python語(yǔ)言。
Visual Studio中的Python
在正式加入微軟公司之前,我在澳大利亞讀研究生。當(dāng)時(shí)我已經(jīng)是個(gè)Visual Studio粉絲加 Python 開發(fā)者,我也很高興看到2010年發(fā)布的Python Tools for Visual Studio(簡(jiǎn)稱PTVS)。當(dāng)時(shí),運(yùn)行在.NET環(huán)境之上的 Python 版本 IronPython 已經(jīng)被交付至社區(qū),另有一支由 Dino Viehland 和 Shahrokh Mortazavi 帶隊(duì)的小組負(fù)責(zé)將Python支持引入微軟公司的各款產(chǎn)品當(dāng)中。經(jīng)常與法務(wù)團(tuán)隊(duì)進(jìn)行為期數(shù)個(gè)月的協(xié)商,PTVS最終發(fā)布在CodePlex(微軟的前開源托管服務(wù))上,并開始接受外部貢獻(xiàn)。
作為一名 Python 開發(fā)人員,我很高興率先體驗(yàn)了 PTVS 的初始版本,并上報(bào)了一些無(wú)法正常起效的內(nèi)容,包括解決其中存在的部分問題。經(jīng)過(guò)一個(gè)月左右的跟進(jìn),該團(tuán)隊(duì)經(jīng)理問我是否有興趣以暑期實(shí)習(xí)生的身份到微軟工作。一年之后,我正式成為微軟公司的全職員工。
由于我們的團(tuán)隊(duì)擁有最為豐厚的 Python 知識(shí)儲(chǔ)備,因此我們自然成為了微軟 Azure 的Python支持主力。初始版本的 Azure SDK for Python 就是由我們這支隊(duì)伍開發(fā)完成,目前團(tuán)隊(duì)已經(jīng)有五名成員。隨著 Python 越來(lái)越重要,我們得以轉(zhuǎn)型為一支專門的 Python 負(fù)責(zé)團(tuán)隊(duì)。通過(guò)對(duì)該 SDK 的持續(xù)貢獻(xiàn),我們很快發(fā)現(xiàn)并吸納了 Laurent Mazuel 加入。這里需要強(qiáng)調(diào)的是,這套 SDK 已經(jīng)成為 Azure 管理 SDK 獲得成功的關(guān)鍵所在——其協(xié)調(diào)著100多項(xiàng) Azure 服務(wù),并克服了將其構(gòu)建為整體連貫庫(kù)中出現(xiàn)的種種挑戰(zhàn)!
接下來(lái)的幾年里,我們親眼見證自己的項(xiàng)目在用戶總量與實(shí)用性方面不斷提升。每一次新版本的發(fā)布,都會(huì)引起人們?cè)诟黝惿缃幻襟w平臺(tái)(如Twitter、Reddit以及Hacker News等等)自發(fā)地?zé)崃矣懻摚ú簧偻略趦?nèi),很多人仍然不相信微軟公司實(shí)際上已經(jīng)開始向Python張開懷抱。我在一位開發(fā)人員隔壁的辦公室工作了半年之后,這位開發(fā)人員才意識(shí)到,微軟居然擁有我們這樣一支 Python 專項(xiàng)團(tuán)隊(duì)。
我們工程師團(tuán)隊(duì)每年都會(huì)參加各種大大小小的Python會(huì)議,展示并討論我們的工具。我們?cè)谖④泝?nèi)部還屬于那種“小不點(diǎn)”,因此得不到營(yíng)銷團(tuán)隊(duì)的協(xié)助——為了解決問題,一切規(guī)劃、人員配備、裝修乃至展位運(yùn)營(yíng)工作都得由工程師來(lái)完成。有時(shí)候,我們會(huì)為了一場(chǎng)活動(dòng)到處奔波(例如在最后一分鐘,沖到打印店,快速打印出更好的標(biāo)志;或者在附近的雜貨店買巧克力,以作為活動(dòng)伴手禮)。正是這樣的經(jīng)歷,讓我們感到自己就像是大型企業(yè)內(nèi)部的小小初創(chuàng)公司!
圖: PyCon 2014美國(guó)大會(huì)上的微軟展臺(tái)
長(zhǎng)久以來(lái),微軟公司內(nèi)外都認(rèn)為 PTVS 只是一個(gè)社區(qū)項(xiàng)目,而沒有意識(shí)到我們都是實(shí)實(shí)在在的微軟員工。但這種誤解慢慢開始發(fā)生轉(zhuǎn)變,特別是在我們找到負(fù)責(zé) visualstudio.com 網(wǎng)站的營(yíng)銷人員,要求其在主頁(yè)的語(yǔ)言清單中插入“Python”一項(xiàng)時(shí)。不出所料,這引起了不少人的關(guān)注,但同時(shí)也是最好的自我宣傳方式。從那時(shí)起,我們被越來(lái)越多地視為“官方”力量。
下一個(gè)轉(zhuǎn)折點(diǎn)出現(xiàn)在我們被添加至 Visual Studio 2015 安裝程序時(shí)。此版本包含一個(gè)經(jīng)過(guò)改進(jìn)的“自定義”頁(yè)面,頁(yè)面內(nèi)簡(jiǎn)化了核心選項(xiàng)并添加了眾多“外部”組件。就是在這里,用戶第一次獲得了官方Python支持,而無(wú)需下載任何其它安裝程序。
圖:Visual Studio 2015的安裝程序當(dāng)中,首次包含Python Tools forVisual Studio
隨著我們用戶數(shù)量的持續(xù)飆升,我們團(tuán)隊(duì)也獲得越來(lái)越多的關(guān)注。我們作為微軟公司的 Python 力量,終于正式進(jìn)入公眾視野!PTVS項(xiàng)目遷移到了目前的 GitHub 主頁(yè)上,Python SDK for Azure的受歡迎程度遠(yuǎn)超預(yù)期,而已經(jīng)落實(shí)的一切工作,不知不覺掀起了一輪真正的文化變革。
我的Python貢獻(xiàn)之旅
與此同時(shí),在PyCon 2015美國(guó)大會(huì)上,我志愿參與到Python on Windows的支持工作中來(lái)——這個(gè)項(xiàng)目得到了大家的積極認(rèn)可,而在與法務(wù)團(tuán)隊(duì)進(jìn)行了多次交流之后,我很快成為微軟支持下的CPython項(xiàng)目的核心成員。
在Python 3.5版本,我對(duì)Python進(jìn)行了移植,從其使用微軟 Visual C++ 2010 編譯器與運(yùn)行到更新至最新版本——其中包括對(duì)我們專門對(duì) CPython 打造的 C Runtime 進(jìn)行針對(duì)性調(diào)整(例如_set_thread_local_invalid_parameter_handler() 函數(shù))。此外,我還重寫了安裝程序,修復(fù)了用戶安裝機(jī)制并將其變更為正確的安全安裝目錄。最后,我負(fù)責(zé)構(gòu)建 python.org 網(wǎng)站上提供的所有 Windows 版本 Python。
圖:舊有Python安裝程序與Python 3.5版本中的新安裝程序
時(shí)至今日,微軟公司已經(jīng)擁有五名核心 CPython 提交者,而我們所有成員都有充裕的時(shí)間為該項(xiàng)目做貢獻(xiàn)。我們致力于改善項(xiàng)目的兼容性、注冊(cè)機(jī)制、設(shè)計(jì)漂亮的新圖標(biāo)、JIT執(zhí)行hook以及更多正在推進(jìn)中的其它新成果。身為微軟公司的全職員工,我們能夠獲得遠(yuǎn)超純粹志愿者的優(yōu)勢(shì)——包括擁有自己的項(xiàng)目,同時(shí)更透徹地了解問題與場(chǎng)景,再加上擁有良好薪酬的開發(fā)投入,我們得以對(duì)Python社區(qū)投入熱情并產(chǎn)生積極影響。
關(guān)注文化層面的轉(zhuǎn)變
當(dāng)人們問起關(guān)于Python的發(fā)展進(jìn)度時(shí),我們能夠以公司的企業(yè)文化變革作為回應(yīng),而非直接做出干癟乏味的描述。我們認(rèn)為,這一重大勝利的里程碑之一正是跨平臺(tái)Azure CLI項(xiàng)目。該項(xiàng)目最初是使用Node.js編寫的,但其團(tuán)隊(duì)隨后發(fā)現(xiàn),要維護(hù)規(guī)模如此龐大的命令行工具正變得越來(lái)越困難。在研究替代性方案時(shí),他們就Python支持一事向我們征求了意見。
整個(gè)對(duì)話過(guò)程大致如下:
CLI 團(tuán)隊(duì): “我們并不真正了解Python,但看起來(lái)Python對(duì)于可擴(kuò)展命令行工具來(lái)說(shuō)似乎是個(gè)不錯(cuò)的選擇。”
Python團(tuán)隊(duì): “是啊,應(yīng)該沒問題。?”
CLI: “你們能不能幫我們建立起基礎(chǔ)結(jié)構(gòu)?幾條命令就夠了,然后告訴我們?cè)撊绾伪A舻卿洜顟B(tài)與配置文件?或者說(shuō)怎樣實(shí)現(xiàn)本地化?”
Python: “當(dāng)然,我們非常樂意。”
CLI: “那要構(gòu)建起我們能夠試用的成果,大概需要幾周時(shí)間?”
Python: “放心,禮拜三就能準(zhǔn)備好。”
雖然明顯帶有驚訝甚至是懷疑的情緒,但CLI團(tuán)隊(duì)仍然接受了我們的提議,而我負(fù)責(zé)為他們整理出一套展示樣本。Azure CLI團(tuán)隊(duì)決定采用這一方案,并將其轉(zhuǎn)變?yōu)槭澜缟弦?guī)模最大的Python命令行應(yīng)用程序。如今,Knack已經(jīng)成為適用于高性能大規(guī)模命令行應(yīng)用程序的Python框架,能夠處理數(shù)千條命令與選項(xiàng),同時(shí)亦可支持參數(shù)補(bǔ)全、提示、可擴(kuò)展性以及配置文件等等。
圖:微軟公司海報(bào)上展示的 Python 日活動(dòng)
雖然我們一直很清楚,Python在微軟公司內(nèi)部的受歡迎程度遠(yuǎn)超大家的想象,但后來(lái)發(fā)生的一件事還是徹底震撼到了我們。2014年年末,我們組織了一場(chǎng)公司內(nèi)部的“Python日”活動(dòng),邀請(qǐng)了一些知名員工,預(yù)定了一個(gè)能夠容納100人的會(huì)議室,并在辦公室周圍張貼了海報(bào)。同事們的反響極為熱烈,這迫使我們不得不在活動(dòng)當(dāng)天將組織地點(diǎn)轉(zhuǎn)移到微軟主園區(qū)最大的會(huì)議廳內(nèi),甚至還面向全球各地的其它辦事處進(jìn)行現(xiàn)場(chǎng)直播!總而言之,超過(guò)1000人參加或觀看了此次活動(dòng),約占微軟公司總員工數(shù)量的1%(包括工程、財(cái)務(wù)、人力資源與法務(wù)人員——各個(gè)部門都有參與其中)。
圖:Visual Studio 2017安裝程序中提供的Python工作負(fù)載
大概在同一時(shí)間,Visual Studio 2017的安裝程序也在經(jīng)歷全新設(shè)計(jì)升級(jí)。這項(xiàng)工作初期,我們這支小團(tuán)隊(duì)就受邀加入其中——不僅負(fù)責(zé)擴(kuò)展性工作,同時(shí)也參與了實(shí)實(shí)在在的內(nèi)置功能創(chuàng)建。然而,我們?nèi)匀粚⒆约旱墓ぷ鞒晒荚?GitHub 之上,并幫助計(jì)算出多種其它 Visual Studio 組件需要的模型。PTVS是最早的開源 Visual Studio 功能之一,而如今其后繼者已經(jīng)包含Roslyn(C#與Visual Basic編譯器)、MSBuild以及Visual F#等等。
我們還采用了由社區(qū)構(gòu)建的 Visual Studio Code 擴(kuò)展,雇用該擴(kuò)展的開發(fā)者 Don Jayamanne,并邀請(qǐng)他以全職形式與其他開發(fā)人員共同工作。由于這個(gè)項(xiàng)目始于開源形式,因此其必須始終保持這種狀態(tài),而我們的官方GitHub庫(kù)也明確顯示我們立足原始版本進(jìn)行了分叉。
在PyCon 2019美國(guó)大會(huì)上,我們將第三次以核心贊助商的身份出席,與五年前不同的是,這一次我們將帶來(lái)設(shè)計(jì)合理的展臺(tái)以及大量演示內(nèi)容,我們將討論我們對(duì)Python的高度依賴、如何為Python做出貢獻(xiàn),并將致力于支持每一位使用Python的用戶。
不再悄然推進(jìn)
回顧2011年,彼時(shí)微軟的 Python 發(fā)展計(jì)劃確實(shí)只能算是悄然推進(jìn)。但在2018年,我們對(duì) Python 成果感到無(wú)比自豪,我們?cè)谧约旱拈_發(fā)者工具(例如Visual Studio與Visual Studio Code)當(dāng)中提供支持,在 Azure Notebooks 中進(jìn)行托管,并利用 Python 構(gòu)建起 Azure CLI 等最終用戶體驗(yàn)。我們聘請(qǐng)了五位核心CPython開發(fā)者以及眾多其他貢獻(xiàn)者,通過(guò) NumFOCUS 以及 PyData 等項(xiàng)目積極支持?jǐn)?shù)據(jù)科學(xué)的開源導(dǎo)向,亦在定期贊助、主辦并參與世界各地召開的 Python 活動(dòng)。
雖然我不敢說(shuō)自己親歷了過(guò)去八年內(nèi)微軟公司在Python領(lǐng)域的一切進(jìn)展,但可以肯定的是,我很榮幸能夠成為這波歷史潮流的參與者,并努力幫助微軟在開源社區(qū)當(dāng)中成為一名不斷進(jìn)步的好成員。
好文章,需要你的鼓勵(lì)
新加坡國(guó)立大學(xué)研究團(tuán)隊(duì)開發(fā)了SPIRAL框架,通過(guò)讓AI與自己對(duì)弈零和游戲來(lái)提升推理能力。實(shí)驗(yàn)顯示,僅訓(xùn)練AI玩簡(jiǎn)單撲克游戲就能讓其數(shù)學(xué)推理能力提升8.6%,通用推理提升8.4%,且無(wú)需任何數(shù)學(xué)題目作為訓(xùn)練材料。研究發(fā)現(xiàn)游戲中的三種推理模式能成功轉(zhuǎn)移到數(shù)學(xué)解題中,為AI訓(xùn)練提供了新思路。
同濟(jì)大學(xué)團(tuán)隊(duì)開發(fā)的GIGA-ToF技術(shù)通過(guò)融合多幀圖像的"圖結(jié)構(gòu)"信息,創(chuàng)新性地解決了3D相機(jī)噪聲問題。該技術(shù)利用圖像間的不變幾何關(guān)系,結(jié)合深度學(xué)習(xí)和數(shù)學(xué)優(yōu)化方法,在合成數(shù)據(jù)集上實(shí)現(xiàn)37.9%的精度提升,并在真實(shí)設(shè)備上展現(xiàn)出色泛化能力,為機(jī)器人、AR和自動(dòng)駕駛等領(lǐng)域提供更可靠的3D視覺解決方案。
伊利諾伊大學(xué)研究團(tuán)隊(duì)通過(guò)對(duì)比實(shí)驗(yàn)發(fā)現(xiàn),經(jīng)過(guò)強(qiáng)化學(xué)習(xí)訓(xùn)練的視覺語(yǔ)言模型雖然表現(xiàn)出"頓悟時(shí)刻"現(xiàn)象,但這些自我糾錯(cuò)行為并不能實(shí)際提升推理準(zhǔn)確率。研究揭示了AI模型存在"生成-驗(yàn)證差距",即生成答案的能力強(qiáng)于驗(yàn)證答案質(zhì)量的能力,且模型在自我驗(yàn)證時(shí)無(wú)法有效利用視覺信息,為AI多模態(tài)推理發(fā)展提供了重要啟示。
MIT等頂尖機(jī)構(gòu)聯(lián)合提出SparseLoRA技術(shù),通過(guò)動(dòng)態(tài)稀疏性實(shí)現(xiàn)大語(yǔ)言模型訓(xùn)練加速1.6倍,計(jì)算成本降低2.2倍。該方法使用SVD稀疏性估計(jì)器智能選擇重要計(jì)算部分,在保持模型性能的同時(shí)顯著提升訓(xùn)練效率,已在多個(gè)任務(wù)上驗(yàn)證有效性。