維護一個大型開源項目是怎樣的體驗?AutoKeras作者親述心路歷程
我是 AutoKeras 項目的作者金海峰,是 Keras 團隊的一名工程師,同時負責開發和維護 KerasTuner 項目。沒時間聽故事的同學,可以直接下拉至「干貨部分」。
項目簡介
KerasTuner 可以在 Keras 模型構建過程中定義一些超參數的取值范圍,并對他們的取值進行搜索,找到一個相對優的值,以構建一個好模型。
AutoKeras 則是提前為幾種常見的任務定義好了一系列模型和超參數范圍,用戶無需自己定義模型。只需輸入訓練數據,即可完成建模和訓練。
背后的故事
這還要從我博士第二年說起,當時找暑期實習,拿到了微軟的 offer。但導師說有個項目想讓我參與,暑假就要開始,和實習有沖突。我決定放棄實習,來做這個項目。
這是一個有關自動化機器學習(AutoML)的項目,有幾十家高校和公司參與,試圖打造一個能勝任所有機器學習任務的 AutoML 平臺,還要有友好的人機交互界面。這個項目帶我進入了 AutoML 這個領域。
在一次學術會議上,我突發奇想,既然有傳統機器學習模型的機器學習庫(如:Auto-WEKA 和 Auto-Sklearn),為什么沒有人做一個深度學習的同類產品呢?想到這里我立即沖出了會場,打開筆記本電腦,開始了調研。
我記得以前看羅振宇在一期《羅輯思維》中講述什么樣的人適合創業。其中一條就是行動力極強,也許有一百個人同時能想到一個想法,但只有那個行動最快的人能把果實摘走。他說一次和一個朋友吃飯聊天,聊起自己的一個好想法,他的朋友在吃飯這會兒功夫就安排人把相關的域名都注冊好了。可見行動力之強。
我的行動也刻不容緩。經過調研,我決定把名字定為 AutoKeras,因為 Keras 的易用性是受到廣泛認可的,而我們就是要做一個傻瓜式的產品,名字就能讓用戶 get 到這個信息。
沒想到這個軟件還真的沒有人做,我在第一時間把能注冊的平臺都注冊了,比如 PyPI 和 GitHub repo。
我感覺我這個想法實在是太容易被想到了,隨時有可能有一個團隊跳出來把我想到的名字搶了,把東西提前做出來。
于是,接下來我做了兩件事,一是找合作伙伴,加快開發進度。在我聯系了一圈我認識的牛人小伙伴之后,只有一個北郵的學弟愿意參與。于是,我們開始了開發。二是決定這個開源軟件從第一天起就是開源的,因為如果我們先開發再開源,很可能在開發過程中就被別人先做出來把名字搶了。
我在當天找到了一篇陳天奇的論文 Net2Net,感覺可以作為解決方案的一部分。加上一個搜索算法就能用了。
我開完了學術會議之后,回到學校,跟導師說了這個想法,得到了導師的支持。
這個開源軟件,做了半年多,陸續有實驗室的同學參與開發,基本完成,其中的方法創新還發表了論文。沒想到,我們都沒進行宣傳,就受到了大量的媒體報道。
而后還與谷歌 Keras 團隊達成合作,作為其官方 AutoML 軟件進行開發。
博士畢業后我加入了谷歌公司,繼續對該項目進行維護和開發。
干貨部分
對工作的影響
對于個人開發者來講,可以分為三種情況。
1、大多數人只是將運營開源項目當做業余愛好。這也許會和開發者的正式工作產生沖突。
2、對于一少部分,較成功的項目,開發者可以把開源項目作為全職工作。我就處于這個階段。基本上可以全身心地投入其中,但也會擔心自己因為太專注于一個項目,而在很多通用技術上有所欠缺。
3、最成功的開發者會把開源軟件變成人人都需要學的通用技術。這樣也就徹底沒有了后顧之憂。例如:Linux 和 VUE.js。
搶占先機很重要
我覺得我做的項目雖說有技術含量,但遠沒有達到無人能做的難度。回頭來看,能受到認可最關鍵的因素還是搶占了先機。
合作才是王道
當你手中的資源有限的時候,唯有合作并合理地分配功勞和利益,才能把項目的規模最大化。包括和同學、朋友以及大公司的合作。千萬別因為怕別人分走了你的功勞和利益就作繭自縛。在此特別感謝所有參與了項目的同學們,尤其是原論文二作,宋清全。
別小瞧任何人或作品
我學到了很重要的一課,就是不要隨意小看人。如果有人有一件不錯的作品,即使作品看上去很簡單,也不要輕易地小看了作者。一是因為作品的難度不等同于作者的全部實力。也許作者廚藝高深莫測,而這部作品不過是做個蛋炒飯罷了。二是因為要把蛋炒飯做到世界知名,那也是需要世界級的廚藝的。
運氣是不可或缺的
從起名,到接受報道,到和大公司合作,任何一環都有很大的運氣成分。運氣差一點點可能影響力就要大打折扣。
上手難度決定用戶量
如果你的技術或者用戶體驗沒有牛到獨一無二的程度,那么用戶選不選你可能主要取決于你的東西好不好上手。一個完整詳細的教程,就能輕松解決這個問題。
好的上層管理也是必要條件
我導師,胡俠老師,在這個項目里起的作用是決定性的。看似我槍出如龍,搶占了先機,實則導師在我想到這個點子的兩三年之前要拿到這個前沿領域的科研經費,并參與到這個多校合作的 AutoML 項目中來。這才是從根本上搶占了先機。所以,這個開源項目離不開導師在大方向上高屋建瓴的眼光。
也許許多人覺得我們的項目很多實驗室都能做,但其實這背后是雄厚的科研經費的支持。當時導師把我身上別的雜活都拿掉了,讓我專心做這一個項目,才得以把項目做好。如果實驗室沒有足夠的經費來支持足夠多的人手,又怎么能做到這樣的調度。
而且,懂得且愿意讓學生專注于一個項目以提升產出質量,也是很難能可貴的。
「百畝之田,勿奪其時,數口之家可以無饑矣。」——《寡人之于國也》
農民勤勤懇懇固然重要,但若是上層管理者總是耽誤農時,也是無法獲得豐收的。