30名工程師,歷時1300天打造,又一「國產」AI框架開源了

csdn 發佈 2020-08-01T11:34:14+00:00

與其他幾個「國產」AI框架相比,袁進輝認為,在完備性上,OneFlow比在今年3月開源的MindSpore和MegEngine要更好,不過支持的模型庫還是比2016年就開源的PaddlePaddle要少。

作者 | Just

出品 | CSDN(CSDNnews)

「我發現,軟體研發總會延期。」一流科技CEO袁進輝說。

按照他的預期,深度學習框架OneFlow做兩年就能開源給開發者檢驗,但時間向後延長了近一年半,「確實預計的不准」。

但無論如何,經過1300多天的打磨,一個由30多人團隊打造的基於靜態調度和流式執行技術的OneFlow深度學習框架終於問世。

對於剛剛在GitHub開源的OneFlow,袁進輝總體打85分。

與其他幾個「國產」AI框架相比,袁進輝認為,在完備性上,OneFlow比在今年3月開源的MindSpore和MegEngine要更好,不過支持的模型庫還是比2016年就開源的PaddlePaddle要少。

效率方面,OneFlow的一類優勢是「人有我優」,比如其他框架做數據並行得90分,他們進一步「挖油水」,做到接近100分;還有一類叫「人無我有」,其他框架基本只有深度定製才能支持超大模型,而OneFlow可以輕易做到。袁進輝給出了一組數據對比,顯示其他框架在大規模模型訓練效率上與OneFlow對比,有數量級的差距。

而在多卡的易用性上,OneFlow要比其他框架要好,但在支持動態圖方面,袁進輝也坦承與PyTorch有差距,不過很快可以追上。

2017年1月,Pytorch正式推出,TensorFlow正如日中天。彼時,國內外除了一線大廠,鮮有創業公司敢去啃AI框架這一硬骨頭,但剛剛成立的一流科技卻對此很堅定,即便那時從資金、團隊、生態、品牌各個維度上來看,外界認為他們做的是Mission Impossible。

他們的信心源自對底層技術方向的把握。2015年,當時還在微軟亞洲研究院的袁進輝(網名:老師木)已經研究了快兩年的AI框架,和內部專家有過很多交流碰撞,這讓他堅定要做一款不同技術方向的AI框架,但那時在研究院找不到工程團隊支持。袁進輝相信,如果能找到數十個「袁進輝」組團,就可以搞定這件大事。

2020年年初,在又一次估錯開源時間後,OneFlow團隊最終搞定,開源了二、三十萬行代碼。他希望,把這個框架的精妙和創新之處,與每一位使用它的開發者分享。

GitHub連結:https://github.com/Oneflow-Inc/oneflow

OneFlow地址:https://www.oneflow.org/#

為什麼是靜態調度和流式執行

CSDN:顯然,現在OneFlow是真正接受廣大開發者檢驗的時候了,跟之前的預期相比,你給目前開源的版本整體打多少分?

袁進輝:預期的肯定是想讓框架綜合來說都很好,但這樣做工程量實在太大,所以現在只能在一個維度上非常有特色,有優勢,整體我打85分,在擴展性這一個維度上是非常好的。

易用性方面,Pytorch是非常好的。TensorFlow完備性非常好,用戶用這個框架做訓練之後,要在伺服器端部署,就要serving,在終端上部署要有輕量級版本,要搞可視化,要支持很多的算子,模型庫要豐富,要能支持圖像、強化學習,自然語言、廣告推薦等應用,要什麼要有什麼,TensorFlow在這方面非常好。

還有擴展性或效率,就是算的快不快,比如用戶投入10倍或100倍資源,能不能真的讓它加速10倍或100倍,以及現在業界出現的Bert、GPT-3等大模型,你的框架能不能做。

OneFlow框架比較大的優勢或特色,就是效率。

CSDN:像GPT-3這些最新的模型OneFlow都會支持?

袁進輝:GPT-3是土豪才能玩的模型,不單是技術問題,暫時還不支持。Bert是支持的,還有像廣告推薦、人臉識別、檢測、圖像分類,最常見的十幾個模型一開源就會支持。

CSDN:OneFlow架構大致分為哪幾層?

袁進輝:最上面是模型庫,模型庫支持CNN等各種經典模型應用,還有Python的API層,基本上其它框架主要也是Python。最底層就是跟硬體打交道的,還有XLA、TVM這些編譯器。

中間兩層是OneFlow和其他框架差別比較大的地方,分別是編譯層和執行層。編譯層其實就是靜態調度的實現,執行層就是計算圖的執行。

CSDN:OneFlow框架的設計理念和技術創新是什麼?

袁進輝:架構是為目的服務的。我們最大的追求是降低用戶使用多機多卡的難度,提升這方面的用戶體驗。

但不幸的是,目前的框架只解決這個需求里最簡單的部分,也就是數據並行。如果神經網絡模型參數量本身不大的話,現在所有框架都能有比較滿意的結果,但後來又出現很多像Bert、GPT-3這種參數量巨大的新模型,以及超大規模的人臉識別,大規模廣告推薦,這就需要支持參數分割的模型並行,模型運行在框架層面是一個非常挑戰的難題,到今天絕大部分主流框架都沒有這個功能,即使定製之後能跑通,效率也很慘,滿足不了工業級需求。

另外,就是要解決編程效率問題,怎麼讓多機多卡分布式編程更容易,也是OneFlow多機多卡體驗的一部分。

為了滿足這個目的,OneFlow趟出了一條其他框架還沒有走的路,也就是靜態調度和流式執行。

CSDN:靜態調度和流式執行怎麼解決問題的?

袁進輝:這跟深度學習算法和異構計算特點相關。深度學習的任務負載特徵跟以前Haddop,Spark面臨的計算不一樣。以前很多任務是批式處理,處理整體數據,計算粒度很大,但深度學習是隨機梯度下降算法,是非常多小粒度的計算構成,接近流式計算,大數據系統里的Flink、Storm也是流式系統,與那些批式處理系統不一樣。

底層支撐硬體也不一樣,深度學習包含大量稠密計算,非常適合高度並行的加速卡,廣泛地依賴於異構計算,既有CPU也有加速卡,不是以前的純CPU集群,GPU等加速器處理更快。所以,每一片任務過來,都是百毫秒甚至在幾毫秒以內差不多就完成了。

一個作業重包含數十萬非常小的轉瞬即逝的任務,每個任務粒度非常低,如果系統裡面有一丁點不順暢,可能就成為整個系統的瓶頸,因為所有的小任務都需要等著調度器做決策。

怎麼解決這個問題?我們的思路是根據深度學習本身的特點,發掘出調度規律,讓系統在計算髮生之前提前得到很多調度的規律的和策略,這種情況下就能把所謂的運行時的那種額外的開銷就降到儘可能的低,幾乎降到可忽略不計,這就能克服異構的流式計算里非常嚴峻的挑戰。

流式執行是做什麼?在這種任務里的多個卡之間頻繁的數據搬運,對整個計算任務來說也是一個非常顯著的開銷,那流式系統就能提前通過整體規劃,在每一次計算髮生之前,就把所需要的數據參數都提前取到,通過流水線把數據搬運和計算做完全地重疊。如果是以前那種批式處理的大數據系統,就沒法做到。

所以,OneFlow的思路就是做一個偏靜態調度和流式執行的系統。

CSDN:針對多機多卡的問題,除了OneFlow提出的解決路徑,市面上其他框架怎麼做的?

袁進輝:在多機多卡任務上,還有解決那些複雜的超大模型場景上的探索,整個行業是比較初級的。像PyTorch只關注易用性的話,重點都是在單卡上,即使做多卡也是最簡單的all reduce,調一下英偉達的NCCL庫就好。

因為近期有一些大模型出來,模型並行、流水並行的方式,整個行業才開始關注,包括Google做的GPipe, Mesh-Tensorflow,還有華為MindSpore對這類模型進行探索,但大部分也僅僅是做一個插件,很難加入主幹代碼,要實現正確且高效是非常難的。

不謙虛地說,在解決多機多卡問題上,其他框架和OneFlow可能是一兩年的差距。

CSDN:按你說的,多機多卡算是強需求,其他框架怎麼一開始就沒考慮到這一點?

袁進輝:這是個好問題,有多方面的因素。一是大部分用戶沒有那麼大規模的計算資源,有多機多卡的都是土豪,大部分用戶面臨的任務或場景還沒到多卡的規模;二是從模型發展的情況來說,超大模型趨勢是近期出現的,早期,大家的認知就是做數據並行就夠了,也不是那麼難。

三是不同的團隊有不同策略,多機多卡屬於公認的技術難題,但摘果子的時候大家肯定先摘低垂的果子,所以有的框架可能先做最廣大用戶看中的一些東西,把多機多卡的優先級往後移了,比如PyTorch一開始主打易用性,TensorFlow後來做多機多卡的加速比收益很低,很難用,但不妨礙它捕獲大量的用戶;四是,多機多卡需要GPU伺服器之間有非常高速的帶寬,這需要一些特殊的軟體和硬體技術,像支持RDMA的乙太網等技術還有普及的過程。

CSDN:能支持超大模型,是OneFlow創業初期就有的判斷還是後期偶然的順勢而為?

袁進輝:這也是個很好的問題。這個判斷是創業初期就有的,但產生這個想法很具有偶然性。

有時候別人也問我,為什麼你最先想到搞這種並行,我就回復,我提前預測到這是個剛需,是遲早會發生的事情,因為底層晶片中,單個晶片的計算力是有物理限制的,你必須通過互聯方式等才可能解決。

在2008~2011年在清華計算機系做博士後時,對使用機器學習方法理解人腦神經網絡結構的形成感興趣。

2013年,我在微軟研究院,這時深度學習已經熱起來,就想把我博士後的課題「理解神經網絡為什麼work」做下去,到現在這個問題還沒有令人滿意的理論結果,以及為什麼CNN這種從人腦結構中啟發得到的網絡,在應用上效果這麼好?要研究這個理論味道十足的問題,那時就會面臨一個挑戰,理解參數量巨大的神經網絡背後的機制,其實計算空間參數量巨大。

這個問題我在微軟研究了一年,這種基於好奇心的研究又回到了計算的手段上。而當時的很多框架,要實現這種研究都不可能,這項研究只好無疾而終。我後面在微軟又做了主題模型LightLDA,是一個非常大規模的模型,我更加相信,框架不能僅僅停留在做CNN這種很小參數量的模型。2014年年底,那時TensorFlow還沒發布,我已經開始想像未來的深度學習框架是什麼樣。

後來,Caffe、TensorFlow發布後,仍然解不了我想要解決的巨大模型問題。所以,我還是要想辦法用一種技術或者架構去設計出一個框架來支持大模型研究。

作為科學家,我有好奇心,就要竭盡全能去驗證,我不想因為工具的缺失,驗證不了一個idea。這就啟發我和團隊一直往這個方向去想,我們也去看別人框架怎麼做,從歷史中去學習經驗,包括硬體疊代、高性能網絡等等,最後不斷提煉,把路線走通。

CSDN:回到OneFlow框架整體的定位,它是一個首創了靜態調度和流式執行架構的ML框架,這個核心定位到今天開源有沒有發生過變化?

袁進輝:沒有,因為問題沒有變化。當時能想到的最好方法也就是這樣的,從那時到現在好幾年時間把幾十個關鍵難題打通,現在的確看到效果是符合預期的。

如果說有什麼擴展的話。過去一兩年整個行業最大的變化就是PyTorch的崛起,應該很少人都預計到它能通過易用性捕獲那麼多用戶,當然,易用性背後也有動態執行等一套技術支持,現在大家都這麼搞了。所以在靜態調度和流式執行外,OneFlow也補充了動態圖執行的機制。

開發者上手門檻高不高

CSDN:OneFlow更多強調的是工業級落地,對學界的開發者支持力度怎麼樣?

袁進輝:應該說,學界開發者也是我們很重視的。首先,已經提供了一些比較經典的模型,單機單卡的使用體驗實事求是說和PyTorch有差距,但我認為會遲早追上。如果想用多機多卡或是單機多卡,OneFlow會很有優勢,一個是效率的優勢,一個是易編程的優勢。

CSDN:開發者上手容易嗎?

袁進輝:我們努力把它做到上手體驗和其他框架差不多,但我們為了提升分布式的易用性,引入了一些新的概念,可能需要開發者去了解、學習一下。當然,在單卡的情況下,和其它框架是差不多的,即使有差距我們也會更快補上。

CSDN:文檔寫得夠詳細嗎?

袁進輝:文檔分三個層次。一部分是API文檔,我們每個OP和TensorFlow、PyTorch幾乎是一樣的,而且即使有的地方沒有文檔,你看TensorFlow或PyTorch的文檔也夠了;還有用戶搭建模型的文檔,是比較全的;設計文檔涉及到代碼裡面的架構,這是欠缺的,框架開源之後希望快速補上,我們會先放出一些比較high level的設計文檔。

CSDN:開源後,框架會如何優化?

袁進輝:我們要做的事還真的蠻多。有模型庫的建設,我們希望用戶最需要的那些模型都在OneFlow上有實現,而且在業界有競爭力,還要做和其他框架的兼容,文檔的也要做。

還有一些比較深的技術難題,包括在框架和編譯器,非常動態的神經網絡,以及偏稀疏的網絡怎麼能在OneFlow框架上支持。

CSDN:在支持上層應用落地上,你們是做to B服務,在場景落地和客戶的選擇上是否有優先次序的篩選?

袁進輝:肯定有。OneFlow框架主打效率和擴展,特別是頭部的網際網路企業、AI企業就有這個需求,我們並不是從這類企業裡面去掙錢,而是真的滿足它的需求,我們也願意去做支持,希望能做成標杆客戶,純粹是為了增加OneFlow的應用場景。

CSDN:開源後,商業化進程有沒有什麼計劃?

袁進輝:框架要在整個平台下面去做商業化,需要和很多其他的模塊系統配合,所以我們是有私有部署的解決方案,特別是傳統大型企業背後的算力中心需要整套解決方案,這可以作為近期商業服務收入,未來要向雲服務發展。

百家爭鳴還是在向終局收斂

CSDN:你現在還能相對客觀的評價和總結一下,市面上其他主流框架的優勢和不足嗎?

袁進輝:先聲明這是利益相關。我是遵從內心,還是不得罪別人呢?

TensorFlow,我覺得是最好,編譯器、框架、 serving、 lite、可視化等都有,還有非常強大的算法科學家、應用場景和工程團隊的支持,社區和生態非常強。不足之處是大而全,在任何一個單點上總能找到比它更好一點的框架,TensorFlow歷史包袱太重,系統太複雜,難以及時吸收框架技術的新突破。

PyTorch,它的優勢也是它的缺點,整個架構是為了解決易用性問題,技術較簡單,整個工程複雜度比較低,切中了用戶痛點,這是它的好處。不足之處在於,為未來特別是大規模需求考慮的不多,訓練出來模型之後進行部署時也比較困難。

MXNet,早期的時候實際上有很多好的想法,但缺乏一個非常清晰的主路線,很長時間沒有大的進步。

PaddlePaddle,完整度是很好的,在百度內部強制使用,有實踐檢驗,但在技術上像跟隨者的角色,沒有突破和引領潮流。

MindSpore,團隊很強,做全棧AI的戰略上想得非常清楚,局部有技術創新,問題是對GPU的支持不足。

MegEngine,亮點是把訓練和推理一體化了,但這個團隊的基因是視覺,對自然語言處理、廣告推薦、強化學習等應用的支持可能不在他們的視野之內。

CSDN:你說過,在資源有限的情況下,做框架必須找到最正確的路徑才能做到又快又好,從百家爭鳴向終局收斂,現在是百家爭鳴還是說技術框架的技術已經在收斂了?

袁進輝:我覺得是現在處於爭鳴和收斂的過程中,離終局可能還有兩年時間。

每一個框架上的生態就能像個黑洞一樣,外界有什麼新的想法也都為自己所吸納。如果一個技術創新不是足夠大的話,這個想法就很容易被生態最強的框架吸過去。所以新框架必須與眾不同,這樣別人吸收你會非常困難,你也就有一個時間窗口能站穩,擁有一波鐵桿用戶,才可能發展壯大。

CSDN:收斂是不是意味著技術路線會走向同質化?

袁進輝:是的,各個框架現在來說長得越來越像了,因為我看你這個想法好,也按照你的套路去做,所以競爭非常白熱化。我相信未來這個市場實際上會變成一個贏者通吃的局面。

CSDN:你說競爭到了白熱化,但總體來看,框架的數量是比較少的。

袁進輝:框架這個領域確實數量不多,因為複雜性和難度已經攔住了很多人,有很多人覺得做框架沒有勝算,他就不會來做這個事,所以但凡進來的都是強者。

CSDN:OneFlow會成為其中一個贏家嗎?

袁進輝:原來是TensorFlow一家獨大,PyTorch的出現造成各占百分之四五十的市場,我們相信OneFlow可以逐漸站住腳,先實現三分天下,甚至可以再進一步,我們有這個信心。

CSDN:有人說,開發者對於訓練和推理這兩個維度的關注點不一樣,在訓練時更關注效率,推理時更關注低功耗,所以訓練和推理可能會分化出兩大框架市場,你同意嗎?

袁進輝:肯定同意。訓練有兩個維度很重要,一個是易用性,研究員要快速的把自己的idea變成product,PyTorch是這個特點,另一個是擴展性,可以不計成本訓練比較大規模模型。但是,在端上要考慮非常受限的場景,要考慮到端側算力弱,功耗要求苛刻,這一定要是非常輕量的,甚至跑的模型都需要壓縮,訓練框架在端上都不work。雖然我剛才說贏者通吃,但在訓練和推理上可能還是會分化出兩套框架。

「從各個維度,他們都說不可能做成」

CSDN:OneFlow框架的研發經歷了幾個階段?

袁進輝:把我們的技術設想跑通就花了快兩年時間,大約是2018年秋天;然後在這上面把經典的模型,調到滿意的狀態,又大概花了快一年的時間,主要是解決原來沒預計到的問題;骨架打造好之後,最近半年都在做易用性、文檔、模型庫等能力。

CSDN:之前你說今年第二季度會開源,但這個時間點明顯延後了,發生了什麼?

袁進輝:我們原來是計劃一季度開源,那時曠視和華為也開源了,但我們發現他們模型豐富度有點單薄,會影響開源效果,為了做到一個比較令人滿意的狀態,就再推遲了三、四個月。

CSDN:一個初創公司做框架,歷經三年多才開源,最困難的階段是什麼時候?

袁進輝:2018年的秋冬,那時已經研發了一年半以上。創業者有個18個月魔咒的說法,也就是一年半沒看到希望,沒有正反饋,心態就會發生變化,會失去耐心。

我自己肯定非常堅定,但團隊里不是每一個人都這麼堅定,長時間沒有正反饋,有一部分人信心和耐力到了極限,所以那個時間段,我又頂上去做了一段時間研發。同時,之前的融資也快花完了,那既是事實上的冬天,也是資本寒冬,公司處於瀕死邊緣,人員規模還做了收縮。

CSDN:哪個機構解了OneFlow的燃眉之急?

袁進輝:快手,還有老股東。

CSDN:快手為什麼會投,有戰略上的考慮嗎?

袁進輝:快手創始人宿華在種子輪就投了我們。我們當時和快手在同一棟樓,也經常借他們的計算資源,所以知根知底,他們知道我們做的事是紮實的,是真的做出來了,只不過還差臨門一腳。

當然,快手本身的業務規模很大,也非常需要大規模機器學習基礎設施,這個需求是存在的,而且知道這個問題難度很大。

CSDN:當時,內部和外部對你們最大的質疑是什麼?

袁進輝:質疑有很多,從技術能力、生態逆轉各個維度去看,都認為我們是不可能做成。

CSDN:怎麼面對這些質疑?

袁進輝:信心必須靠理性,通過紮實的分析論證這個事情一定會發生,這個需求一定會發生。不管是誰解決這個需求,遲早會走到我們設想的這條路上來。那時,我們已經走到這條路上了,而別人還沒有入手這個方向,我們有先發優勢,可能是世界上最先搞定這個問題的團隊。

如果沒有這些理性分析,就的確會覺得很難,會者不難,難者不會。當我們把這個路子想通時,就是執行的問題,只是說別人還不知道,別人看到也不相信,但對內部的人來說,它的發生只是時間早晚的問題。

CSDN:現在所有的框架都在進步,而且其他企業的投入比OneFlow都要大,你說是因為堅定和信心,但從另一維度,是不是可以理解成你是相信開發者群體有著識別好產品的眼光?

袁進輝:的確。特別在開源的情況下,開發者可直接去做判斷和體驗,他能知道好壞,好的東西一定會得到認可。

CSDN:生態搭建在開源後的一兩年應該比較重要,你們有沒有實質性的初步規劃?

袁進輝:這屬於術的層面,包括策略、執行還有營銷。最根本的還是兩點:一,開源社區里有價值的東西,一定會出頭;二,OneFlow本身的技術領先,這是我們非常堅定的。這兩點是前提,後面要解決的問題就是,通過一些手段告訴別人這是好東西。

CSDN:現在是做開源軟體最好的時候嗎?

袁進輝:開源背後有很深的話題,開源本質是什麼?怎麼來的?傳播規律是什麼?可談的東西特別多。回到問題本身,現在確實是一個很好的時間,現在出現了專門做開源,和雲結合的蠻好的To B商業模式,國內還有新基建的政策紅利。

CSDN:如果復盤一下,這三年來創業的最大感受是什麼?

袁進輝:總的來說,在一些主要的事情上,沒有做錯什麼。我們創業,主要的矛盾都來自於在非常受限的資源下如何做好一件非常難的事情。在這種情況下,再高超的管理、運作策略也沒辦法,矛盾在這兒就是非常激烈。

所以,如果能解決資源問題,肯定幫助很大。解決這些困難,我本人也經歷了一個成長的過程,知道怎麼和資本打交道,怎麼說服技術高手加入。

解決資源問題,首先,創業者自己要想明白,想通想透。說服自己,你只需要想很近的東西。但要說服更多的人來一起幫助你,你就必須想到底,因為別人看到創始人也沒想通,就沒信心。其次,創業者不僅要想通,而且要能說明白,怎麼以非常好的故事講出來,得到別人認同。

CSDN:OneFlow終於開源了,最近心情怎麼樣?

袁進輝:最激動的時刻在前面已經發生了,當技術設想打通那一刻,看到效果了,那時最激動。現在其實比較平靜,感覺很多事情都在預計之內,一件件自然發生而已。

CSDN:要把OneFlow推給更多的開發者,對他們有什麼想說的?

袁進輝:開發者群體蠻分化的,每位工作背景不同的人看重的點都不一樣,剛開始沒辦法讓所有的開發者滿意。我最想和開發者朋友說的是,我本人目力所及,OneFlow確實包含了非常美好、精妙的創新想法,非常希望大家可以去感受下。當然,如果你發現一些問題,也希望大家包容、反饋,我們會儘快修復。

關鍵字: