到 2022 年,人工智能已經(jīng)發(fā)展幾十年,如今我們再談?wù)撊斯ぶ悄芤巡辉倬窒抻诶碚摗?a href="http://ttokpm.com/v/" target="_blank">工業(yè)界需要應(yīng)用人工智能去解決問題,學(xué)術(shù)界也需要得到相關(guān)模型在大規(guī)模應(yīng)用場景下的反饋。然而隨著技術(shù)的演進(jìn),我們發(fā)現(xiàn),基于開源算法的人工智能項目陷入了“落地難”的困境,“從 98% 到 99.9% 精度”的這個過程尤其困難,所以業(yè)內(nèi)就有了“人工智能或許不適合開源”的聲音出現(xiàn)。
于是,本期“InfoQ 極客有約”與“OpenI 啟智社區(qū)”聯(lián)合推出的系列直播欄目便邀請到了聯(lián)通研究院的教授級高級工程師、啟智社區(qū)開源項目“CubeAI ?智立方”的負(fù)責(zé)人霍龍社博士,聽他給我們分析一下當(dāng)下人工智能開源項目的現(xiàn)狀與未來,共同探討下“人工智能到底適不適合開源”,并一起了解下,為推動 5G 與 AI 融合創(chuàng)新,中國聯(lián)通在 2019 年發(fā)布 CubeAI 智立方平臺后的技術(shù)演進(jìn)與思考。
以下為直播內(nèi)容整理:
InfoQ:AI 到底適不適合開源?您覺得為何會有“開源不適合 AI”的聲音出現(xiàn)?您如何評價當(dāng)下 AI 技術(shù)的“開源”?
霍博士:從普通開發(fā)者的角度來看,開源本質(zhì)上是一種促進(jìn)技術(shù)進(jìn)步、促進(jìn)科技創(chuàng)新的手段。所謂站在巨人的肩膀上,開源使得普通的軟件開發(fā)者一上來就能夠有一個較高的起點(diǎn),而不像我們在幾十年前開發(fā)軟件一樣,每一個項目都得從零開始,從最底層開始,一行行的來積攢代碼?,F(xiàn)在不一樣了,在開始一個項目之前,首先上網(wǎng)找找有沒有合適的開源代碼來打底子,搭建基礎(chǔ)的代碼框架,基礎(chǔ)的架子搭起來之后,只需要在上面專心實現(xiàn)自己特有的功能模塊就可以了。即使找不到非常合適的基礎(chǔ)代碼,類似的東西也可以拿過來作為參考,啟發(fā)自己的開發(fā)思路。從這個角度來說,開源確實是一個好東西,不論什么技術(shù)都應(yīng)該開源,沒有什么適合不適合的。
從公司的角度來說,開源又是一把雙刃劍。開源的歷史發(fā)展其實也說明了這個問題。最開始商業(yè)公司開發(fā)的軟件基本都是閉源的,不僅閉源,而且可能還有著一些非常嚴(yán)格的防止外泄的管理制度。也就是最近這些年來,開源才逐漸形成了一種潮流。因為對于公司來說,考量是否適合開源的一個重要因素可能主要還是利益,對公司的營銷收益以及長期發(fā)展能有多大的正面或負(fù)面的影響。之前之所以對代碼嚴(yán)格管理,就是怕泄露之后被別人抄襲,影響自己的生意?,F(xiàn)在又把部分代碼拿出來開源,部分原因也是為了能夠營造自己的技術(shù)生態(tài)環(huán)境,把大量開發(fā)者收攏到自己的開發(fā)生態(tài)圈之內(nèi),同樣可以達(dá)到擠壓競爭對手的目的。而在當(dāng)今世界開源已被廣大開發(fā)者所期待和習(xí)慣的形勢下,開源開放必將成為不可逆轉(zhuǎn)的世界潮流。因為對于某項技術(shù)來說,如果你不開源,但是周圍有很多別的競爭對手選擇開源,廣大開發(fā)者和使用者必然會逐漸選擇加入到別的開源創(chuàng)新的隊伍中去,從而慢慢擠壓掉你的市場份額。當(dāng)然,除非你有非常獨(dú)特的技術(shù)優(yōu)勢,但是這種優(yōu)勢隨著時間的流逝可能也會慢慢喪失掉的。至于說到 AI 技術(shù),從開源的角度我認(rèn)為跟別的技術(shù)也沒有什么特別的區(qū)別,所以它的發(fā)展趨勢也必然是應(yīng)該全面走向開源的。
至于說有“開源不適合 AI”的聲音出現(xiàn),其實有點(diǎn)以偏概全。AI 的開源應(yīng)該是包含了很多層面上的,例如基礎(chǔ)設(shè)施、軟件環(huán)境、框架、算法、應(yīng)用等等,而不僅僅是一個模型的訓(xùn)練。就算是訓(xùn)練一個模型,模型的規(guī)模也是有大有小的,并不見得都是超大模型。就算是超大模型,你開源出來我訓(xùn)練不了,我看看總還是可以吧?說不定從中能吸取點(diǎn)什么思路,給你提點(diǎn)什么好的意見?而且既然別人都用不了你的模型,你開源出來你又吃不了什么虧,那又為什么不可以開源呢?
當(dāng)然了,AI 的模型訓(xùn)練確實也還是有跟別的技術(shù)不太一樣的東西的,那就是需要大規(guī)模甚至超大規(guī)模的數(shù)據(jù)。對于學(xué)術(shù)界來說,往往使用一些網(wǎng)上公開的數(shù)據(jù)集就可以了。而對于工業(yè)界來說,數(shù)據(jù)的保密性可能就存在一定的問題。數(shù)據(jù)的無法開源也會影響到開源模型的有效性和實用性,這方面是值得注意和研究的??傊?,個人認(rèn)為并不存在什么適合不適合開源的問題,而主要是愿意不愿意開源,以及開源到什么程度的問題。
InfoQ:依賴開源算法,AI 技術(shù)是否可以完成深度落地?
霍博士:這個問題不好回答,但如果能改成“借助開源算法,是否可以促進(jìn) AI 技術(shù)高效落地”,那這個答案就是比較肯定的了。
開源只是一個能夠促進(jìn)協(xié)作創(chuàng)新、提高開發(fā)效率的手段,而并不是一個無所不能、能夠包打天下的東西。不同的群體對于開源的貢獻(xiàn)和索取的期望值不盡一致,導(dǎo)致開源內(nèi)容的品種和質(zhì)量也是五花八門、良莠不齊的。比如學(xué)術(shù)界開源的項目可能更傾向于一些理論、算法的驗證,距離實際生產(chǎn)應(yīng)用會較遠(yuǎn)一些。工業(yè)界對于開源的態(tài)度,出于利益競爭的考慮,可能也會有一些掐頭去尾,不太可能把自己的老底完全兜出來的;有些企業(yè)拿出來用于開源的代碼和自己在現(xiàn)網(wǎng)生產(chǎn)系統(tǒng)中使用的代碼可能是兩套完全不同的東西,從算法和系統(tǒng)運(yùn)行的性能、安全性、可靠性、穩(wěn)定性、適用環(huán)境等方面都會打一定的折扣。所以,要完成 AI 技術(shù)的深度落地,可能并不能完全依賴開源算法。
但是,不完全依賴開源并不是說就完全不依賴開源,AI 技術(shù)的落地還是要而且必須要借助于開源算法的。借助開源的效果,最主要的就是提高開發(fā)和生產(chǎn)效率。對于一個面向?qū)嶋H生產(chǎn)運(yùn)營的項目,拿一個開源代碼過來不加修改直接運(yùn)行幾乎 99% 是不太可能成功的,但是利用現(xiàn)有的開源代碼進(jìn)行二次開發(fā),通過采取擴(kuò)展功能、改善性能、增強(qiáng)安全性可靠性等措施,或者僅把開源代碼當(dāng)做參考原型,借助其工作原理來重新進(jìn)行代碼設(shè)計和開發(fā),與完全不參考開源代碼自己一切從頭開發(fā)比起來,其開發(fā)效率都必然會大大提高,達(dá)到事半功倍的效果。
InfoQ:2019 年,中國聯(lián)通為推動 5G 與 AI 融合創(chuàng)新,發(fā)布了 CubeAI 智立方平臺,當(dāng)初為什么選擇開源?
霍博士:關(guān)于 CubeAI 智立方這個平臺的開發(fā)和開源,其實也并不是一開始就規(guī)劃好要做開源,而是有一個逐漸演進(jìn)和發(fā)展的過程的。CubeAI 智立方是中國聯(lián)通研究院自主研發(fā)的集 AI 模型自動化服務(wù)封裝、發(fā)布、共享、部署和能力開放等功能于一體的開源 AI 算能服務(wù)平臺,其核心作用在于打通 AI 模型開發(fā)至實際生產(chǎn)應(yīng)用之間的壁壘,加速 AI 創(chuàng)新和應(yīng)用進(jìn)程,促進(jìn) AI 應(yīng)用從設(shè)計、開發(fā)直到部署、運(yùn)營整個生命周期的自動化快速迭代和演進(jìn)。
CubeAI 其實主要實現(xiàn)了以下三個功能:AI 模型的自動化服務(wù)封裝、自動化模型發(fā)布和自動化模型部署。所謂自動化服務(wù)封裝,就是將原先只能在本地調(diào)用的模型推理程序通過簡單的代碼模板套用自動封裝成為可通過網(wǎng)絡(luò)遠(yuǎn)程訪問的 API 服務(wù)。所謂自動化模型發(fā)布,就是將經(jīng)服務(wù)化封裝的模型推理程序自動打包成微服務(wù)容器,一鍵發(fā)布至 CubeAI 提供的模型共享托管平臺,供用戶進(jìn)行瀏覽、評價、交易和部署。所謂自動化模型部署,就是將 CubeAI 模型共享平臺中的模型推理微服務(wù)一鍵部署至 k8s 等云原生算力平臺,部署之后直接向用戶提供基于 API 接口的 AI 能力開放服務(wù)。
最開始我們想要做這個平臺的時候,主要是基于內(nèi)部項目的一些需要。剛開始并沒有想要完全自己做,而是打聽到有一個叫做 Acumos 的開源項目,能夠提供類似的一些功能。Acumos 是 Linux foundation 下面的一個深度學(xué)習(xí)基金會立項的一個開源項目,但它的開發(fā)者主要來源于 AT&T 公司,跟我們聯(lián)通一樣都屬于電信運(yùn)營商。剛開始我們是想直接利用 Acumos 的代碼,希望能夠直接把它跑起來,最多是在它的基礎(chǔ)上根據(jù)我們的需求改吧改吧,來滿足我們的應(yīng)用。但在實際使用過程中,我們發(fā)現(xiàn)這樣的做法并不太行得通。首先下載下來的代碼在我們的機(jī)器上就跑不起來,好容易想盡各種辦法把它勉強(qiáng)跑起來了,好多功能調(diào)用的時候又出錯,幾乎無法使用。其次發(fā)現(xiàn)他們的代碼過于龐雜,而且不是我們想要的微服務(wù)架構(gòu),二次開發(fā)和代碼維護(hù)的難度都非常大。
所以我們就決定不直接基于 Acumos 代碼進(jìn)行二次開發(fā),而是重起爐灶搭建我們自己的代碼框架,然后參考和部分借用 Acumos 的代碼來進(jìn)行開發(fā)。也就是說,我們不直接使用 Acumos 已經(jīng)編好的筐,而是新編一個我們自己的筐,然后把 Acumos 筐中覺得好用的蛋拿到我們的筐中來,實現(xiàn)我們需要的功能。
基于這個思路,我們很快就完成了 CubeAI 平臺第一個版本的開發(fā),并在 2019 年的世界移動通信大會進(jìn)行了發(fā)布??紤]到它并不是一個單一的產(chǎn)品或平臺,而是需要與產(chǎn)業(yè)界各方進(jìn)行交流合作,共同來構(gòu)建產(chǎn)業(yè)合作生態(tài)環(huán)境,于是我們在發(fā)布這個版本的同時就決定將其同步進(jìn)行開源。當(dāng)然在決定開源的時候,除了面向產(chǎn)業(yè)鏈生態(tài)合作方面的因素之外,我們也考慮了其他的一些理由。首先我們的這個 CubeAI 最初是在參考開源軟件 Acumos 的基礎(chǔ)上進(jìn)行開發(fā)的,雖然后來我們實際上已經(jīng)完全脫離了 Acumos 的體系,但最初畢竟還是受到了它的影響,既然來源于開源,也就應(yīng)該回饋于開源,這是其中一個考慮因素。另外就是我們覺得我們剛開始參考的這個 Acumos 開源軟件做的并不太好,而且不太適用于我們中國人使用,而我們自主開發(fā)的這個 CubeAI 從好幾個方面都比外國人做的東西更好用,我們就希望能把它開源出去來向外界進(jìn)行展示,也算是一種宣傳吧。
InfoQ:從目前人工智能行業(yè)發(fā)展來看,AI 模型開發(fā)與實際生產(chǎn)應(yīng)用之間有哪些壁壘?作為開源 AI 算能服務(wù)平臺,CubeAI 智立方是如何打通這些壁壘的?
霍博士:大家都知道 AI 的使用主要包括模型訓(xùn)練和模型推理兩大步驟。模型開發(fā)者首先使用大量數(shù)據(jù)訓(xùn)練出一個模型來,然后模型使用者調(diào)用這個預(yù)訓(xùn)練好的模型,輸入自己的數(shù)據(jù)來執(zhí)行模型推理,計算出自己的預(yù)測結(jié)果來。現(xiàn)在 AI 方面大量的工作主要集中在模型訓(xùn)練方面,而對于如何將訓(xùn)練后的模型交付給最終用戶進(jìn)行使用關(guān)注得并不多。究其原因,可能主要是因為模型訓(xùn)練過程本身就包含了模型推理,大多數(shù)模型開發(fā)者并沒有覺得調(diào)用和執(zhí)行模型推理是一件什么難事。而實際上,在真實的行業(yè)應(yīng)用中,廣大的模型使用者可能對 AI 模型訓(xùn)練和推理的具體技術(shù)細(xì)節(jié)并不是太了解,讓他們直接使用與模型開發(fā)者一樣的編程環(huán)境來進(jìn)行模型推理實在就有點(diǎn)勉為其難了。
舉個例子,現(xiàn)在學(xué)校里的研究生發(fā)表 AI 相關(guān)的論文,一般都還同時把自己的源碼上傳到類似 Github 這樣的開源托管平臺上;審稿人在閱讀論文的時候,如果想親自核實一下論文算法的運(yùn)行效果,就需要先把作者開源的代碼下載到本地,然后根據(jù) README 指示在自己的電腦上從頭配置一套運(yùn)行環(huán)境,然后再在這個環(huán)境中運(yùn)行模型推理代碼。由于每個作者每個模型的運(yùn)行環(huán)境千差萬別,這個從頭配置環(huán)境并運(yùn)行代碼的過程有時是十分困難的,沒有非常熟練的 AI 模型開發(fā)經(jīng)驗的人員一般很難輕松搞定。當(dāng)然,在這個例子中的審稿人通常是行業(yè)專家,完成這些工作也許不是什么大的問題,但也會浪費(fèi)很多時間。而對于像我這樣的對于什么是神經(jīng)網(wǎng)絡(luò)、什么是張量等等都搞不懂的普通人來說,如果也想去試試,就不是那么簡單的了。而在其他的行業(yè)應(yīng)用中,真正的用戶其實大部分就是類似我們這樣的普通人,而不個個是 AI 和編程專家。
為了解決這個問題,一個辦法就是把 AI 模型服務(wù)化,把它部署到云端,然后用戶不需要在自己的本地電腦上安裝配置運(yùn)行環(huán)境,而是直接通過調(diào)用云端提供的服務(wù)化 API 接口來獲取模型推理結(jié)果就可以了。這種方式現(xiàn)在已經(jīng)大量存在,好多商業(yè)化的網(wǎng)站和生產(chǎn)應(yīng)用系統(tǒng)也都采用的是這種模式。但是,這種模式雖然方便了使用者,但卻給普通的模型開發(fā)者帶來了麻煩。因為在這種模式下,要想把一個模型推理程序變成云端服務(wù)器上的服務(wù)化 API 接口,是需要由網(wǎng)站運(yùn)營者針對每一個模型程序?qū)iT進(jìn)行服務(wù)化定制開發(fā)和部署的,不僅流程繁瑣、工作量大,而且對于普通的模型開發(fā)者也是可望而不可及的,只有那些實力雄厚、擁有自己服務(wù)器和網(wǎng)站的企業(yè)才可能做到。以上面提到的論文審稿為例,一個研究生可以很輕松把自己的模型代碼放到 github 等代碼托管平臺上,但是卻很難有渠道將其服務(wù)化部署到一個大家都可以訪問的網(wǎng)站上去。
我們做的這個 CubeAI 智立方,剛好就可以解決這個問題,打破模型開發(fā)者到模型使用者之間的這個障礙,使得模型開發(fā)者不需要了解云端網(wǎng)站開發(fā)和服務(wù)化封裝的基本原理和編程知識,只需要簡單套用一下 CubeAI 提供的模板程序,就可以將自己的模型程序一鍵發(fā)布和部署至云端網(wǎng)站,以服務(wù)化 API 的方式對所有用戶提供模型推理服務(wù);而模型使用者也不需要了解和掌握任何 AI 編程和運(yùn)行環(huán)境配置等知識,只需要使用經(jīng) CubeAI 封裝的非常簡單的方式調(diào)用網(wǎng)絡(luò) API 接口就可以了。
InfoQ:CubeAI 智立方由 AI 建模、AI 模型共享(AI 商城)和 AI 能力開放三大平臺組成。分別解決了 AI 模型使用者的哪些問題?
霍博士:在最初的規(guī)劃中,CubeAI 是打算由 AI 模型訓(xùn)練、AI 模型共享和 AI 能力開放這 3 個平臺組成。在實際做的過程中,我們實際上沒有自己去做模型訓(xùn)練這一塊。當(dāng)然這樣說也不太準(zhǔn)確,我們曾經(jīng)自己也開發(fā)過一個模型訓(xùn)練平臺的,但做出來后發(fā)現(xiàn)做的并不太好,跟目前市場上已經(jīng)有的一些模型訓(xùn)練平臺相比,采用的技術(shù)和實現(xiàn)的功能都大同小異,但好用性和可用性等方面都不是太好,所以后來就決定放棄這一塊,不再自己做,而是直接使用現(xiàn)成的訓(xùn)練平臺。不論用哪一家訓(xùn)練平臺訓(xùn)練出來的模型,都可以與我們的模型共享平臺進(jìn)行對接。例如,百度的 AI-Studio 就是一個很好的 AI 訓(xùn)練平臺,從界面友好性等方面都比我們當(dāng)初自己做的那個要好用得多。啟智社區(qū)的 AI 協(xié)作平臺功能就更加強(qiáng)大了。
AI 模型共享平臺可以看作是一個經(jīng)服務(wù)化封裝的 AI 模型推理程序運(yùn)行體的托管倉庫。這個經(jīng)服務(wù)化封裝的 AI 模型推理程序運(yùn)行體的具體表現(xiàn)形式目前就是一個 Docker 容器。把每一個模型推理程序封裝成一個 Docker 容器,這樣就實現(xiàn)了云原生,可以隨時隨地將其部署至任何可以運(yùn)行 Docker 的環(huán)境中運(yùn)行并提供模型推理服務(wù)。打個比方,跟 GitHub 等傳統(tǒng)的靜態(tài)代碼托管平臺相比,我們可以把 CubeAI 的模型共享平臺看作是一個可以運(yùn)行的“活體程序”的托管平臺。通過平臺提供的界面,用戶可以瀏覽、搜索自己感興趣的模型,也可以像市場中的商品一樣對模型進(jìn)行評價、收藏、交易、分享,對于已購買的模型,可以將它部署至任意云平臺或者本地電腦。目前,因為還沒有商業(yè)化運(yùn)行,我們暫時還沒有實現(xiàn)模型交易這個功能,所有模型都還是免費(fèi)的,所以我們暫時還把這個平臺叫做 AI 模型共享平臺,而沒有叫做 AI 商城。
在 AI 模型訓(xùn)練平臺到 AI 模型共享平臺之間,實際上還是有一個 AI 模型服務(wù)化的過程的。在這里我們主要是開發(fā)了一個叫做 ServiceBoot 的 AI 模型服務(wù)化引擎,還有一個模型服務(wù)化程序模板。模型開發(fā)者只需要套用這個程序模板對他開發(fā)好的模型推理程序進(jìn)行非常簡單的代碼封裝,就可以達(dá)到模型服務(wù)化的效果,利用 ServiceBoot 引擎以網(wǎng)絡(luò) API 接口的形式對外提供模型推理服務(wù)。封裝好的模型服務(wù)器程序,再經(jīng)過一鍵發(fā)布操作,就可以將其發(fā)布至 AI 模型共享平臺。在模型發(fā)布過程中,AI 模型共享平臺會自動將經(jīng)服務(wù)化封裝的 AI 模型推理程序打包成微服務(wù)形式 Docker 容器鏡像,模型運(yùn)行所需要的 Python 環(huán)境、AI 框架等等都會被自動選擇并打包進(jìn)去,而不需要用戶的手動干預(yù)。
最后再來解釋一下這個 AI 能力開放平臺。本質(zhì)上來說,用戶可以將從 AI 模型共享平臺購買的 AI 模型部署至任何可以運(yùn)行 Docker 容器的環(huán)境中進(jìn)行運(yùn)行,例如各類云平臺、本地電腦等等。但是考慮到很多用戶自己并沒有合適可用的云平臺,所以我們就開發(fā)了這樣一個 AI 能力開放平臺,用于進(jìn)行模型的部署和運(yùn)行管理。我們目前采用 k8s 來搭建 AI 能力開放平臺。模型部署至 k8s 之后,通過 AI 能力開放平臺提供的用戶界面,用戶可以查看模型的運(yùn)行狀態(tài);還可以對模型運(yùn)行的生命周期狀態(tài)進(jìn)行管理,例如執(zhí)行實例擴(kuò)縮容等操作;還可以使用模型提供的 API 接口進(jìn)行模型推理測試;甚至還可以利用模型開發(fā)的 Web 界面進(jìn)行可視化模型演示。
InfoQ:經(jīng)歷 3 年的發(fā)展,CubeAI 智立方在技術(shù)方面實現(xiàn)了怎樣的突破?在 5G 與 AI 融合方面有怎樣的探索?目前在攻克的技術(shù)難題是什么?
霍博士:CubeAI 從 2019 年開始做,到現(xiàn)已經(jīng)斷斷續(xù)續(xù)開發(fā)了不短的時間,也迭代了不少的版本。這個過程中還是做了一些比較有價值的事:
第一個就是 AI 模型服務(wù)化引擎的開發(fā)。模型服務(wù)化其實可以算作是 CubeAI 中最核心最關(guān)鍵的一個東西,與普通的 Web 框架相比,關(guān)鍵是要能夠?qū)崿F(xiàn)對普通的模型推理程序進(jìn)行自動化服務(wù)封裝,還有就是要實現(xiàn)模型加載和模型推理兩個過程的分離,以便提升模型推理的性能。剛開始我們直接使用 Acumos 提供的一個叫做 acumos-model-runner 的服務(wù)化引擎,但在使用過程中發(fā)現(xiàn)它這個東西僅僅對 TensorFlow 等少數(shù) AI 框架有效,連對 PyTorch 這樣主流的框架都不支持。于是我們就經(jīng)過分析之后對 acumos-model-runner 進(jìn)行了改造,基本能夠支持對所有 AI 框架開發(fā)的模型進(jìn)行服務(wù)化封裝。再后來我們進(jìn)一步研究,發(fā)現(xiàn) acumos-model-runner 的實現(xiàn)原理和使用方式都非常別扭,有把簡單問題復(fù)雜化的傾向,導(dǎo)致開發(fā)效率、運(yùn)行性能和用戶體驗等方面都不是很友好。于是我們就又徹底拋棄 acumos-model-runner,完全重新設(shè)計和開發(fā)了一個全新的服務(wù)化引擎,不論從技術(shù)原理、開發(fā)效率、運(yùn)行性能還是用戶友好性等方面,都取得了超越 acumos-model-runner 的非常好的效果。我們最開始給這個服務(wù)化引擎起了個名字叫作 iBoot。
第二個是基于微服務(wù)框架的平臺開發(fā)和重構(gòu)。前面說過,CubeAI 最初是參考開源項目 Acumos 開發(fā)的。但是由于我們對 Acumos 的代碼結(jié)構(gòu)不是很滿意,所以一開始我們選擇了采用基于 SpringCloud 的開源微服務(wù)框架來搭建代碼主體框架,僅僅是參考 Acumos 的部分代碼來實現(xiàn)平臺功能,這樣就形成了 CubeAI 的最初版本。在使用 SpringCloud 微服務(wù)框架的開發(fā)過程中,我們也遇到了一些問題,促使我們決定試著開發(fā)一個自己的微服務(wù)框架。首先是這個框架非常龐大,調(diào)用關(guān)系非常復(fù)雜,雖然號稱是開源的,但有些組件深入 debug 之后發(fā)現(xiàn)還是找不到源碼,從而導(dǎo)致對有些功能的實現(xiàn)知其然不知其所以然,有些不符合自己使用習(xí)慣的東西想改又不知道該怎么改,有些搞不清的東西也不知道到底敢不敢用。其次是這個框架只支持 java 編寫的微服務(wù),不支持其他語言開發(fā)微服務(wù)的接入,不利于微服務(wù)的兼容擴(kuò)展。再次是 Java 編程的學(xué)習(xí)和調(diào)試難度較高,而我們的開發(fā)力量和水平有限,導(dǎo)致開發(fā)效率不太高??紤]到現(xiàn)在絕大多數(shù) AI 模型都是基于 Python 進(jìn)行開發(fā)的,大多數(shù) AI 開發(fā)者對它都比較熟悉,而且 Python 也相對比較容易學(xué)習(xí),能夠大大提高開發(fā)效率,所以我們就試著使用 Python 對整個 CubeAI 平臺代碼進(jìn)行了重寫,包括其中的微服務(wù)框架部分。
第三個是微服務(wù)引擎和微服務(wù)框架的抽象和重構(gòu)。最開始用 Python 重寫的 CubeAI 平臺,其代碼結(jié)構(gòu)還是比較繁瑣的,特別是涉及到網(wǎng)絡(luò)并發(fā)處理等操作,其中的異步編程機(jī)制不僅編程麻煩,而且一般人很難理解和學(xué)習(xí)。正在為這個問題犯愁的時候,突然想起來們的 iBoot 既然可以用來對 AI 模型程序進(jìn)行服務(wù)化封裝,那是不是也可以用來開發(fā)普通的微服務(wù)程序呢?于是我們就參考 iBoot 又開發(fā)了一套通用的微服務(wù)引擎,起名叫作 ServiceBoot。ServiceBoot 對微服務(wù)訪問的各類異步并發(fā)操作以及 API 接口映射、參數(shù)處理機(jī)制等等進(jìn)行了統(tǒng)一的抽象和封裝,提供了一套簡單易懂的函數(shù)式網(wǎng)絡(luò)編程接口,能夠大大簡化編程復(fù)雜度,提高微服務(wù)開發(fā)的效率。在這個基礎(chǔ)上,我們又把整個平臺中提供微服務(wù)框架的基礎(chǔ)組件抽象出來,使用 ServiceBoot 重新編寫,這樣就構(gòu)成了一套獨(dú)立的通用微服務(wù)框架基礎(chǔ)組件,我們給它起了個名字叫作 CubePy。CubePy 是一套通用的微服務(wù)框架,包括微服務(wù)注冊和發(fā)現(xiàn)、API 網(wǎng)關(guān)、用戶認(rèn)證授權(quán)、應(yīng)用管理、文件和鏡像管理、前端微服務(wù)模板等基礎(chǔ)組件,它不僅可以用于開發(fā) CubeAI,而且可以用于開發(fā)其他任意的云原生微服務(wù)類應(yīng)用。CubePy 的基礎(chǔ)組件雖然是使用 Python 和 ServiceBoot 寫的,但是它并不限于僅支持 Python 微服務(wù)接入,用其他語言寫的微服務(wù),只要符合 CubePy 的相關(guān)接口要求,也都是可以接入到 CubePy 框架來進(jìn)行管理的。
因為歷史的原因,之前 iBoot 和 ServiceBoot 一直是按照兩個產(chǎn)品來進(jìn)行開發(fā)和維護(hù)的,一個專門用于 AI 模型的開發(fā)和服務(wù)化封裝,一個專門用于 CubePy 微服務(wù)的開發(fā)。前一段時間我們剛剛對這兩個東西進(jìn)行了融化整合,把它們整合成了一個產(chǎn)品,名字定為 ServiceBoot。這樣對內(nèi)對外都比較方便。對外便于用戶理解和使用,對內(nèi)便于開發(fā)團(tuán)隊的開發(fā)和維護(hù)。也就是說,以后不論是開發(fā)普通的微服務(wù)應(yīng)用,還是開發(fā) AI 模型推理服務(wù),都使用這個統(tǒng)一的 ServiceBoot 就行了。而且,ServiceBoot 不僅僅可以用來對 AI 模型進(jìn)行服務(wù)化封裝的,實際上它可以用來對任意的 Python 程序進(jìn)行服務(wù)化封裝,在開發(fā)和部署效率、服務(wù)性能和用戶友好性等方面都明顯好于其他的 Python Web 框架。
InfoQ:CubeAI 智立方進(jìn)入 OpenI 項目培育管道后,有怎樣的體驗?獲得了哪些助力?您如何評價 OpenI?
霍博士:CubeAI 大概是在去年 7 月份,經(jīng)過啟智社區(qū)嚴(yán)格的評審流程,正式被社區(qū)采納,作為重點(diǎn)開源項目貢獻(xiàn)至啟智社區(qū)并進(jìn)入社區(qū)項目孵化管道的。進(jìn)入社區(qū)這一年多來,在社區(qū)的支撐和培育之下,我們的項目得到了良好的發(fā)展,取得了顯著的進(jìn)步,總體感覺是非常不錯的。
我們以單位名義、以會員方式正式加入了社區(qū),并且在社區(qū)正式立項了開源項目,所以就可以光明正大地來搞開源,不再受制于一些條條框框的約束和限制了。
其次社區(qū)提供了 AiForge 這樣一個非常好的代碼托管協(xié)作開發(fā)平臺。在加入啟智社區(qū)之后,經(jīng)過一段時間的試用,我們就喜歡上了這個平臺,并且把 CubeAI 項目的所有代碼開發(fā)活動都切換到了這個平臺之上。主要原因就是因為它的好用,一個是速度快,瀏覽、提交、合并代碼都非常流暢,幾乎沒有什么卡頓;二是用戶界面友好、操作簡單方便,沒有太多啰嗦和看不懂的地方;再就是它本身也是一個持續(xù)迭代開發(fā)的開源項目,你可以在線看到它的持續(xù)更新,而且每次都是向著更好的用戶體驗。不僅如此,在使用過程中如果遇到什么問題,都可以及時提出并得到反饋,好的修改建議會很快出現(xiàn)在下一個發(fā)布的版本之中。這些都是以前用其他代碼托管平臺和工具時所無法體驗到的。
還有就是在加入社區(qū)之后,社區(qū)給我們提供了很多展示和宣傳項目的機(jī)會和平臺,例如 EngineClub 論壇講座、啟智校園行、蘇州智博會、啟智開發(fā)者大會、中國開源大會等等。通過參與這些活動,一方面宣傳和擴(kuò)大了 CubeAI 的影響,另一方面也學(xué)到了更多開源方面的知識和先進(jìn)經(jīng)驗。在年初召開的啟智開發(fā)者大會上,CubeAI 還有幸榮獲了啟智社區(qū)頒發(fā)的優(yōu)秀開源項目獎,我們的開發(fā)團(tuán)隊成員也榮獲了啟智社區(qū)的優(yōu)秀開發(fā)者稱號。最近一段時間社區(qū)搞的“我為開源打榜狂”活動也很有意思。我覺得所有這些都是對開源開發(fā)者很好的鞭策和鼓勵,促使大伙能夠更好地投入到開源事業(yè)的建設(shè)和發(fā)展中來。
InfoQ:之后對 CubeAI 智立方平臺的發(fā)展有何規(guī)劃?
霍博士:作為一個平臺型的開源軟件,CubeAI 要真正發(fā)揮作用主要還是在于運(yùn)營,特別是面向公眾互聯(lián)網(wǎng)的運(yùn)營,潛在用戶目前來看主要應(yīng)該是廣大的 AI 個體開發(fā)者或中小型開發(fā)團(tuán)隊。目前互聯(lián)網(wǎng)上應(yīng)該還沒有類似的平臺。但是很遺憾 CubeAI 項目現(xiàn)在還只是處于開源孵化階段,還沒有得到實際的應(yīng)用。所以對于它的發(fā)展規(guī)劃,我們最希望的就是有人能夠把它真正投入運(yùn)營,真正的應(yīng)用起來。大家都知道開源的東西跟實際真正運(yùn)營的產(chǎn)品之間還是有一定差距的,目前的開源系統(tǒng)最多可以看做是一個原型產(chǎn)品。如果要實際投入運(yùn)營的話,還是需要根據(jù)真實的運(yùn)營需求對這個開源平臺進(jìn)行適當(dāng)?shù)墓δ軘U(kuò)展和優(yōu)化開發(fā)的。
InfoQ:如今開源 AI 平臺越來越多,AI 技術(shù)應(yīng)用門檻不斷降低,“人人都可以做 AI 開發(fā)”,您怎么看待這個技術(shù)應(yīng)用趨勢?
霍博士:從某種意義上來講,我是同意這種說法的。之所以出現(xiàn)這種趨勢,我覺得大致主要得益于以下幾方面的因素。
第一,人工智能技術(shù)的發(fā)展,特別是這些年來基于神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)技術(shù)的突破和流行。與傳統(tǒng)機(jī)器學(xué)習(xí)相比,深度學(xué)習(xí)的最大優(yōu)勢之一就是可以進(jìn)行端到端的學(xué)習(xí),而不需要人工進(jìn)行特征提取,這就在模型算法研究和設(shè)計的層面降低了技術(shù)門檻。
第二,各類開源 AI 框架的出現(xiàn)和普及。深度學(xué)習(xí)中的神經(jīng)網(wǎng)絡(luò)層次多、網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜、參數(shù)數(shù)量龐大,這樣就會導(dǎo)致模型訓(xùn)練和推理的程序代碼結(jié)構(gòu)復(fù)雜,普通開發(fā)者很難搞定。特別是神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練中的反向傳播算法,需要一層層的計算梯度,也就是針對各類函數(shù)求偏導(dǎo)數(shù),不僅公式復(fù)雜,而且數(shù)量龐大,這就更不是一般人能夠搞得明白的了,更不用說編程實現(xiàn)了。而 AI 框架的出現(xiàn)就解決了這個問題,它把各類雖然復(fù)雜但是可規(guī)律性重復(fù)使用的代碼封裝起來,并且自動實現(xiàn)了計算圖構(gòu)建、偏導(dǎo)計算等復(fù)雜操作,這樣就使得模型開發(fā)者只需要使用若干比較有限的通用 API 接口就能夠構(gòu)建神經(jīng)網(wǎng)絡(luò),執(zhí)行模型訓(xùn)練和模型推理等操作,從而大大降低模型開發(fā)的難度和復(fù)雜度,在 AI 模型開發(fā)這個層面降低了技術(shù)門檻。
第三,各類增強(qiáng)型開源框架或平臺的出現(xiàn)。它們首先開發(fā)一些通用模型,利用大量通用數(shù)據(jù)集訓(xùn)練出一些預(yù)訓(xùn)練模型出來,把它發(fā)布到網(wǎng)上。然后不同應(yīng)用領(lǐng)域的模型開發(fā)者可以在這些預(yù)訓(xùn)練模型參數(shù)的基礎(chǔ)上,使用自己擁有的部分領(lǐng)域數(shù)據(jù)集來進(jìn)行增強(qiáng)和優(yōu)化訓(xùn)練,得到更加適合于自己領(lǐng)域的模型參數(shù)。這樣就進(jìn)一步降低了應(yīng)用型 AI 模型開發(fā)的技術(shù)門檻。
第四,各類開源 AI 集成或應(yīng)用服務(wù)平臺的出現(xiàn)。這些平臺直接提供面向各類應(yīng)用的訓(xùn)練好的模型,應(yīng)用開發(fā)者只需要從中選擇合適的模型,進(jìn)行簡單的參數(shù)配置或者編排組裝之后就可以直接調(diào)用。這樣就大大降低了各類需要用到 AI 技術(shù)的應(yīng)用開發(fā)者的技術(shù)門檻,他們可以基本上不用學(xué)習(xí)和掌握 AI 的理論和編程知識,就可以進(jìn)行應(yīng)用開發(fā)了,從而真正實現(xiàn)“人人都可以做 AI 開發(fā)”。
總之,一個技術(shù)要想營造良好的應(yīng)用生態(tài)環(huán)境就必須吸引更多的人來參與,要想吸引更多的人就必須降低技術(shù)門檻,而開源正是降低技術(shù)門檻的最有效的手段之一。
InfoQ:國內(nèi)的公司關(guān)于 AI 的開源項目并不少,基本上大廠都開源了自己的 AI 框架,有的還不止一個,但是后續(xù)維護(hù)和推廣做得好的并不多,產(chǎn)生這種現(xiàn)象的原因是什么?您又是如何看待國內(nèi)廠商爭相構(gòu)建 AI 開源框架這件事的?
霍博士:確實,國內(nèi)目前做 AI 開源項目的很多,特別是開源 AI 框架,好多公司還有一些大學(xué)等研究機(jī)構(gòu)也都在做,但是在業(yè)界有比較大名氣和影響力的,目前似乎只有 PaddlePaddle 和 MindSpore。出現(xiàn)這種情況的原因主要有以下幾個:
首先,用戶的使用習(xí)慣、學(xué)術(shù)生態(tài)和對國外主流的依賴心理的因素。普通的 AI 研究和開發(fā)者,最早接觸和使用的是國外的 TensorFlow 和 PyTorch 等知名的主流框架,在國際上發(fā)論文、學(xué)術(shù)交流等也都普遍采用這些主流框架,這就使得一方面使用習(xí)慣了不太愿意去換新的工具,畢竟任何新的東西也都還是有一定的學(xué)習(xí)成本的;另一方面使用新的東西可能會失去與他人特別是國際上一些學(xué)術(shù)圈子交流的機(jī)會,因為一個新的東西要想混入圈子是會遭到當(dāng)前圈子里主流的排斥的。至于像 PaddlePaddle 和 MindSpore 這兩個現(xiàn)在之所以能夠搞出點(diǎn)名氣來,本身產(chǎn)品過硬是一方面,我覺得最主要的還是靠著公司的財大氣粗硬挺出來的,而且主要還是在面向產(chǎn)業(yè)應(yīng)用的領(lǐng)域,在學(xué)術(shù)界還是不太流行。
第二,做開源并不是一件輕松的事情,還是需要有相當(dāng)大的人力物力財力來支持的。比如說要有雄厚的技術(shù)儲備,要有強(qiáng)大、持續(xù)的創(chuàng)新開發(fā)人才隊伍,要建設(shè)和運(yùn)營社區(qū),要有強(qiáng)大的算力和網(wǎng)絡(luò)資源,要持續(xù)進(jìn)行大規(guī)模布道、宣傳、推廣等等,所有這些都不是一般的財力不足的小公司能夠長久持續(xù)應(yīng)付得了的。這可能也是一些開源項目后續(xù)維護(hù)和推廣做得不太好的一個原因吧。
第三,持續(xù)的創(chuàng)新能力。有些開源項目可能剛開始做得很好,但是后續(xù)時間長了如果不能持續(xù)推出新的東西,自然也就會逐漸失去人們的關(guān)注,自己也失去信心,無法再堅持做下去了。
當(dāng)然,這里說的只是開源項目可能做不好的部分原因,并不表示我國的大多數(shù) AI 開源項目就都做得不好。事實上我覺得我們國內(nèi)有些名氣不是太大的開源項目做的可能還是非常好的。所謂的專尖特精,有些公司或團(tuán)隊只是在 AI 相關(guān)的部分領(lǐng)域有自己獨(dú)到的創(chuàng)新之處,由于方向相對比較窄,受眾范圍比較小,再加上宣傳力度跟不上,所以開源之后就只能在自己特定專業(yè)領(lǐng)域的部分小圈子內(nèi)進(jìn)行傳播,而無法在更大的范圍內(nèi)引起轟動。
所以說對于目前國內(nèi)廠商都在爭相構(gòu)建 AI 開源框架這件事,我認(rèn)為這其實是件好事。因為不同的廠商必定都有各自獨(dú)到的創(chuàng)新之處,爭相開源的話就會形成一種百花齊放的局面,在這個基礎(chǔ)上大家通過相互學(xué)習(xí)借鑒、取長補(bǔ)短、競爭融合,最后可能就會打造出幾個集大成者的優(yōu)秀項目出來,成為帶動我國 AI 開源蓬勃發(fā)展領(lǐng)頭雁。當(dāng)然要造就這種局面,是需要一定的政策和市場融合競爭機(jī)制的,使得參與開源的不同的企業(yè)和團(tuán)隊之間能夠友好合作、互相促進(jìn),而不是勾心斗角、惡性競爭。我相信這種局面是會出現(xiàn)的。
InfoQ:目前行業(yè)里存在哪些技術(shù)挑戰(zhàn)?在未來,是否可以通過“開源”得到解決?為什么?
霍博士:從 AI 技術(shù)的應(yīng)用這方面來說,將來 AI 模型部署和運(yùn)行的形態(tài)到底應(yīng)該呈現(xiàn)個什么樣子,我不是太有把握?,F(xiàn)在大家談起來,一般都有云邊端這樣的說法,但是到底什么情況下應(yīng)該布到云、什么情況下應(yīng)該布到邊、什么情況下應(yīng)該布到端,這里邊都還是有一個技術(shù)、人力、財力等方面的成本和收益的考慮和權(quán)衡的。現(xiàn)在算力網(wǎng)絡(luò)這個概念比較火,利用算力網(wǎng)絡(luò)是否能解決這個問題?在算力網(wǎng)絡(luò)中又如何去實現(xiàn) AI 模型的最優(yōu)化部署和算力調(diào)度以使得模型的開發(fā)者、運(yùn)營者和使用者都能夠得到最大的實惠和便利呢?我想這些問題可能現(xiàn)在都還沒有一個比較好的現(xiàn)成的答案,是值得去挑戰(zhàn)挑戰(zhàn)的。
舉個例子,就像 GPU 算力設(shè)備的使用和調(diào)度,目前做得好像都還不是太理想,還不能像使用 CPU 那樣隨心所欲。一方面,對于開發(fā)者來說,編程時還需要考慮不同的驅(qū)動版本、需要指定將數(shù)據(jù)復(fù)制到哪一個 GPU 板卡上去,簡直是太不友好了。另一方面,GPU 等 AI 計算設(shè)備在各類云環(huán)境中的虛擬化和共享技術(shù)目前也還不成熟,無法做到真正的按需調(diào)度和使用。我覺得在理想的算力網(wǎng)絡(luò)中,模型開發(fā)者應(yīng)該對算力設(shè)備不感知才對,不管你有沒有 CPU、GPU 或者其他什么 PU,更不管你這些有多少或者放在什么地方,開發(fā)者只關(guān)注于寫算法就行了,至于在哪個 PU 上計算,那應(yīng)該是算力網(wǎng)絡(luò)來完成的事情。但現(xiàn)在不論哪個 AI 框架,編程和計算設(shè)備都還沒有解耦,這似乎在目前還不太好解決。
另外,開源是解決這些問題所需要借助和依賴的一個非常必要的機(jī)制和手段,但是光靠開源可能也是不行的,還是得多措并舉。?
編輯:黃飛
評論
查看更多