国产91在线无码_少妇人妻无码高清_91人妻中文字幕无码专区在线_国产福利在线播放_免费 无码 国产成年视频网站

TensorFlow技術(shù)主管詳解:谷歌怎樣管理開(kāi)源軟件(谷歌的tensorflow)

TensorFlow技術(shù)主管詳解:谷歌怎樣管理開(kāi)源軟件(谷歌的tensorflow)

TensorFlow技術(shù)主管詳解:谷歌怎樣管理開(kāi)源軟件(谷歌的tensorflow)

唐旭 編譯自 O’reilly

量子位 出品 | 公眾號(hào) QbitAI

TensorFlow開(kāi)源一年半以來(lái),在GitHub上已經(jīng)有了820位貢獻(xiàn)者,close了5192條issue,還有1033條開(kāi)放著。

TensorFlow技術(shù)主管詳解:谷歌怎樣管理開(kāi)源軟件(谷歌的tensorflow)

同時(shí),如果所有TensorFlow團(tuán)隊(duì)成員都在GitHub上,而且屬于這個(gè)組織的話,它在Google內(nèi)部還有著一支75人的團(tuán)隊(duì)。

一支人數(shù)不算少的全職團(tuán)隊(duì),是如何和數(shù)量眾多的開(kāi)源貢獻(xiàn)者共同改進(jìn)TensorFlow的呢?團(tuán)隊(duì)的技術(shù)主管Pete Warden帶著深深的怨念,在O’reilly網(wǎng)站上發(fā)表文章,講述了他們是如何維護(hù)TensorFlow開(kāi)源社區(qū)的。

以下內(nèi)容編譯自Warden的文章:

開(kāi)源可不只是把代碼往GitHub上一扔,然后等著別人去用它就完事了。道理我都懂,可直到在谷歌成為TensorFlow團(tuán)隊(duì)的一員,我才真正開(kāi)了眼:要圍繞一個(gè)軟件打造出一個(gè)社區(qū),要考慮的因素實(shí)在是太多太多了。

社區(qū)服務(wù)

當(dāng)一個(gè)新的項(xiàng)目剛剛誕生時(shí),在這個(gè)項(xiàng)目上能被稱作專家的,就只有那些把它寫出來(lái)的人。他們是僅有的能夠撰寫文檔和解答問(wèn)題的人,同時(shí),在對(duì)軟件的改進(jìn)方面,他們也是最佳人選。

但結(jié)果,我們這類TensorFlow團(tuán)隊(duì)中的核心成員反倒成為了項(xiàng)目成長(zhǎng)的瓶頸。原因其實(shí)很簡(jiǎn)單:我們沒(méi)法一次性把所有的事情都干完。是,我們確實(shí)知道該怎么騰出時(shí)間去寫代碼和文檔,因?yàn)檫@本來(lái)就是我們?cè)诠雀枞粘9ぷ鞯囊徊糠?;但要給一個(gè)超大社區(qū)里的眾多開(kāi)發(fā)者解答問(wèn)題,我們就有點(diǎn)懵比了——盡管我們知道,這對(duì)于項(xiàng)目的成功十分重要。

為了確保用戶們能夠得到他們需要的答案,核心工程團(tuán)隊(duì)的全體成員開(kāi)始輪班。每個(gè)人可以從以下幾個(gè)活里自己挑:處理Stack Overflow上帶有#tensorflow標(biāo)簽的問(wèn)題、檢查一遍GitHub上的pull request、給GitHub上的issue分類、同步外部和內(nèi)部代碼,或是找到那些失敗測(cè)試的原因。

如何分配這些工作由大伙自己決定。一般來(lái)講,如果每個(gè)工程師每次在一個(gè)特定領(lǐng)域負(fù)責(zé)一周的話, 我們勉強(qiáng)能讓這個(gè)輪班機(jī)制循環(huán)起來(lái)。這個(gè)機(jī)制實(shí)行之后,工程師們?cè)谒麄冎蛋喈?dāng)周的本職工作產(chǎn)出會(huì)大大降低——不過(guò)至少,每個(gè)人的工作被打斷的頻率降到了幾個(gè)月一次。

Pull request

我們將TensorFlow開(kāi)源來(lái)讓社區(qū)能夠?qū)ζ湄暙I(xiàn)力量。到目前為止,已經(jīng)有超過(guò)400人從外部為我們貢獻(xiàn)了代碼,這其中既包括簡(jiǎn)單的文檔修復(fù),也包括像OS X的GPU支持、OpenCL的執(zhí)行、InfiniBand架構(gòu)下RDMA這樣的大輸血。首先,每次貢獻(xiàn)都會(huì)先從輪值核心工程師那里審一遍,以確定其是否真的管用;如果方案通過(guò)了最初的審核,我們會(huì)對(duì)它進(jìn)行一組Jenkins測(cè)試來(lái)確保它不會(huì)引發(fā)任何故障;如果以上兩道程序都被通過(guò)了,輪值工程師會(huì)將方案交給另一位更加擅長(zhǎng)相關(guān)領(lǐng)域的核心工程師再次進(jìn)行審核。

在這一過(guò)程中,GitHub全新的精細(xì)代碼審核工具能夠?yàn)槲覀兲峁O大的幫助。而在它出現(xiàn)之前,要把所有人的評(píng)價(jià)都處理一遍是個(gè)十分痛苦的事情。當(dāng)一名核心工程師與一位或更多的外部貢獻(xiàn)者協(xié)作時(shí),經(jīng)常會(huì)有更大的pull request會(huì)被放入正在進(jìn)行的工作中。直到每個(gè)人都滿意之后,PR就會(huì)被合并到GitHub上的樹頂,并在下一次同步運(yùn)行時(shí)被合并進(jìn)我們的內(nèi)部代碼庫(kù)。

代碼許可協(xié)議

作為自動(dòng)化pull request程序的一部分,我們會(huì)將貢獻(xiàn)者的GitHub賬號(hào)與我們?cè)诠雀栝_(kāi)發(fā)者網(wǎng)站上的代碼許可協(xié)議(CLA)記錄相匹配,以確保每個(gè)外部貢獻(xiàn)者都拿到了CLA。我們的目標(biāo)是是確保整個(gè)代碼庫(kù)都在阿帕奇2.0協(xié)議下準(zhǔn)確無(wú)誤地得到了分配。當(dāng)pull request的輪值工程師要對(duì)出現(xiàn)的全部問(wèn)題進(jìn)行歸類的時(shí)候,如果一個(gè)pull request的內(nèi)部關(guān)聯(lián)了多個(gè)郵箱,或是貢獻(xiàn)者需要以團(tuán)體名義登錄,情況就會(huì)變得十分麻煩。

GitHub issue

GitHub用戶們已經(jīng)提交了5000多個(gè)關(guān)于TensorFlow的issue。對(duì)于有些人來(lái)說(shuō),這可能有點(diǎn)讓人沮喪;但對(duì)我來(lái)說(shuō),issue卻是個(gè)最棒的單位——因?yàn)樗C明,人們是真的在使用這個(gè)軟件。

為了確保我們回應(yīng)了每個(gè)存檔的issue,輪值工程師會(huì)時(shí)刻查看新出現(xiàn)的信息并試著用標(biāo)簽對(duì)其進(jìn)行分類。如果那是個(gè)我們?cè)诙唐趦?nèi)無(wú)法在內(nèi)部搞定的問(wèn)題,它就會(huì)被標(biāo)記成“歡迎貢獻(xiàn)”;對(duì)于一些待處理的bug,我們會(huì)給他們按輕重緩急排個(gè)次序。這些天來(lái),隨著一些外部用戶自己變成了某些問(wèn)題的專家,越來(lái)越多的問(wèn)題沒(méi)有借助我們的力量就被解決掉了,特別是在像Windows這類我們不會(huì)每天都用的平臺(tái)上。

如果一個(gè)issue沒(méi)能在社區(qū)中找到回答或修復(fù),而它的優(yōu)先級(jí)又足夠高時(shí),值班的人就會(huì)把它分配給團(tuán)隊(duì)里一個(gè)了解此類問(wèn)題的工程師。整個(gè)TensorFlow團(tuán)隊(duì)的成員都有自己的GitHub賬號(hào),因此我們可以用正常的GitHub issue追蹤器來(lái)實(shí)現(xiàn)任務(wù)的分配。我們確實(shí)考慮過(guò)把GitHub上提交的bug復(fù)制到我們的內(nèi)部系統(tǒng)中,但要為相同信息同步兩份副本,代價(jià)太高了。最后,我們讓工程師們除了留意內(nèi)部系統(tǒng)的追蹤器之外,也要打開(kāi)郵件通知,以便能夠及時(shí)看到自己被分配了哪些GitHub上的問(wèn)題。

Stack Overflow

Derek Murray是Stack Overflow值班小組的帶頭大哥,我覺(jué)得他回答問(wèn)題的技能真是碉堡了。根據(jù)他的資料頁(yè),這個(gè)人發(fā)過(guò)的帖子已經(jīng)觸及到了130萬(wàn)人;為了讓我們能夠及時(shí)追蹤網(wǎng)站上那些帶有#TensorFlow標(biāo)簽的問(wèn)題,他還設(shè)法創(chuàng)建了一個(gè)RSS驅(qū)動(dòng)的自動(dòng)化電子表格。起初我們采取每周輪班制,但發(fā)現(xiàn)要處理問(wèn)題的量對(duì)于一個(gè)人來(lái)講實(shí)在是太大了;后來(lái)我們采用了自動(dòng)分配系統(tǒng),情況變得好多了。

我本人就在這個(gè)輪班小組里,因此每天早上我瀏覽完自己的郵件后,我都會(huì)查看電子表格來(lái)弄清楚自己被分配到了哪些問(wèn)題。很遺憾,我們沒(méi)法自己回答全部的問(wèn)題,但每一個(gè)新進(jìn)來(lái)的問(wèn)題我們都會(huì)看。如果問(wèn)題相對(duì)簡(jiǎn)單的話,我們就自己把它答了。

當(dāng)然,值班的工程師得頂?shù)奖粏?wèn)題轟炸的前線去,但有些時(shí)候,回答某些問(wèn)題需要更多的時(shí)間和專業(yè)知識(shí)。如果某個(gè)問(wèn)題看上去能被答出來(lái),但社區(qū)里卻沒(méi)看見(jiàn)站出來(lái)的英雄,我們就會(huì)研究一下代碼,扒一下團(tuán)隊(duì)里有誰(shuí)可能會(huì)對(duì)這個(gè)問(wèn)題有些想法(通常是用git blame)。然后值班工程師就會(huì)向我們找到的人發(fā)封郵件,看其是否能提供一點(diǎn)幫助。

郵件列表

我們?cè)O(shè)置了一個(gè)郵件列表,但起初卻并不知道該怎么用它。我們很快就看出來(lái),用這種方法來(lái)追蹤issue和回答一般問(wèn)題有多辣雞。

后來(lái),我們把它當(dāng)成討論區(qū)來(lái)用,GitHub和Stackoverflow都不合適的話題,就發(fā)到郵件列表,但是在實(shí)際操作中我們發(fā)現(xiàn),即便是架構(gòu)問(wèn)題,用GitHub issue來(lái)討論也比郵件列表合適。

現(xiàn)在我們用這個(gè)郵件列表來(lái)發(fā)送信息和貼通知,還算是值得訂閱的。

代碼同步

和我聊過(guò)的許多人都對(duì)一件事表示十分吃驚——那就是在谷歌內(nèi)部,我們使用的代碼庫(kù)和我們?cè)贕itHub上所開(kāi)放的幾乎完全相同。不過(guò),兩者間還是存在一點(diǎn)區(qū)別的,比對(duì)谷歌專用基礎(chǔ)設(shè)施的支持是獨(dú)立的,路徑也和GitHub版不一樣,但同步的過(guò)程是完全機(jī)械的。我們至少每周推出一次內(nèi)部更新,更多時(shí)候是下載GitHub版本。

麻煩的是,我們要進(jìn)行雙向同步。在GitHub的公共項(xiàng)目和我們的內(nèi)部版本上,有很多變動(dòng)是同時(shí)發(fā)生的,而我們需要反反復(fù)復(fù)地把它們?nèi)窟M(jìn)行合并。沒(méi)有現(xiàn)成的基礎(chǔ)架構(gòu)可供利用,因此我們使用了自己創(chuàng)造的一套Python腳本來(lái)處理這些問(wèn)題。這些腳本能夠?qū)itHub上所有的變動(dòng)拉進(jìn)我們的內(nèi)部資源庫(kù)里,轉(zhuǎn)換所有的header path和其他細(xì)微的變化,將它們和最新內(nèi)部版代碼合并,并在內(nèi)部創(chuàng)建一個(gè)副本。隨后就可以進(jìn)行另一個(gè)方向的同步了,我們會(huì)將所有的內(nèi)部代碼轉(zhuǎn)換成外部的格式,并用相同的腳本把這些結(jié)果合并到最新的GitHub版上。

對(duì)于內(nèi)部的修改,我們同樣會(huì)盡力讓每次check-in都呈現(xiàn)為單獨(dú)的git commit,同時(shí)把作者的GitHub賬號(hào)和解釋這些變動(dòng)的評(píng)論包括在內(nèi)。我們?cè)贕itHub上有一個(gè)特別的“TensorFlow園丁”賬號(hào)來(lái)完成上述過(guò)程,一個(gè)內(nèi)部的commit被轉(zhuǎn)移到GitHub上之后,是這樣的:

TensorFlow技術(shù)主管詳解:谷歌怎樣管理開(kāi)源軟件(谷歌的tensorflow)

要確保即使代碼變了,這個(gè)轉(zhuǎn)換流程依然有效,是很有挑戰(zhàn)性的。為了驗(yàn)證這種有效性,我們要求把內(nèi)部代碼通過(guò)這個(gè)腳本轉(zhuǎn)換成外部版本,再轉(zhuǎn)換回來(lái)之后,和最初的內(nèi)部版一模一樣。在任何接觸到TensorFlow代碼庫(kù)的內(nèi)部更改上,我們都會(huì)運(yùn)行這個(gè)測(cè)試,通不過(guò)測(cè)試的修改會(huì)被拒絕。

對(duì)于那些提交pull request的人,我們常常會(huì)提一些奇怪的變更要求,通常,這樣做的原因是我們必須確保他們的代碼能適用于這個(gè)同步流程。

Jenkins測(cè)試

因?yàn)橐С趾芏嗖煌钠脚_(tái),我們希望有一個(gè)適用范圍很廣的測(cè)試工具。TensorFlow會(huì)在Linux、Windows、OS X、iOS、Android、Android Things、以及樹莓派上運(yùn)行,同時(shí)我們還有為GPU準(zhǔn)備的不同代碼路徑,包括CUDA和OpenCL支持、以及Bazel、cmake,和無(wú)格式makefile的構(gòu)建進(jìn)程。

讓每一位開(kāi)發(fā)者都在做了變更時(shí)手動(dòng)把上面這些東西全都測(cè)試一遍,是不可能的。因此,我們有一套能在絕大部分支持平臺(tái)上運(yùn)行的自動(dòng)化測(cè)試系統(tǒng),這些系統(tǒng)全都處于Jenkins自動(dòng)化系統(tǒng)的控制之下。始終讓它們發(fā)揮作用也不是件容易事,因?yàn)榭倳?huì)存在操作系統(tǒng)更新、硬件問(wèn)題以及其他一些與TensorFlow相關(guān)的問(wèn)題能讓測(cè)試失敗。我們有一個(gè)工程師團(tuán)隊(duì),專門負(fù)責(zé)讓整個(gè)測(cè)試系統(tǒng)正常運(yùn)行,這個(gè)團(tuán)隊(duì)曾經(jīng)在系統(tǒng)出問(wèn)題的時(shí)候救過(guò)我們很多次。因此在這方面的投入也是值得的。

開(kāi)發(fā)者關(guān)系

在開(kāi)源領(lǐng)域,我們?cè)诠雀璨⒉还陋?dú):我們?cè)?jīng)在Kubernetes和“ 開(kāi)源計(jì)劃辦公室”(Open Source Program Office)這樣的項(xiàng)目上學(xué)到過(guò)很多東西。有一支非常勤奮的開(kāi)發(fā)者關(guān)系專家團(tuán)隊(duì)協(xié)助我們處理這些事務(wù),他們還承擔(dān)了很多圍繞文檔、代碼示例以及其他一些開(kāi)發(fā)者經(jīng)驗(yàn)方面問(wèn)題而產(chǎn)生的體力活。我們的長(zhǎng)期目標(biāo)是,將關(guān)鍵的專業(yè)知識(shí)傳遞到核心開(kāi)發(fā)者之外的范圍,以便更多的人能夠?qū)ι鐓^(qū)有所貢獻(xiàn)。

讓這些核心工程師在部分時(shí)間內(nèi)去承擔(dān)客戶服務(wù)工作的一大好處是,它給了我們關(guān)于用戶所遇到問(wèn)題的直接洞見(jiàn)。參與客戶服務(wù)同樣驅(qū)動(dòng)著我們?nèi)バ迯?fù)那些常見(jiàn)的bug和補(bǔ)充文檔,因?yàn)樗跍p少工作量方面讓我們看見(jiàn)了直接的回報(bào)。

未來(lái),我們希望將這項(xiàng)工作更廣泛地進(jìn)行下去。同時(shí),我們也設(shè)計(jì)了更多的“戰(zhàn)術(shù)指導(dǎo)手冊(cè)”以幫助人們處理常見(jiàn)任務(wù)。能有機(jī)會(huì)同如此多的外部開(kāi)發(fā)者互動(dòng),我感覺(jué)十分幸運(yùn);我也希望,自己能對(duì)他們產(chǎn)生積極的影響,幫助他們用機(jī)器學(xué)習(xí)創(chuàng)造新的神奇應(yīng)用。

關(guān)于作者

Pete Warden是TensorFlow Mobile團(tuán)隊(duì)技術(shù)主管。在加入Google之前,他曾任Jetpac CTO,該公司提供為手機(jī)和嵌入式設(shè)備而優(yōu)化的深度學(xué)習(xí)技術(shù),2014年被Google收購(gòu)。他還曾在蘋果工作,負(fù)責(zé)圖像處理的GPU優(yōu)化。(完)

招聘

量子位正在招募編輯記者、運(yùn)營(yíng)、產(chǎn)品等崗位,工作地點(diǎn)在北京中關(guān)村。相關(guān)細(xì)節(jié),請(qǐng)?jiān)诠娞?hào)對(duì)話界面,回復(fù):“招聘”。

One More Thing…

今天AI界還有哪些事值得關(guān)注?在量子位(QbitAI)公眾號(hào)會(huì)話界面回復(fù)“今天”,看我們?nèi)W(wǎng)搜羅的AI行業(yè)和研究動(dòng)態(tài)。筆芯~

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。

(0)
上一篇 2024年3月22日 上午10:12
下一篇 2024年3月22日 上午10:28

相關(guān)推薦