王浩田,鄂海紅,王 勇,宋美娜
(1.北京郵電大學(xué) 計(jì)算機(jī)學(xué)院(國(guó)家示范性軟件學(xué)院),北京 100876;2.聯(lián)洋國(guó)融(北京)科技有限公司,北京 100088)
隨著數(shù)字技術(shù)革新與發(fā)展,數(shù)字化轉(zhuǎn)型已成為企業(yè)轉(zhuǎn)型升級(jí)的必由之路[1]。數(shù)據(jù)智能業(yè)務(wù)通過(guò)“記錄—統(tǒng)計(jì)—分析—預(yù)測(cè)-決策”的方式為企業(yè)在不同場(chǎng)景的運(yùn)營(yíng)與發(fā)展提供了核心資料支撐,是企業(yè)實(shí)現(xiàn)數(shù)字化轉(zhuǎn)型的重要目標(biāo)之一。傳統(tǒng)企業(yè)的數(shù)據(jù)智能業(yè)務(wù)發(fā)展對(duì)于當(dāng)前過(guò)載的互聯(lián)網(wǎng)、大數(shù)據(jù)環(huán)境顯得力不從心,數(shù)據(jù)說(shuō)話、精準(zhǔn)定位、快捷響應(yīng)已經(jīng)成為現(xiàn)階段的基本訴求。
雖然國(guó)內(nèi)外研究人員在大數(shù)據(jù)計(jì)算平臺(tái)、AI訓(xùn)練平臺(tái)以及服務(wù)開(kāi)發(fā)平臺(tái)[2-7]等方面都進(jìn)行了大量的研究和實(shí)踐,但是都集中在以DevOps或MLOps的軟件生命周期方法單一地對(duì)大數(shù)據(jù)處理流程和AI訓(xùn)練流程進(jìn)行優(yōu)化,仍無(wú)法滿足數(shù)據(jù)智能業(yè)務(wù)快捷開(kāi)發(fā)的需求,存在以下問(wèn)題和挑戰(zhàn):
(1)海量多源異構(gòu)數(shù)據(jù)集中管理與利用的問(wèn)題。數(shù)據(jù)智能業(yè)務(wù)所需要的數(shù)據(jù)來(lái)源廣且量大,不同的數(shù)據(jù)源所屬領(lǐng)域不同,它們提供的數(shù)據(jù)呈分散、異構(gòu)的特點(diǎn),缺乏了統(tǒng)一的數(shù)據(jù)資源組織管理[8-11]。
(2)服務(wù)開(kāi)發(fā)過(guò)程依舊繁瑣、開(kāi)發(fā)周期依舊長(zhǎng)的問(wèn)題。數(shù)據(jù)智能業(yè)務(wù)的落地需要經(jīng)過(guò)大數(shù)據(jù)存儲(chǔ)與處理、模型設(shè)計(jì)與訓(xùn)練、模型性能評(píng)估、應(yīng)用部署運(yùn)維等過(guò)程,需要投入大量的人力分工協(xié)作,且不同工作間具有依賴性,對(duì)后期發(fā)現(xiàn)問(wèn)題的返工修正的不斷更新,導(dǎo)致更高的時(shí)間和經(jīng)濟(jì)成本[12-13]。另一方面,前期研發(fā)所形成的算法資產(chǎn),對(duì)于新的數(shù)據(jù)和特定的場(chǎng)景,都有持續(xù)訓(xùn)練、集成和部署的需求[14]。
(3)服務(wù)之間的可重復(fù)利用問(wèn)題。在數(shù)據(jù)智能場(chǎng)景的服務(wù)開(kāi)發(fā)中,復(fù)用多個(gè)已構(gòu)建數(shù)據(jù)智能服務(wù)的原子能力形成新的服務(wù),是一種提高生產(chǎn)力的有效方式[15]。但服務(wù)之間的依賴關(guān)系、重復(fù)調(diào)用導(dǎo)致了更長(zhǎng)的響應(yīng)時(shí)間和系統(tǒng)資源占用量,如何設(shè)計(jì)出高效的組合服務(wù)顯得格外重要。
因此,該文旨在設(shè)計(jì)并開(kāi)發(fā)一個(gè)云原生數(shù)據(jù)智能服務(wù)開(kāi)發(fā)平臺(tái),實(shí)現(xiàn)從多源異構(gòu)數(shù)據(jù)的統(tǒng)一組織管理,到數(shù)據(jù)智能服務(wù)自動(dòng)化生產(chǎn)線的構(gòu)建,再到高性能數(shù)據(jù)智能服務(wù)引擎的搭建,提高從數(shù)據(jù)資產(chǎn)到模型資產(chǎn)的價(jià)值轉(zhuǎn)變能力,模型資產(chǎn)到服務(wù)資產(chǎn)的持續(xù)訓(xùn)練、集成和部署的自動(dòng)化能力,以及服務(wù)資產(chǎn)之間的可重復(fù)利用能力,使相關(guān)人員能夠通過(guò)該平臺(tái)快速完成數(shù)據(jù)智能服務(wù)的開(kāi)發(fā)與管理。
針對(duì)以上問(wèn)題與挑戰(zhàn),該文重點(diǎn)圍繞數(shù)據(jù)智能服務(wù)自動(dòng)化生產(chǎn)線和高性能分布式數(shù)據(jù)智能服務(wù)引擎兩個(gè)方面進(jìn)行研究與分析,并完成了一個(gè)云原生數(shù)據(jù)智能服務(wù)生產(chǎn)平臺(tái)(見(jiàn)圖1)。主要研究?jī)?nèi)容有以下三項(xiàng):
圖1 關(guān)鍵問(wèn)題與研究?jī)?nèi)容
(1)設(shè)計(jì)并實(shí)現(xiàn)了數(shù)據(jù)智能服務(wù)自動(dòng)化生產(chǎn)線。該生產(chǎn)線實(shí)現(xiàn)了從多源異構(gòu)的海量數(shù)據(jù)資產(chǎn)存儲(chǔ)與管理,到大數(shù)據(jù)驅(qū)動(dòng)的多版本AI模型資產(chǎn)的生產(chǎn)與管理,再到高性能數(shù)據(jù)智能服務(wù)資產(chǎn)的部署與管理的自動(dòng)化生產(chǎn)流程,有效縮減了數(shù)據(jù)智能服務(wù)的開(kāi)發(fā)周期,減少了人力投入,實(shí)現(xiàn)了降本增效的目的。
(2)設(shè)計(jì)并實(shí)現(xiàn)了高性能分布式數(shù)據(jù)智能服務(wù)引擎。一方面,引擎實(shí)現(xiàn)了數(shù)據(jù)智能服務(wù)實(shí)例根據(jù)負(fù)載狀況自動(dòng)擴(kuò)縮容,提高服務(wù)的穩(wěn)定性和響應(yīng)速度;另一方面,引擎以表達(dá)式即服務(wù)的方式,實(shí)現(xiàn)了對(duì)數(shù)據(jù)智能服務(wù)原子能力的復(fù)用,并對(duì)表達(dá)式的構(gòu)建與調(diào)用進(jìn)行了優(yōu)化,解決了服務(wù)編排時(shí)服務(wù)依賴問(wèn)題帶來(lái)的響應(yīng)時(shí)間過(guò)長(zhǎng)和服務(wù)重復(fù)調(diào)用導(dǎo)致的系統(tǒng)資源浪費(fèi)的問(wèn)題。
(3)設(shè)計(jì)并實(shí)現(xiàn)了云原生數(shù)據(jù)智能服務(wù)生產(chǎn)平臺(tái)。在產(chǎn)品設(shè)計(jì)方面,該平臺(tái)將算法與業(yè)務(wù)分離,使算法工程師更多地聚焦于算法的深度和廣度并承接更多場(chǎng)景的算法設(shè)計(jì),使模型運(yùn)營(yíng)專注于數(shù)據(jù)集構(gòu)建和模型訓(xùn)練并快速達(dá)到業(yè)務(wù)指標(biāo)。在系統(tǒng)功能方面,該平臺(tái)提供了多源異構(gòu)數(shù)據(jù)統(tǒng)一管理、融合多種異構(gòu)數(shù)據(jù)的數(shù)據(jù)集構(gòu)建與管理、算子在線開(kāi)發(fā)與版本管理、圖像化工作流拖拽開(kāi)發(fā)與版本管理、模型評(píng)估部署與版本管理、服務(wù)健康監(jiān)測(cè)、表達(dá)式服務(wù)在線編輯與測(cè)試功能。通過(guò)產(chǎn)品層面的解耦合與功能層面的自動(dòng)化生產(chǎn)能力,大大提高了相關(guān)人員開(kāi)發(fā)數(shù)據(jù)智能服務(wù)的效率。
數(shù)據(jù)智能服務(wù)自動(dòng)化生產(chǎn)線實(shí)現(xiàn)了從數(shù)據(jù)資產(chǎn)到模型資產(chǎn)再到服務(wù)資產(chǎn)的全方位管理與生產(chǎn),以過(guò)程自動(dòng)化的方式提高數(shù)據(jù)智能服務(wù)的生產(chǎn)效率,降低人力成本的投入。
圖2是數(shù)據(jù)智能服務(wù)生產(chǎn)流水線的架構(gòu),流水線的運(yùn)轉(zhuǎn)依賴下層的基礎(chǔ)服務(wù)層和基礎(chǔ)設(shè)施層,并支撐了上層的系統(tǒng)應(yīng)用層和場(chǎng)景應(yīng)用?;A(chǔ)設(shè)施層在物理機(jī)集群上搭建了Kubernetes容器云,提供了容器運(yùn)行的基本環(huán)境。以容器應(yīng)用作為承載平臺(tái)計(jì)算任務(wù)的基本單元,可以實(shí)現(xiàn)運(yùn)維的自動(dòng)化和彈性伸縮等功能并最大限度地發(fā)揮物理機(jī)群的性能和資源規(guī)模調(diào)度的效率優(yōu)勢(shì)?;A(chǔ)服務(wù)層以容器應(yīng)用的方式封裝了Spark、MapReduce等計(jì)算服務(wù),HDFS、Hive、Mysql、Minio等存儲(chǔ)服務(wù),Docker Image、Docker Container等虛擬化服務(wù),Grafana、Prometheus等監(jiān)控服務(wù),為流水線的核心功能層提供了基本服務(wù)。核心功能層實(shí)現(xiàn)了數(shù)據(jù)管理、自動(dòng)化模型生產(chǎn)與管理、服務(wù)引擎等流水線的核心功能。系統(tǒng)應(yīng)用層對(duì)流水線的功能進(jìn)行了封裝,實(shí)現(xiàn)了數(shù)據(jù)管理與標(biāo)注、算法模型研發(fā)、模型批量生產(chǎn)和數(shù)智服務(wù)管理等應(yīng)用模塊,為多場(chǎng)景數(shù)據(jù)智能服務(wù)的生產(chǎn)做支撐。
圖2 數(shù)據(jù)智能服務(wù)生產(chǎn)流水線的架構(gòu)
數(shù)據(jù)智能服務(wù)生產(chǎn)流水線為大屏可視化、智能客服、畫(huà)像構(gòu)建、推薦系統(tǒng)等多個(gè)場(chǎng)景應(yīng)用的構(gòu)建提供了智能服務(wù)支持。
數(shù)據(jù)智能服務(wù)的落地需要海量不同來(lái)源的數(shù)據(jù)作支撐,這些數(shù)據(jù)呈分散、異構(gòu)的特點(diǎn),因此,亟需一個(gè)統(tǒng)一的數(shù)據(jù)資源倉(cāng)庫(kù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的統(tǒng)一管理。
圖3是該文設(shè)計(jì)的數(shù)據(jù)資源倉(cāng)庫(kù),實(shí)現(xiàn)了對(duì)海量多源異構(gòu)數(shù)據(jù)的存儲(chǔ)與管理。當(dāng)用戶提交數(shù)據(jù)文件或數(shù)據(jù)源信息后,數(shù)據(jù)倉(cāng)庫(kù)通過(guò)四個(gè)過(guò)程將其進(jìn)行存儲(chǔ):(1)將數(shù)據(jù)文件或數(shù)據(jù)源信息上傳到HDFS中并根據(jù)配置信息創(chuàng)建一個(gè)文件導(dǎo)入任務(wù);(2)任務(wù)分類會(huì)將任務(wù)放入不同的管道中排隊(duì);(3)空閑的解析器會(huì)在創(chuàng)建區(qū)根據(jù)它的類型裝載不同的文件導(dǎo)入任務(wù);(4)裝載完畢后,在運(yùn)行區(qū)解析文件并將數(shù)據(jù)插入到Hive倉(cāng)庫(kù)中。其中任務(wù)解析器是一個(gè)Job類型的Pod,當(dāng)解析器運(yùn)行失敗Kubernetes會(huì)自動(dòng)重啟該任務(wù),直到解析器運(yùn)行成功。當(dāng)讀取數(shù)據(jù)的時(shí)候,可以執(zhí)行相應(yīng)的Hive SQL,并且可以實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)的關(guān)聯(lián)讀取。通過(guò)編寫(xiě)不同的文件解析器,將文件從HDFS轉(zhuǎn)存到Hive中,可以實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)的統(tǒng)一管理。
圖3 數(shù)據(jù)資源倉(cāng)庫(kù)
圖3中的HDFS和Hive是基于Kubernetes平臺(tái)實(shí)現(xiàn)的大數(shù)據(jù)集群提供的存儲(chǔ)服務(wù),采用這種方式部署大數(shù)據(jù)集群解決了傳統(tǒng)的大數(shù)據(jù)集群參數(shù)配置復(fù)雜、運(yùn)維難度大、缺乏自動(dòng)修復(fù)能力、彈性擴(kuò)縮容緩慢且無(wú)法及時(shí)隨業(yè)務(wù)量變化等問(wèn)題。
數(shù)據(jù)智能服務(wù)開(kāi)發(fā)過(guò)程多且復(fù)雜,過(guò)程與過(guò)程之間具有依賴性,后期的返工修復(fù)會(huì)導(dǎo)致更多的時(shí)間和經(jīng)濟(jì)成本,以及在特定的場(chǎng)景和新數(shù)據(jù)的情況下,都有服務(wù)持續(xù)生產(chǎn)的需求。因此,該文在流水線中設(shè)計(jì)了自動(dòng)化模型生產(chǎn)工作流和模型倉(cāng)庫(kù),實(shí)現(xiàn)了模型的自動(dòng)生產(chǎn)與管理。
(1)工作流基本運(yùn)算單元——算子。工作流中的節(jié)點(diǎn)也稱為算子,它是工作流運(yùn)行的基本單元,對(duì)應(yīng)Kubernetes中的Pod。算子由代碼文件夾(包含一個(gè)啟動(dòng)腳本和相關(guān)的程序代碼)、運(yùn)行鏡像、運(yùn)行參數(shù)等元素組成。
(2)工作流調(diào)度引擎。將多個(gè)算子按照一定的依賴關(guān)系進(jìn)行拼裝組合,就可以形成一個(gè)自動(dòng)化工作流。工作流調(diào)度引擎將會(huì)按照依賴關(guān)系,依次運(yùn)行每一個(gè)工作流節(jié)點(diǎn)。已創(chuàng)建工作流資源可以輸入不同的數(shù)據(jù)和設(shè)置不同的配置參數(shù)多次運(yùn)行,生產(chǎn)出不同的模型或服務(wù),實(shí)現(xiàn)算法資產(chǎn)的可持續(xù)集成、訓(xùn)練和部署。
圖4是工作流調(diào)度引擎的執(zhí)行過(guò)程,Web端構(gòu)造的工作流圖會(huì)放入管道中排隊(duì),空閑的工作流處理器依次讀取管道中的工作流圖進(jìn)行解析與調(diào)度。工作流處理器維護(hù)一個(gè)集合,對(duì)工作流圖進(jìn)行層序遍歷。每當(dāng)運(yùn)行完一個(gè)工作流節(jié)點(diǎn),如果該工作流節(jié)點(diǎn)的后置節(jié)點(diǎn)不在集合中就將其加入集合,并對(duì)集合進(jìn)行檢查,將所有前置依賴運(yùn)行完的工作流節(jié)點(diǎn)取出并將其作為Job Pod放入Kubernetes中運(yùn)行,重復(fù)進(jìn)行此操作,直到集合為空,工作流運(yùn)行成功。對(duì)于工作流中的一個(gè)節(jié)點(diǎn),會(huì)存在兩次調(diào)度:一是等待全部依賴節(jié)點(diǎn)運(yùn)行完成,才能夠調(diào)度該節(jié)點(diǎn)運(yùn)行;二是將節(jié)點(diǎn)調(diào)度到Kubernetes集群的節(jié)點(diǎn)運(yùn)行,實(shí)現(xiàn)資源的負(fù)載均衡。
圖4 工作流調(diào)度引擎的工作過(guò)程
(3)模型倉(cāng)庫(kù)。工作流中的模型注冊(cè)算子會(huì)將訓(xùn)練完的模型存入到模型倉(cāng)庫(kù),模型倉(cāng)庫(kù)會(huì)將實(shí)現(xiàn)模型資產(chǎn)的統(tǒng)一管理。
圖5是模型倉(cāng)庫(kù)的架構(gòu),注冊(cè)算子注入的模型首先經(jīng)過(guò)模型轉(zhuǎn)換模塊轉(zhuǎn)換為ONNX模型,然后存入到模型庫(kù)。模型庫(kù)本質(zhì)是一張Sql表,表中記錄了模型的基本信息和模型所在HDFS中的路徑。此外,模型倉(cāng)庫(kù)還提供了模型評(píng)估和模型部署的功能,模型評(píng)估通過(guò)在評(píng)估腳本模板中加載ONNX模型和測(cè)試數(shù)據(jù)集并與作為運(yùn)行環(huán)境的鏡像一起以Pod的形式在Kubernetes中運(yùn)行,實(shí)現(xiàn)模型性能指標(biāo)評(píng)估的計(jì)算。模型部署通過(guò)在推理腳本模板中加載ONNX模型并與作為運(yùn)行環(huán)境的鏡像一起部署為多個(gè)Kubernetes的Pod實(shí)例實(shí)現(xiàn)服務(wù)的多實(shí)例部署與注冊(cè)。
圖5 模型倉(cāng)庫(kù)功能與架構(gòu)
模型倉(cāng)庫(kù)中創(chuàng)建成功的模型部署會(huì)將部署信息作為服務(wù)信息注冊(cè)到服務(wù)引擎,服務(wù)引擎實(shí)現(xiàn)了對(duì)服務(wù)資產(chǎn)的統(tǒng)一管理。
圖6是服務(wù)引擎的架構(gòu),單個(gè)服務(wù)是由一個(gè)負(fù)載均衡器、一個(gè)ReplicaSet控制器和多個(gè)實(shí)例組成。服務(wù)列表綁定了每個(gè)負(fù)載均衡器的地址,通過(guò)服務(wù)列表可以查找到已經(jīng)注冊(cè)的全部服務(wù)。底層的Prometheus監(jiān)控著實(shí)例的CPU、內(nèi)存等資源的利用率。伸縮控制控制器通過(guò)讀取實(shí)例的指標(biāo)進(jìn)行判斷,當(dāng)某一指標(biāo)超過(guò)設(shè)定的最大閾值后,開(kāi)始控制ReplicaSet控制器進(jìn)行實(shí)例橫向擴(kuò)容;當(dāng)所有指標(biāo)均低于設(shè)定的最低閾值后,開(kāi)始控制ReplicaSet進(jìn)行實(shí)例縮容。通過(guò)這樣的結(jié)構(gòu)和工作過(guò)程,提高了服務(wù)在峰值時(shí)的穩(wěn)定性以及減少了在低谷時(shí)的資源利用。
圖6 服務(wù)引擎架構(gòu)
高性能分布式數(shù)據(jù)智能服務(wù)引擎以表達(dá)式即服務(wù)方式實(shí)現(xiàn)了對(duì)數(shù)據(jù)智能服務(wù)原子能力的細(xì)粒度復(fù)用,并對(duì)表達(dá)式服務(wù)的構(gòu)建、調(diào)用等方面進(jìn)行了優(yōu)化,有效提高了服務(wù)開(kāi)發(fā)效率以及服務(wù)響應(yīng)速度和系統(tǒng)資源利用率。
數(shù)據(jù)智能服務(wù)引擎是三層結(jié)構(gòu)(見(jiàn)圖7):原子服務(wù)層、引擎中控層和應(yīng)用層,底下兩層采用了分布式的結(jié)構(gòu)。核心層是引擎中控層,它采用Leader-Worker的結(jié)構(gòu)保證中控層的高可用性和一致性,單節(jié)點(diǎn)的內(nèi)部由功能決策、緩存、歸并優(yōu)化器、狀態(tài)控制器、邏輯運(yùn)算器、排序模塊、存儲(chǔ)服務(wù)、溢寫(xiě)模塊等模塊組成,實(shí)現(xiàn)了表達(dá)式的優(yōu)化和表達(dá)式服務(wù)調(diào)用的優(yōu)化。底層是原子服務(wù)層,它實(shí)現(xiàn)了AI模型的推理能力,由負(fù)載均衡器和多個(gè)服務(wù)實(shí)例組成。最上層是應(yīng)用層,提供了表達(dá)式構(gòu)建、表達(dá)式準(zhǔn)確率在線測(cè)試和服務(wù)管理的功能。
表1 引擎結(jié)構(gòu)的主要模塊
圖7 數(shù)據(jù)智能服務(wù)引擎的三層結(jié)構(gòu)
數(shù)據(jù)智能服務(wù)本質(zhì)上是一種數(shù)據(jù)驅(qū)動(dòng)的人工智能服務(wù),不同類型的服務(wù)由多種原子能力組成,如文本多標(biāo)簽分類服務(wù)是由多種單標(biāo)簽分類原子能力組成,命名實(shí)體識(shí)別服務(wù)是由多種單實(shí)體識(shí)別原子能力組成。針對(duì)數(shù)據(jù)智能服務(wù)的這種特點(diǎn),該文將多種不同服務(wù)的原子能力組合成邏輯表達(dá)式,以表達(dá)式即服務(wù)的方式實(shí)現(xiàn)了新服務(wù)的快速開(kāi)發(fā)。
圖8展示了表達(dá)式服務(wù)創(chuàng)建的過(guò)程。功能決策模塊首先會(huì)根據(jù)請(qǐng)求的Type字段判斷請(qǐng)求為服務(wù)創(chuàng)建類型,然后請(qǐng)求轉(zhuǎn)發(fā)給歸并優(yōu)化器。歸并優(yōu)化器會(huì)提取共有的原子服務(wù)進(jìn)行聚合,示例中的表達(dá)式有三個(gè)數(shù)據(jù)智能服務(wù)項(xiàng)(也叫做原子服務(wù)項(xiàng)),共兩類atom_A和atom_B。具體歸并聚合例子為:[CallTC(atom_A,text, ‘見(jiàn)面問(wèn)候’) ‖ CallTC(atom_A, text, ‘離別問(wèn)候’) ‖ CallTC(atom_B, text,‘問(wèn)候語(yǔ)’) ‖ InRegex(‘你好’,…,‘再見(jiàn)’)] &&NotInRegex (‘我生氣’,…,‘不開(kāi)心’),通過(guò)提取項(xiàng)中的原子服務(wù),得到atom_A,atom_A和atom_B,然后進(jìn)行歸并得到atom_A和Atom_B,對(duì)原表達(dá)式進(jìn)行改寫(xiě),得到:(atom_A_Res==‘見(jiàn)面問(wèn)候’‖atom_A_Res==‘離別問(wèn)候’‖Atom_B_Res==‘問(wèn)候語(yǔ)’‖InList[‘你好’,…,‘再見(jiàn)’])&&NotInList(‘我生氣’,…,‘不開(kāi)心’),該樣例表達(dá)式在AI服務(wù)引擎中會(huì)將原來(lái)的3次服務(wù)調(diào)用優(yōu)化為2次。最后歸并優(yōu)化器會(huì)將得到的優(yōu)化結(jié)果以配置文件的形式存儲(chǔ)到存儲(chǔ)服務(wù)中,完成表達(dá)式服務(wù)的創(chuàng)建過(guò)程。
圖8 表達(dá)式服務(wù)創(chuàng)建過(guò)程
圖9展示了表達(dá)式服務(wù)的調(diào)用過(guò)程。功能決策模塊首先會(huì)根據(jù)請(qǐng)求的Type字段判斷請(qǐng)求為服務(wù)調(diào)用類型,然后根據(jù)(ServiceId,Text)查找緩存中是否命中,如果命中直接返回結(jié)果,否則轉(zhuǎn)發(fā)請(qǐng)求到狀態(tài)控制器。狀態(tài)控制器根據(jù)ServiceId從存儲(chǔ)服務(wù)中找到表達(dá)式服務(wù)的配置文件,然后根據(jù)CallService中原子服務(wù)的數(shù)量,創(chuàng)建等量的線程,并行調(diào)用原子服務(wù),直到全部的原子服務(wù)返回結(jié)果,將結(jié)果傳入到邏輯運(yùn)算器。邏輯運(yùn)算器根據(jù)原子服務(wù)的調(diào)用結(jié)果和正則列表,計(jì)算真值,將計(jì)算結(jié)果寫(xiě)入到溢寫(xiě)模塊并返回給客戶端。
圖9 表達(dá)式服務(wù)的調(diào)用過(guò)程
引擎中的溢寫(xiě)模塊記錄了所有請(qǐng)求與表達(dá)式服務(wù)的運(yùn)算結(jié)果,當(dāng)記錄存儲(chǔ)大小接近存儲(chǔ)系統(tǒng)的文件塊時(shí),溢寫(xiě)模塊會(huì)將這些記錄寫(xiě)入到存儲(chǔ)服務(wù)中。引擎中的排序模塊會(huì)定期拉取歷史請(qǐng)求記錄以(ServiceId,Text)為Key進(jìn)行聚合并降序排列,將結(jié)果的前N個(gè)寫(xiě)入到緩存中。
在數(shù)據(jù)智能服務(wù)自動(dòng)化生產(chǎn)線和高性能數(shù)據(jù)智能服務(wù)引擎的基礎(chǔ)上,該文設(shè)計(jì)并實(shí)現(xiàn)了云原生數(shù)據(jù)智能服務(wù)開(kāi)發(fā)平臺(tái)。一方面,該平臺(tái)實(shí)現(xiàn)了數(shù)據(jù)資產(chǎn)到模型資產(chǎn)持續(xù)訓(xùn)練和集成的價(jià)值轉(zhuǎn)變能力,模型資產(chǎn)到服務(wù)資產(chǎn)持續(xù)部署的自動(dòng)化能力,以及服務(wù)資產(chǎn)之間的可重復(fù)利用能力。另一方面,該平臺(tái)將算法與業(yè)務(wù)分離,使算法工程師更多地聚焦于算法的深度和廣度并承接更多場(chǎng)景的算法設(shè)計(jì),使模型運(yùn)營(yíng)專注于數(shù)據(jù)集構(gòu)建和模型訓(xùn)練并快速達(dá)到業(yè)務(wù)指標(biāo)。
圖10是數(shù)據(jù)智能服務(wù)開(kāi)發(fā)平臺(tái)功能結(jié)構(gòu),該平臺(tái)提供了數(shù)據(jù)管理、算子構(gòu)建、模型開(kāi)發(fā)、服務(wù)管理和復(fù)合服務(wù)5個(gè)模塊,實(shí)現(xiàn)了對(duì)15種資產(chǎn)或資源的生產(chǎn)與管理。
圖10 平臺(tái)功能結(jié)構(gòu)
數(shù)據(jù)管理模塊實(shí)現(xiàn)了對(duì)多種數(shù)據(jù)源和數(shù)據(jù)集的統(tǒng)一管理,其中數(shù)據(jù)集通過(guò)導(dǎo)入數(shù)據(jù)源并進(jìn)行標(biāo)注生產(chǎn)而來(lái)。算子構(gòu)建模塊實(shí)現(xiàn)了Job、Task、Run、鏡像、算子等資源的生產(chǎn)與管理,其中算子是一個(gè)Run的實(shí)例,Run是Task通過(guò)輸入運(yùn)行參數(shù)運(yùn)行的實(shí)例,Task由鏡像和項(xiàng)目腳本組成,Job則是一系列Task的集合。模型開(kāi)發(fā)模塊實(shí)現(xiàn)了工作流、工作流運(yùn)行歷史、模型、模型評(píng)估、模型部署等資源的生產(chǎn)與管理,其中工作流是對(duì)一系列算子編排而來(lái),工作流運(yùn)行歷史是工作流運(yùn)行的實(shí)例,模型則是通過(guò)工作流運(yùn)行生產(chǎn)而來(lái),模型評(píng)估是通過(guò)輸入測(cè)試集對(duì)模型性能進(jìn)行評(píng)估的實(shí)例,模型部署是將模型發(fā)布成服務(wù)的實(shí)例。服務(wù)管理實(shí)現(xiàn)了對(duì)服務(wù)實(shí)例的管理和監(jiān)控,其中服務(wù)實(shí)例是模型部署后產(chǎn)生的。復(fù)合服務(wù)實(shí)現(xiàn)了對(duì)正則組、表達(dá)式服務(wù)等資源的管理,表達(dá)式服務(wù)由一系列正則組合和一系列服務(wù)實(shí)例通過(guò)邏輯運(yùn)算組合而來(lái)。
表2 數(shù)據(jù)智能服務(wù)開(kāi)發(fā)平臺(tái)的生產(chǎn)或管理的資產(chǎn)與資源
圖11是平臺(tái)的技術(shù)架構(gòu),共分為5層:基礎(chǔ)設(shè)計(jì)層實(shí)現(xiàn)對(duì)CPU服務(wù)器、GPU服務(wù)器等物理設(shè)備的統(tǒng)一管理;虛擬化層利用Docker Engine和Kubernetes實(shí)現(xiàn)容器云,用于分配、調(diào)度和管理CPU計(jì)算資源、異構(gòu)GPU計(jì)算資源、存儲(chǔ)資源、網(wǎng)絡(luò)資源,為上層設(shè)施提供基本計(jì)算能力和基本存儲(chǔ)能力的支持。基礎(chǔ)服務(wù)層提供AI訓(xùn)練服務(wù)、大數(shù)據(jù)服務(wù)和通用數(shù)據(jù)存儲(chǔ)服務(wù):AI訓(xùn)練服務(wù)利用Pytorch、TensorFlow、ONNX等框架實(shí)現(xiàn)了AI模型的搭建、訓(xùn)練和部署等能力;大數(shù)據(jù)服務(wù)利用HDFS、Hive實(shí)現(xiàn)大數(shù)據(jù)存儲(chǔ)能力,利用Spark實(shí)現(xiàn)大數(shù)據(jù)計(jì)算能力;通用存儲(chǔ)服務(wù)利用Mysql實(shí)現(xiàn)關(guān)系數(shù)據(jù)存儲(chǔ),利用Minio實(shí)現(xiàn)對(duì)象存儲(chǔ),搭建鏡像存儲(chǔ)服務(wù)器實(shí)現(xiàn)對(duì)鏡像的存儲(chǔ)。業(yè)務(wù)邏輯層將下層服務(wù)封裝成功能接口供前端調(diào)用,后端系統(tǒng)整體基礎(chǔ)架構(gòu)采用Spring Boot開(kāi)發(fā),持久層框架采用MyBatis,實(shí)現(xiàn)對(duì)后端數(shù)據(jù)庫(kù)進(jìn)行CRUD操作,前端與后端采用Restful API的方式進(jìn)行通信。頁(yè)面展示層使用Vue.js前端開(kāi)發(fā)框架進(jìn)行開(kāi)發(fā),配合Element-UI樣式組件庫(kù)實(shí)現(xiàn)前端頁(yè)面展示效果。同時(shí)通過(guò)axios異步調(diào)用的方式訪問(wèn)后端接口。
圖11 平臺(tái)技術(shù)架構(gòu)
傳統(tǒng)企業(yè)的數(shù)據(jù)智能業(yè)務(wù)發(fā)展對(duì)于當(dāng)前過(guò)載的互聯(lián)網(wǎng)、大數(shù)據(jù)環(huán)境顯得力不從心。針對(duì)海量多源異構(gòu)數(shù)據(jù)集中管理與利用的問(wèn)題、服務(wù)開(kāi)發(fā)過(guò)程依舊繁瑣、開(kāi)發(fā)周期依舊長(zhǎng)的問(wèn)題和服務(wù)之間的可重復(fù)利用問(wèn)題,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)云原生數(shù)據(jù)智能服務(wù)開(kāi)發(fā)平臺(tái),提高了從數(shù)據(jù)資產(chǎn)到模型資產(chǎn)持續(xù)訓(xùn)練和集成的價(jià)值轉(zhuǎn)變能力,模型資產(chǎn)到服務(wù)資產(chǎn)持續(xù)部署的自動(dòng)化能力,以及服務(wù)資產(chǎn)的一站式運(yùn)維能力和服務(wù)資產(chǎn)之間的可重復(fù)利用能力,使相關(guān)人員能夠通過(guò)該平臺(tái)快速完成數(shù)據(jù)智能服務(wù)的開(kāi)發(fā)與管理。研發(fā)的平臺(tái)支撐了國(guó)家自然科學(xué)基金醫(yī)學(xué)認(rèn)知圖譜復(fù)雜知識(shí)結(jié)構(gòu)表示研究項(xiàng)目。