李國良,周煊赫
(清華大學(xué) 計算機(jī)科學(xué)與技術(shù)系,北京 100084)
人工智能技術(shù)已經(jīng)滲透到各行各業(yè)中.2019 年,中國人工智能核心產(chǎn)業(yè)規(guī)模接近570 億元,涉及安防、金融、醫(yī)療、教育等諸多領(lǐng)域.面向不同的應(yīng)用需求,人工智能技術(shù)已經(jīng)衍生出了多種不同的機(jī)器學(xué)習(xí)算法,如深度學(xué)習(xí)、主動學(xué)習(xí)、強(qiáng)化學(xué)習(xí)等等.然而人工智能在落地過程中還面臨著3 個挑戰(zhàn)性問題.
? 第一,AI 使用門檻較高.人工智能算法實(shí)際的落地情況并不容樂觀.在不同領(lǐng)域下,我們需要構(gòu)建獨(dú)立的人工智能系統(tǒng)來執(zhí)行操作.如TensorFlow 框架中,我們首先需要用Python 語言書寫程序,然后調(diào)用相應(yīng)的機(jī)器學(xué)習(xí)庫實(shí)際執(zhí)行模型.整個程序設(shè)計和執(zhí)行流程都需要專門的人力和資源投入,開銷比較大.如谷歌公司進(jìn)行大規(guī)模神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)時,曾需要用有255 臺計算節(jié)點(diǎn)的集群單獨(dú)訓(xùn)練具有5.57 億個參數(shù)的AmoebaNet-B 模型,每個節(jié)點(diǎn)上配備1 024 個TPU 組成的芯片組.此外,這類機(jī)器學(xué)習(xí)框架難以與現(xiàn)有數(shù)據(jù)庫兼容,存在數(shù)據(jù)轉(zhuǎn)換和傳輸?shù)念~外開銷;
? 第二,AI 訓(xùn)練效率較低.首先,現(xiàn)有的AI 系統(tǒng)缺少執(zhí)行優(yōu)化技術(shù)(如大規(guī)模緩存、數(shù)據(jù)分塊分區(qū)、索引等),不僅會導(dǎo)致大量的計算、存儲資源上的浪費(fèi),而且會提高程序異常的發(fā)生率(如內(nèi)存溢出、進(jìn)程阻塞等),嚴(yán)重影響了單個任務(wù)的執(zhí)行效率;其次,傳統(tǒng)AI 的執(zhí)行方式缺少靈活性,芯片(如CPU、ARM、GPU 等)、算法優(yōu)化(如優(yōu)化函數(shù)、評價指標(biāo)等)都需要人為指定,不僅提高了對使用人員編程能力的要求,而且難以最大限度地發(fā)揮硬件資源優(yōu)勢,如沒有動態(tài)調(diào)度機(jī)制,很多AI 任務(wù)會被阻塞,直到GPU 資源滿足要求為止,降低了整體的執(zhí)行效率;
? 第三,AI 依賴于高質(zhì)量的訓(xùn)練數(shù)據(jù).傳統(tǒng)的數(shù)據(jù)治理工作非常繁雜,需要大量人的參與,并消耗了大部分的資源和時間.首先,大規(guī)模機(jī)器學(xué)習(xí)算法需要大量的數(shù)據(jù)進(jìn)行訓(xùn)練,一方面,來自真實(shí)場景的原始數(shù)據(jù)大多不能直接使用,存在大量的缺失值、錯誤值和異常樣本等;另一方面,一個訓(xùn)練集可能有多個數(shù)據(jù)源,數(shù)據(jù)源融合存在格式不一致、冗余信息多、連接開銷大等問題.以圖1 為例,我們可以看出,現(xiàn)有機(jī)器學(xué)習(xí)的整個數(shù)據(jù)處理流程還存在很大的優(yōu)化空間.
Fig.1 Problems in the lifecycle of machine learning圖1 機(jī)器學(xué)習(xí)的生命周期及存在的問題
數(shù)據(jù)庫管理系統(tǒng)經(jīng)過近60 年的發(fā)展,積累了很多較為成熟的數(shù)據(jù)查詢和管理技術(shù).以一條查詢語句的處理流程為例:首先,基于聲明式語言,用戶只需在查詢語句中聲明高層次條件(如數(shù)據(jù)列表、屬性約束等);其次,數(shù)據(jù)庫經(jīng)過邏輯和物理優(yōu)化生成執(zhí)行計劃,利用索引、內(nèi)存計算、分布式處理等技術(shù)高效地執(zhí)行查詢處理操作.此外,關(guān)系型數(shù)據(jù)庫基于關(guān)系表對數(shù)據(jù)集進(jìn)行建模,利用外鍵等保證數(shù)據(jù)一致性.通過結(jié)合這些數(shù)據(jù)管理技術(shù),我們可以有效地解決以上3 個難題:其一,聲明式語言(類SQL)可以降低AI 使用門檻;其二,數(shù)據(jù)庫優(yōu)化技術(shù)(如索引、計劃選擇、視圖緩存等)可以提升訓(xùn)練速度,降低資源使用率;其三,數(shù)據(jù)治理技術(shù)可以提升數(shù)據(jù)質(zhì)量和AI訓(xùn)練質(zhì)量.因此,面向AI 的數(shù)據(jù)庫技術(shù)得到了廣泛關(guān)注.
本文從如下4 個層次來介紹數(shù)據(jù)管理技術(shù)如何支持和優(yōu)化人工智能技術(shù)(如圖2 所示).
? 第1 層,用聲明性的語言模型簡化AI 的使用.其一,討論如何用聲明性的SQL 語言代替?zhèn)鹘y(tǒng)的AI 高級語言,降低AI 的使用門檻;其二,調(diào)研面向AI 的SQL 完備性相關(guān)的工作,分析如何細(xì)化SQL 支持AI 的粒度;其三,調(diào)研面向AI 的SQL 的智能推薦技術(shù),即:對SQL 層進(jìn)一步進(jìn)行邏輯封裝,利用可視化等技術(shù)進(jìn)一步提高AI 的易用性(見第1 節(jié));
? 第2 層,用算法優(yōu)化引擎優(yōu)化AI 的執(zhí)行邏輯.其一,調(diào)研面向AI 的優(yōu)化引擎,分析如何支持AI 算法中不同的算子類型;其二,分析AI 算子的代價估計技術(shù),為AI 算法選擇提供基本資料;其三,基于聲明性的語言模型,同一個AI 問題的描述(如類SQL 語句)可以被解析成多種不同類型的AI 算法.因此,這里我們調(diào)研AI 算法的自動生成技術(shù),分析如何根據(jù)AI 問題選擇、組裝基本的AI 算子,生成高效的執(zhí)行邏輯;其四,調(diào)研AI 模型的版本管理技術(shù),利用數(shù)據(jù)庫在管理時間序列數(shù)據(jù)上的經(jīng)驗(yàn),幫助數(shù)據(jù)分析師高效地組織歷史訓(xùn)練結(jié)果(見第2 節(jié));
? 第3 層,用異構(gòu)執(zhí)行引擎提高AI 的物理執(zhí)行效率.在第2 層中,我們調(diào)研了從邏輯層面對AI 算子進(jìn)行建模的方法,然而在物理層面(如芯片、加速器、單機(jī)架構(gòu)),數(shù)據(jù)庫技術(shù)仍然存在著很多局限性:其一,調(diào)研異構(gòu)的AI 計算方法,分析數(shù)據(jù)管理技術(shù)在硬件優(yōu)化、優(yōu)化函數(shù)優(yōu)化、執(zhí)行邏輯優(yōu)化這3 個方面的工作;其二,調(diào)研數(shù)據(jù)庫如何基于分布式加速架構(gòu)(如Hadoop、Spark 等)計算AI,提供大規(guī)模的并行計算能力;其三,分別從數(shù)據(jù)庫內(nèi)核、AI 芯片、新型數(shù)據(jù)庫架構(gòu)這3 個方面調(diào)研AI 執(zhí)行的優(yōu)化技術(shù)(見第3 節(jié));
? 第4 層,用智能數(shù)據(jù)治理引擎優(yōu)化數(shù)據(jù)的管理效率.因?yàn)锳I 算法嚴(yán)重依賴于數(shù)據(jù),數(shù)據(jù)庫在高效支持AI 計算的同時,還需要解決AI 數(shù)據(jù)收集、融合、清洗等多個方面的問題:其一,真實(shí)數(shù)據(jù)中經(jīng)常存在大量的錯誤和不一致性,調(diào)研面向AI 的數(shù)據(jù)發(fā)現(xiàn)技術(shù);其二,繁雜的數(shù)據(jù)清洗工作需要消耗大量的人力,調(diào)研面向AI 的數(shù)據(jù)清洗工作;其三,多源異構(gòu)數(shù)據(jù)的融合開銷比較大,調(diào)研面向AI 的數(shù)據(jù)融合技術(shù)(見第4 節(jié)).
最后,我們對未來基于數(shù)據(jù)庫的人工智能優(yōu)化技術(shù)的發(fā)展方向加以展望(見第5 節(jié)).
Fig.2 Database management techniques for artificial intelligence圖2 面向人工智能的數(shù)據(jù)管理技術(shù)
不同于已有的綜述文獻(xiàn)[1-3]主要關(guān)注人工智能在傳統(tǒng)數(shù)據(jù)庫技術(shù)上的應(yīng)用,本文創(chuàng)新性地從語言模型、邏輯執(zhí)行優(yōu)化、物理執(zhí)行優(yōu)化、數(shù)據(jù)管理這4 個方面綜述數(shù)據(jù)庫技術(shù)如何優(yōu)化人工智能的使用和執(zhí)行效率,并給出未來人工智能技術(shù)與數(shù)據(jù)庫內(nèi)核相結(jié)合所面臨的挑戰(zhàn)和機(jī)遇.
機(jī)器學(xué)習(xí)繁雜的編程語言已成為普惠AI 的重要障礙.相同的機(jī)器學(xué)習(xí)算法有著多種不同的實(shí)現(xiàn)版本,用戶如果沒有足夠的編程經(jīng)驗(yàn),很難快速理解、使用、修改.而SQL 作為高級編程語言,只需聲明輸入數(shù)據(jù)之間的關(guān)系和需要的數(shù)據(jù),就可以方便地為用戶所使用.因此,如果可以為用戶提供基于SQL-like 接口調(diào)用機(jī)器學(xué)習(xí)模型的方法,用戶使用AI 技術(shù)的門檻便會大為降低.本文中,我們分別從3 個方面分析如何更好地建立聲明性的語言模型:(1)高級語言-to-SQL.實(shí)現(xiàn)用類SQL 語言聲明機(jī)器學(xué)習(xí)算法;(2)AI-SQL 的完備性.根據(jù)機(jī)器學(xué)習(xí)算法不同階段的特點(diǎn),合理設(shè)計SQL 語法,提高語言模型的擴(kuò)容能力和執(zhí)行效率;(3)聲明性的智能分析服務(wù).在SQL 上進(jìn)一步封裝操作,簡化模型定義的同時,提升對不同計算引擎的支持能力.
傳統(tǒng)的機(jī)器學(xué)習(xí)算法大多基于Python、R 等命令式的編程語言,需要程序員定義好完整的執(zhí)行邏輯.但是,用聲明性語言SQL 來簡化人工智能技術(shù)使用的同時,也面臨著一定的難度和挑戰(zhàn):首先,目前人工智能和數(shù)據(jù)查詢有不同的執(zhí)行引擎,我們需要設(shè)計一個統(tǒng)一的SQL 解析引擎來兼容不同的執(zhí)行平臺,并提供跨計算引擎優(yōu)化能力;其次,人工智能程序需要完整地給出算法邏輯,我們需要通過邏輯抽象簡化人工智能技術(shù)的使用方法.
最直接的方法是將SQL 翻譯成不同語言的腳本,再分發(fā)到不同平臺上執(zhí)行.如BigQueryML[4]通過在SQL語法中直接增加“CREATMODEL”字段,用于定義常見的機(jī)器學(xué)習(xí)模型(如線性回歸、邏輯回歸等).然后,對于帶有“CREATE MODEL”字段的查詢,BigQuery 直接將類SQL 語句轉(zhuǎn)換為等價的TensorFlow 腳本執(zhí)行.局限于傳統(tǒng)SQL 語法的表示能力(如張量操作通過嵌入Python 腳本實(shí)現(xiàn)),BigQueryML 目前能夠支持的機(jī)器學(xué)習(xí)算法有限(如線性回歸、二元邏輯回歸、多項(xiàng)式邏輯回歸等).
針對上述問題,SQLFlow(https://sql-machine-learning.github.io/)在 SQL 解析引擎(如 MySQL、Hive、SparkSQL 等)和人工智能的算法庫(如TensorFlow、Keras 等)之間建立一套靈活、開放的語言翻譯機(jī)制.如圖3所示.其一,它們主要使用SELECT 語句,通過擴(kuò)展選項(xiàng)關(guān)鍵詞定義TensorFlow 估計器(“TRAINDNN”),使系統(tǒng)與SQL 引擎之間保持松耦合,避免增加如“CREATE MODEL”這樣的一級關(guān)鍵詞;其二,它們提供更加開放的模型定義方式,允許用戶設(shè)置估算器屬性(如Python 類的構(gòu)造函數(shù)的參數(shù);模型訓(xùn)練、評估、預(yù)測的參數(shù)等),用戶可以選擇使用默認(rèn)值,或者將超參數(shù)估計的研究成果集成到系統(tǒng)中,以自動優(yōu)化參數(shù)的默認(rèn)值;其三,SQLFlow 翻譯機(jī)制(SQL→SQLParser→extended SQL→code generator→execution engine)默認(rèn)用從tf.estimator.estimator 派生出來的估計器估計不同張量流圖的開銷,從而自動生成較優(yōu)的數(shù)據(jù)流圖.SQLFlow 并不限制底層機(jī)器學(xué)習(xí)工具包必須是張量流,而只需估算器提供訓(xùn)練、評估和預(yù)測的方法.這種方式下,SQLFlow 就不需要關(guān)心它是否調(diào)用TensorFlow[5]或xgboost[6]框架,從而能夠更好地兼容不同的機(jī)器學(xué)習(xí)框架.
Fig.3 The definition of a DNN classifier in SQLFlow圖3 在SQLFlow 上定義一個DNNClassifier 分類器
面向AI 的SQL 的完備性主要包括兩方面的內(nèi)容:一方面,SQL 語言模型需要有獨(dú)立的描述AI 問題的能力,不需要用戶額外嵌入其他語言腳本;另一方面,支持全過程的AI 操作,即:基于SQL 語句就可以完成所有的數(shù)據(jù)和模型操作,不需要在底層將其轉(zhuǎn)換為其他語言后再執(zhí)行.
MADlib 系統(tǒng)[7]將AI 算子嵌入到數(shù)據(jù)庫系統(tǒng)中,提供完備的SQL 翻譯機(jī)制.MADlib 的核心是將常用的機(jī)器學(xué)習(xí)庫兼容到數(shù)據(jù)庫系統(tǒng)(如PostgreSQL)中:一方面,用戶可以完全依靠SQL 語句調(diào)用機(jī)器學(xué)習(xí)算法,包括數(shù)據(jù)的獲取、連接、抽樣和模型的定義、訓(xùn)練、調(diào)用等;另一方面,由于傳統(tǒng)數(shù)據(jù)庫一般不支持在矩陣上進(jìn)行大量的線性變化操作,因此,MADlib 有針對性地提供面向AI 的數(shù)據(jù)操作和訓(xùn)練模式.
? 面向AI 的數(shù)據(jù)操作:在SQL 級別上,MADlib 智能地將矩陣劃分成塊,將這些塊加載到各個節(jié)點(diǎn)的內(nèi)存空間.一旦進(jìn)行了分區(qū),就可以使用SQL 來協(xié)調(diào)這些塊在一臺或多臺機(jī)器上的內(nèi)存進(jìn)出.傳統(tǒng)的查詢優(yōu)化器或數(shù)據(jù)庫設(shè)計工具不具有智能劃分矩陣模式,因此,MADlib 通過在SQL 語法中增加數(shù)據(jù)劃分功能,使數(shù)據(jù)庫引擎可以精心安排分區(qū)的數(shù)據(jù)移動和各階段的中間結(jié)果.此外,MADlib 提供新的用戶自定義聚合函數(shù).由于數(shù)據(jù)庫系統(tǒng)主要使用聚合函數(shù)處理并行的流式數(shù)據(jù),基于聚合函數(shù)定義的機(jī)器學(xué)習(xí)算法可以更高效地被執(zhí)行;
? 訓(xùn)練模式:為了更好地支持不同機(jī)器學(xué)習(xí)算法的訓(xùn)練模式,MADlib 通過迭代訓(xùn)練對模型進(jìn)行優(yōu)化,引入如梯度下降、馬爾可夫鏈、蒙特卡洛等優(yōu)化算法:(1)通過虛擬表計算迭代次數(shù),聲明一個具有n行的虛擬表(例如通過PostgreSQL 的generate_series_table函數(shù)),并將其與表示單個迭代的視圖連接起來;(2)遞歸查詢,使用SQL 的遞歸特性來執(zhí)行任意停止條件下的迭代計算;(3)驅(qū)動函數(shù),上述方法不具備通用性和可移植性,因此在MADlib 中,我們通過在Python 中編寫驅(qū)動程序UDF 來實(shí)現(xiàn)更復(fù)雜的迭代方法,從而控制迭代和迭代傳遞狀態(tài).類似工作還有SAPPAL[8]、MLlib[9]、MLog[10]等.
對于SQL 語言本身,其核心“SELECT…FROM…WHERE…GROUP BY…”是一種非常強(qiáng)大的工具,可以支持跨一個或多個處理器和磁盤協(xié)調(diào)數(shù)據(jù)的批量處理.但是,使用SQL 仍然有一定的學(xué)習(xí)和使用成本,而且對于普通用戶來說仍然不夠直觀.所以,另一類研究進(jìn)一步將SQL 封裝成動態(tài)圖、電子表格等,利用可視化技術(shù)提供更加智能的推薦服務(wù).
? AI 工作流的可視化推薦
對于人工智能來說,數(shù)據(jù)工作流的主要任務(wù)是讓機(jī)器對已有數(shù)據(jù)進(jìn)行發(fā)現(xiàn)、清洗、融合和分析,從而使機(jī)器能夠?qū)π碌臄?shù)據(jù)進(jìn)行合理的判斷.數(shù)據(jù)工作流設(shè)計是一個復(fù)雜的過程,涉及諸多數(shù)據(jù)工程技術(shù),即使使用SQL語句,也需要很高的專業(yè)經(jīng)驗(yàn)和時間投入.因此,通過將數(shù)據(jù)工作流的設(shè)計過程可視化,我們可以進(jìn)一步簡化AI的使用.代表性工作如BigQueryML.首先,數(shù)據(jù)融合控制中心允許用戶將數(shù)據(jù)工作流拖放到控制中心統(tǒng)一管理,無需編碼就可以基于可視化界面瀏覽和管理所有數(shù)據(jù)集和數(shù)據(jù)工作流.在 Telus Digital 的研發(fā)架構(gòu)中,BigQueryML 提供:(1)預(yù)置的連接器,用于同步不同的數(shù)據(jù)源(如用戶網(wǎng)上行為、用戶交易數(shù)據(jù)、經(jīng)濟(jì)社會環(huán)境數(shù)據(jù)等);(2)數(shù)據(jù)轉(zhuǎn)換集合(如數(shù)據(jù)收集技術(shù)、數(shù)據(jù)轉(zhuǎn)換技術(shù)等),作為生成數(shù)據(jù)工作流的基礎(chǔ)工具庫,方便用戶快速地獲取結(jié)果.此外,通過提供直觀的可視界面和工作流抽象,相比于SQL 語言,進(jìn)一步降低了數(shù)據(jù)融合的門檻.這種增強(qiáng)的可訪問性允許數(shù)據(jù)分析師和科學(xué)家“自助服務(wù)”,而無需云或軟件工程專家的幫助.其次,在數(shù)據(jù)分析方面,面向谷歌公司云上EB 級的智能數(shù)據(jù)分析.每天,谷歌的用戶都會上傳PB 級的數(shù)據(jù)到BigQuery 上,因此,BigQuery 需要在EB 規(guī)模的、無服務(wù)器模式的數(shù)據(jù)倉庫上提供智能分析服務(wù).BigQueryML 采用一種簡單的方法對海量數(shù)據(jù)進(jìn)行機(jī)器學(xué)習(xí)分析,分為Cloud DataflowSQL 和DataflowFlexRS 兩部分:CloudDataflowSQL 用于啟動數(shù)據(jù)流水線和調(diào)度作業(yè),還可以自動檢測批處理或流數(shù)據(jù)處理的需要.CloudDataflowSQL 使用的SQL 語法與BigQuery 中使用的相同,這允許數(shù)據(jù)分析師使用BigQuery UI 中的DataflowSQL,將云發(fā)布/子流與數(shù)據(jù)基礎(chǔ)結(jié)構(gòu)中的文件或表連接起來,然后直接實(shí)時查詢合并的數(shù)據(jù).這意味著用戶可以生成實(shí)時查詢分析并創(chuàng)建“儀表板”以可視化結(jié)果.DataflowFlexRS 則通過靈活的調(diào)度,批處理要執(zhí)行的作業(yè).它可以根據(jù)用戶優(yōu)先級、需求程度動態(tài)地調(diào)度任務(wù),如若用戶正在處理非時間敏感的數(shù)據(jù),它的執(zhí)行優(yōu)先級會被自動后調(diào),但是能夠從可搶占的資源定價中獲益.此外,FlexRS 考慮了成本效益,允許隔夜執(zhí)行作業(yè).
? 交互式的SQL 生成技術(shù)
大量的業(yè)務(wù)用戶將電子表格作為數(shù)據(jù)分析不可或缺的工具,因此,BigQueryML 提供一種虛擬電子表格技術(shù)Connected Sheets:一方面,它結(jié)合了電子表格界面的簡單性和機(jī)器學(xué)習(xí)算法的擬合能力;另一方面,Connected Sheets 沒有行限制,可以使用來自BigQuery 的完整數(shù)據(jù)集.無論是數(shù)百萬還是數(shù)十億行的數(shù)據(jù),都能以一種虛擬電子表格的方式呈現(xiàn)給用戶.用戶在表格上進(jìn)行的數(shù)據(jù)操作都會被自動地轉(zhuǎn)化成SQL 語句發(fā)送到數(shù)據(jù)庫執(zhí)行,并基于分布式處理技術(shù)優(yōu)化查詢效率.它的優(yōu)勢包括:
1)方便使用:用常規(guī)工作表功能(包括公式、數(shù)據(jù)透視表和圖表)即可進(jìn)行分析,并將結(jié)果數(shù)據(jù)可視化為工作表呈現(xiàn)給用戶.如亞洲航空公司(AirAsia)就用這套方法實(shí)現(xiàn)數(shù)據(jù)平民化,即:分析師和業(yè)務(wù)用戶能夠直接創(chuàng)建圖表,并利用它們在海量數(shù)據(jù)集上的現(xiàn)有技能(如審計、數(shù)據(jù)統(tǒng)計等方法)訪問BigQuery 中的基礎(chǔ)數(shù)據(jù),同時還可以實(shí)現(xiàn)最細(xì)粒度數(shù)據(jù)(列/行級)的訪問,而完全無需調(diào)用SQL 語句;
2)安全:基于可信數(shù)據(jù)管道,允許用戶與組織中的任何人安全地共享電子表格上的數(shù)據(jù),進(jìn)行實(shí)時的多人在線分析.
在傳統(tǒng)的數(shù)據(jù)管理系統(tǒng)中,優(yōu)化引擎根據(jù)查詢樹生成實(shí)際使用的執(zhí)行計劃.隨著聲明性AI 語言模型的快速發(fā)展,同一個AI 問題(如圖片分類、人臉識別等)也可能會有多個算法、參數(shù)的組合供選擇,而且不同組合對執(zhí)行性能和表現(xiàn)可能有很大的影響.因此,本節(jié)中,我們調(diào)研數(shù)據(jù)庫優(yōu)化引擎中的技術(shù),分別從面向AI 的優(yōu)化引擎、AI 算子的代價估計、AI 算法的自動生成、AI 模型的版本管理這4 個方面進(jìn)行綜述和分析.
面向AI 的優(yōu)化引擎主要是指根據(jù)查詢樹生成統(tǒng)一的執(zhí)行計劃,對于異構(gòu)的計算平臺,根據(jù)計劃中的算子類型下發(fā)到指定的計算平臺上分別執(zhí)行;否則,由數(shù)據(jù)庫計算引擎直接執(zhí)行.下面我們分別綜述這兩類技術(shù).
? 異構(gòu)的計算平臺
前面提到的機(jī)器學(xué)習(xí)工具SQLFlow 的代碼生成器(CodeGenerator)負(fù)責(zé)執(zhí)行計劃的生成和轉(zhuǎn)發(fā).首先,代碼生成器根據(jù)解析結(jié)果(SQL 關(guān)鍵字匹配)判斷該SQL 是AI 操作還是數(shù)據(jù)庫查詢,如果是AI 操作,代碼生成器先通過ODBC 驅(qū)動程序?qū)⒉樵冎械臉?biāo)準(zhǔn)SELECT 部分傳遞給MySQL,獲取需要的數(shù)據(jù);然后,它進(jìn)入一個循環(huán),反復(fù)從SELECT 語句的運(yùn)行中讀取輸出結(jié)果.如果是訓(xùn)練階段,則用于優(yōu)化模型,否則用經(jīng)過訓(xùn)練的模型進(jìn)行預(yù)測.此外,在每個訓(xùn)練階段,SQLFlow 都要依賴TensorFlow 算法包來更新TRAIN 子句中指定模型的參數(shù).如果是數(shù)據(jù)庫查詢,則直接下發(fā)到優(yōu)化器繼續(xù)執(zhí)行.SQLFlow 的核心優(yōu)勢包括:(1)基于SQL 降低機(jī)器學(xué)習(xí)算法的使用門檻;(2)一條擴(kuò)展的SQLFlowSQL 就可以包含數(shù)據(jù)查詢和機(jī)器學(xué)習(xí)操作,并行執(zhí)行可以提高處理效率.然而,其缺點(diǎn)是:(1)數(shù)據(jù)傳輸開銷沒有得到改善,數(shù)據(jù)和模型計算仍然集成在不同的平臺上;(2)半自動化的問題聲明,仍然需要用戶定義大部分的執(zhí)行操作,代碼生成器對于執(zhí)行算法的優(yōu)化空間較小.
? 統(tǒng)一的數(shù)據(jù)庫計算引擎
MADlib 根據(jù)機(jī)器學(xué)習(xí)算法流程進(jìn)行有針對性的計劃優(yōu)化.以k-means 的一個實(shí)現(xiàn)為例[11].MADlib 主要使用驅(qū)動函數(shù),迭代地調(diào)用用戶定義的聚合函數(shù)(user defined aggregate,簡稱UDA)執(zhí)行操作.UDA 中有兩個狀態(tài):迭代間狀態(tài)代表UDA 最終函數(shù)的輸出,迭代內(nèi)狀態(tài)代表由UDA 的轉(zhuǎn)換和合并函數(shù)維護(hù)的狀態(tài).在聚合期間,轉(zhuǎn)換狀態(tài)包含兩個迭代內(nèi)狀態(tài),但只修改迭代內(nèi)狀態(tài).
1)第1 步,它將k個分類中心存儲在兩種狀態(tài)中,并將訓(xùn)練點(diǎn)到各個分類中心的賦值視為默認(rèn)給出的;
2)第2 步,在遷移函數(shù)中,它首先計算出當(dāng)前點(diǎn)與迭代狀態(tài)開始運(yùn)算時最接近的分類中心.為了簡化運(yùn)算,首先,它需要計算上一次迭代中最接近的分類中心,然后計算當(dāng)前迭代中最接近的中心.如果它顯式地存儲最近的點(diǎn),則可以避免最近質(zhì)心計算的一半.然后,再迭代內(nèi)部狀態(tài)更新分類中心.只有作為聚合的最后一步,迭代內(nèi)狀態(tài)才成為新的迭代間狀態(tài);
3)第3 步,將點(diǎn)存儲在一個關(guān)系表中,該表包含該點(diǎn)的坐標(biāo)屬性和當(dāng)前最近的分類中心.迭代狀態(tài)將每次所有的分類中心的位置存儲在一個矩陣中.MADlib 提供了一個UDF:close_column(a,b),表示在a矩陣中距離向量b最近的向量,用SQL 語句表示為
4)第4 步,數(shù)據(jù)庫會逐個處理查詢(并且不執(zhí)行跨語句優(yōu)化),因此,每k均值迭代需要對數(shù)據(jù)進(jìn)行兩次傳遞,直到確定一個樣本的分類中心.
我們可以看到,MADlib 完全將人工智能算法的執(zhí)行邏輯內(nèi)嵌到數(shù)據(jù)庫中,提供運(yùn)行時優(yōu)化.此外,計算和數(shù)據(jù)傳遞都在同一個數(shù)據(jù)庫系統(tǒng)中進(jìn)行,也進(jìn)一步提升了執(zhí)行效率.但缺點(diǎn)是邏輯優(yōu)化比較復(fù)雜,不方便遷移到新的數(shù)據(jù)庫系統(tǒng)上.
AI 算法中存在大量不同類型的算子,如標(biāo)量、向量、大規(guī)模張量等操作.面對聲明性的AI 問題,如果有多個實(shí)際的AI 算法可以解決,那么評估這些AI 算法的執(zhí)行代價對于提高解決問題的效率就有很大的意義.目前,這方面的工作還比較少.如在Kumar 等人提出的基于線性回歸模型優(yōu)化數(shù)據(jù)源的連接操作[12]中,他們主要研究用于連接操作的混合哈希算法,快速估計所有方法的I/O 和CPU 成本.這種成本估計的思想很簡單,如當(dāng)關(guān)系表R的散列表可以容納在主內(nèi)存中時,它分別估計基于線性回歸模型的索引連接、傳統(tǒng)排序合并算法的執(zhí)行成本.
其中,R和S是要進(jìn)行連接操作的兩張關(guān)系表,hash指的是在內(nèi)存中給一個屬性建立索引的時間,move指的是將一行數(shù)據(jù)拉入內(nèi)存的時間,comp指的是在內(nèi)存里比對兩列屬性的時間,swap是將以行數(shù)據(jù)換出內(nèi)存的時間,F是增量系數(shù).因?yàn)楫?dāng)R的散列表可以容納在實(shí)際內(nèi)存中時沒有I/O 成本,所以很明顯,混合哈希將優(yōu)于排序合并算法.作進(jìn)一步擴(kuò)展后可知,由于任何AI 操作主要包括數(shù)據(jù)搜索、運(yùn)算等基本操作,我們可以先用計算開銷(CPU成本)和數(shù)據(jù)移動開銷(I/O 成本)估計基本操作的代價,再綜合起來對不同的AI 操作進(jìn)行評估.但是,這種基于經(jīng)驗(yàn)公式的方式局限性很大,未來需要有普適性更強(qiáng)的模型來代替這套方法.
基于需求自定義AI 算法是一件麻煩的事情.通過向用戶暴露機(jī)器學(xué)習(xí)模型的數(shù)學(xué)結(jié)構(gòu),TensorFlow、Theano 和Caffe 等機(jī)器學(xué)習(xí)框架可以構(gòu)造出各種靈活且具有表現(xiàn)力的機(jī)器學(xué)習(xí)模型.然而,一方面,用戶需要掌握大量的數(shù)學(xué)、算法方面的知識才能進(jìn)行程序書寫;另一方面,由于沒有聲明性的數(shù)據(jù)管理層,用戶需要處理這些系統(tǒng)中的數(shù)據(jù)加載、移動和批處理等繁瑣且往往容易出錯的任務(wù).因此,人們推出了Keras、PyTorch 等更高層的機(jī)器學(xué)習(xí)庫,用戶只需要聲明性地給出數(shù)據(jù)之間的邏輯關(guān)系,而不再需要具體解釋為了得到最終模型需要做哪些數(shù)據(jù)操作,如Json 格式轉(zhuǎn)換、張量計算操作等.然而,這只解決了前一個問題.他們?nèi)匀徊荒転橄駈umpy數(shù)組這些數(shù)據(jù)提供智能管理,用戶仍然需要處理低層編程細(xì)節(jié),例如需要考慮這些數(shù)組是否適合內(nèi)存,需要自定義經(jīng)典數(shù)據(jù)庫功能,像跨進(jìn)程重用計算、基于時間戳的數(shù)據(jù)快照管理等等.此外,Keras 不能集成到承載大多數(shù)企業(yè)數(shù)據(jù)的標(biāo)準(zhǔn)關(guān)系數(shù)據(jù)庫生態(tài)系統(tǒng)中.于是,我們綜述了數(shù)據(jù)管理技術(shù)在AI 算法自動選擇和組裝中的應(yīng)用.
首先,基于數(shù)據(jù)庫的關(guān)系代數(shù)自動生成人工智能算法.在Mlog[10]中,他們用數(shù)據(jù)庫系統(tǒng)管理所有的數(shù)據(jù)移動、數(shù)據(jù)一致性、數(shù)據(jù)持久化和機(jī)器學(xué)習(xí)相關(guān)的優(yōu)化方法(如SGD、Adam 等).
1)其一,他們基于傳統(tǒng)數(shù)據(jù)庫(如SciDB)構(gòu)建標(biāo)準(zhǔn)數(shù)據(jù)模型,避免重復(fù)數(shù)據(jù)庫系統(tǒng)在數(shù)據(jù)管理上進(jìn)行的工作,包括構(gòu)造relational table schema、建立索引、外鍵等.因?yàn)閭鹘y(tǒng)數(shù)據(jù)庫缺少針對大規(guī)模張量數(shù)據(jù)的索引結(jié)構(gòu),Zhang 等人[13]提出了一種新型的數(shù)據(jù)結(jié)構(gòu)(LinearArrayB-tree,簡稱LAB-tree).他們主要利用線性函數(shù),針對不同維度之間的關(guān)系建立B-tree,然后將B-tree 映射到一維向量上,再對這個一維向量進(jìn)行索引,從而在索引中同時體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)特征;
2)其二,Mlog 通過擴(kuò)展查詢語法支持用戶利用傳統(tǒng)關(guān)系型視圖和關(guān)系型查詢來聲明機(jī)器學(xué)習(xí)模型.首先,他們提供一種基于張量視圖的新型查詢語言,它具有與現(xiàn)有關(guān)系型數(shù)據(jù)模型和查詢語言兼容的形式語義.
(1)數(shù)據(jù)模型:Mlog 的數(shù)據(jù)模型是基于張量的,所有操作都是張量上線性代數(shù)的子集.在Mlog 中,張量與關(guān)系模型密切相關(guān).實(shí)際上,從邏輯上講,張量被定義為一種特殊的關(guān)系類型.設(shè)t為維數(shù)dim(T)的張量,每個維數(shù)j的索引范圍為{1,…,dom(T,j)}.邏輯上,每個張量T對應(yīng)一個關(guān)系R;
(2)關(guān)系代數(shù):我們在張量上定義了一個簡單的關(guān)系代數(shù),并就關(guān)系R定義了它的語義,這使得我們能夠?qū)埩可系牟僮骶o密集成到關(guān)系數(shù)據(jù)庫中,并生成統(tǒng)一的語義.這個關(guān)系代數(shù)與支持線性代數(shù)操作的擴(kuò)展的數(shù)據(jù)立方體非常相似.比如:對于切片算子,用于選擇輸入張量的子集,包括不同的維度區(qū)域等;對于線性代數(shù)算子,它支持一系列線性代數(shù)運(yùn)算符,包括矩陣乘法和卷積.這些操作符都有op(T1,T2)的形式等.這套關(guān)系代數(shù)將SQL 轉(zhuǎn)換成Mlog 程序,然后他們使用文本靜態(tài)分析技術(shù)自動地將Mlog 程序編譯成本機(jī)TensorFlow 程序,生成實(shí)際的執(zhí)行邏輯.
這類工作還有DataRobot(https://www.datarobot.com/)、Zylotech(https://www.zylotech.com/)和谷歌公司的AutoML 等等,他們不僅能夠基于用戶需求自動生成或重用機(jī)器學(xué)習(xí)模型,而且能夠自動匹配合適的優(yōu)化方法.
其次,基于內(nèi)置的AI 算子對人工智能算法進(jìn)行選擇.LogicBlox 提供了類SQL 語言LogiQL[14],基于對傳統(tǒng)SQL 語句封裝更好的支持機(jī)器學(xué)習(xí)等數(shù)據(jù)分析技術(shù).下面我們分別以規(guī)定性分析和預(yù)測分析為例,分析LogicBlox 如何利用LogiQL 生成機(jī)器學(xué)習(xí)算法.
? 規(guī)范性分析(prescriptive analysis)
通過添加一個語言特性,可以將LogiQL 擴(kuò)展支持?jǐn)?shù)學(xué)優(yōu)化和規(guī)范性分析.其思想是,謂詞R[x1,…,xn]=y可以聲明為自由二階變量,這意味著系統(tǒng)負(fù)責(zé)用元組填充它,從而滿足完整性約束.此外,可以將R[*]=y形式的派生謂詞聲明為最小化或最大化的目標(biāo)函數(shù).假設(shè)我們希望自動計算股票金額,以實(shí)現(xiàn)利潤最大化,那么將以下內(nèi)容添加到程序中就足夠了:“l(fā)ang:solve:variable(‘Stock);lang:solve:max(‘totalProfit).”.其中,第1 句是一個二階存在量詞的簡寫,它指出股票的謂詞Stock 應(yīng)該被當(dāng)作我們正在解的一個自由二階變量;而第2 句則指出謂詞總利潤totalProfit 是一個需要最大化的目標(biāo)函數(shù)(服從完整性約束).在算法優(yōu)化引擎中,程序被轉(zhuǎn)換成線性規(guī)劃(LP)問題,并傳遞給適當(dāng)?shù)慕馑闫鱗15].LogicBlox 通過自動合成另一個logiQL 程序(將變量謂詞上的約束轉(zhuǎn)換為可由求解器使用的表示),以類似于馬爾可夫鏈[16,17]的方式將問題實(shí)例中的量詞排除.此外,它利用LogicBlox 系統(tǒng)中的所有查詢評估機(jī)制(例如查詢優(yōu)化、查詢并行化等),提高了模型落地的可擴(kuò)展性.系統(tǒng)調(diào)用適當(dāng)?shù)慕馑闫?并用結(jié)果填充存在量化謂詞的值(將未知數(shù)值轉(zhuǎn)換為已知數(shù)值).此外,邏輯增量地保持對解算器的輸入,使系統(tǒng)可以增量地(重新)解決受輸入更改影響的問題部分.如果更改示例應(yīng)用程序,使股票謂詞現(xiàn)在定義為從產(chǎn)品到整數(shù)的映射,則LogicBlox 將檢測更改并重新編寫問題,以便調(diào)用不同的解算器(支持混合整數(shù)編程(MIP)).
? 預(yù)測分析(predictive analysis)
預(yù)測分析主要是指從已有數(shù)據(jù)中對未來事件進(jìn)行預(yù)測.LogicBlox 中的預(yù)測分析最初是通過一組內(nèi)置的機(jī)器學(xué)習(xí)算法來支持的,這是通過特殊的“預(yù)測型”P2P 規(guī)則實(shí)現(xiàn)的.該規(guī)則有兩種模式:學(xué)習(xí)模式(在學(xué)習(xí)模型的地方)和評估模式(在應(yīng)用模型進(jìn)行預(yù)測的地方).假設(shè)希望預(yù)測分公司產(chǎn)品的月銷售額,我們有一個謂詞sales[sku,store,wk]=amount以及一個謂詞feature[sku,store,featurename]=value,它與每個sku,store和featurename關(guān)聯(lián)一個對應(yīng)的feature值.學(xué)習(xí)規(guī)則(如SM[sku,store]=m←predict〈〈m=logist(v|f)〉〉Sales[sku,store,wk]=v,Feature[sku,store,n]=f)為每個sku及其分支學(xué)習(xí)一個邏輯回歸模型,并將生成的模型對象(它是模型表示的句柄)存儲在謂詞sm[sku,store]=model中.
此外,面對快速變化的人工智能技術(shù),LogicBlox 還支持實(shí)時編程.在這種情況下,傳統(tǒng)的編輯-編譯-運(yùn)行周期被放棄,取而代之的是對程序運(yùn)行時行為進(jìn)行實(shí)時反饋,提供更具交互性的用戶體驗(yàn)[18].例如,在零售計劃應(yīng)用程序中,我們允許用戶動態(tài)定義和更改模式和公式.這些更改會觸發(fā)對數(shù)據(jù)庫服務(wù)器中應(yīng)用程序代碼的更新,而挑戰(zhàn)是需要快速地更新用戶視圖以同步這些更改.
構(gòu)建機(jī)器學(xué)習(xí)模型是一個迭代的過程(時間序列).數(shù)據(jù)分析師在達(dá)到既定的表現(xiàn)標(biāo)準(zhǔn)之前,可能要設(shè)計大量的模型進(jìn)行嘗試(如線下覆蓋面積、準(zhǔn)確度等),而這些模型和相關(guān)數(shù)據(jù)在構(gòu)建新的模型方面有很大的參考價值.然而,當(dāng)前模型的版本管理依賴于用戶手動組織,浪費(fèi)了人力和學(xué)習(xí)資源.因此,我們對基于數(shù)據(jù)庫的AI 模型的版本管理技術(shù)進(jìn)行了調(diào)研.
Vartak 等人提出了一套管理機(jī)器學(xué)習(xí)模型的端到端系統(tǒng)ModelDB[19].建立機(jī)器學(xué)習(xí)模型是一個迭代的過程.一個數(shù)據(jù)科學(xué)家在達(dá)到某些驗(yàn)收標(biāo)準(zhǔn)(例如AUC 截止曲線)之前需要建立數(shù)十到數(shù)百個模型.然而,當(dāng)前的模型構(gòu)建方式是比較隨意的,數(shù)據(jù)科學(xué)家缺少科學(xué)的工具來管理隨時間構(gòu)建的模型.這導(dǎo)致出現(xiàn)了如下3 個問題.
1)想要復(fù)現(xiàn)歷史版本的模型或結(jié)果非常耗時,有時難以實(shí)現(xiàn);
2)要求數(shù)據(jù)科學(xué)家“記住”模型先前版本的結(jié)果和參數(shù).例如,數(shù)據(jù)科學(xué)家必須記住已測試的參數(shù)或特征的組合及其結(jié)果,以便得出見解并通知下一個實(shí)驗(yàn);
3)數(shù)據(jù)科學(xué)家很難回答有關(guān)不同版本的具體差別.例如,數(shù)據(jù)科學(xué)家經(jīng)常在某一點(diǎn)上發(fā)現(xiàn)代碼或數(shù)據(jù)中的差異,然后必須重新運(yùn)行代碼或數(shù)據(jù)下游的所有分析.然而,在缺乏模型版本控制的情況下,識別實(shí)驗(yàn)非常困難.
為了解決以上問題,ModelDB 基于數(shù)據(jù)庫系統(tǒng),在訓(xùn)練模型時接收模型和相關(guān)的元數(shù)據(jù),以結(jié)構(gòu)化的格式存儲模型數(shù)據(jù),并自動跟蹤本機(jī)環(huán)境中構(gòu)建的機(jī)器學(xué)習(xí)模型,智能地為其編制索引,允許通過SQL 和可視化界面靈活地瀏覽模型.這樣,ModelDB 可以幫助數(shù)據(jù)科學(xué)家高效地進(jìn)行歷史版本管理,提高模型構(gòu)建和重現(xiàn)的效率.
另一種方法則是基于鏈?zhǔn)浇Y(jié)構(gòu)進(jìn)行版本控制.SimSQL[17]是一個基于SQL 語法規(guī)范的數(shù)據(jù)庫管理系統(tǒng),它提供大規(guī)模分布式的模擬數(shù)據(jù)庫值(整個數(shù)據(jù)庫數(shù)據(jù)的抽象)的馬爾可夫鏈,鏈的值在任何時間節(jié)點(diǎn)上都包含整個數(shù)據(jù)庫的內(nèi)容.SimSQL 采用了許多最初在蒙特卡洛數(shù)據(jù)庫系統(tǒng)(MCDB)[20]中提出的想法,允許用戶定義除普通數(shù)據(jù)庫表之外的隨機(jī)數(shù)據(jù)庫表.在隨機(jī)表中,有些條目是具有相關(guān)概率分布的隨機(jī)變量(不一定以閉合形式已知),而其他條目則是普通的、確定性的數(shù)據(jù)值.從概念上講,當(dāng)發(fā)出包含隨機(jī)表的SQL 查詢時,SimSQL 使用偽隨機(jī)數(shù)生成技術(shù)來實(shí)例化每個隨機(jī)數(shù)據(jù)值.查詢可以在生成的數(shù)據(jù)庫實(shí)例上運(yùn)行.這一過程以蒙特卡洛方式重復(fù)多次,以獲得查詢結(jié)果的經(jīng)驗(yàn)分布.SimSQL 通過使用“元組包”方法共享公共成本,同時以高效的方式實(shí)例化和處理許多可能的數(shù)據(jù)庫實(shí)例.
上一節(jié)中,我們主要從邏輯層面介紹了數(shù)據(jù)庫優(yōu)化技術(shù)在AI 領(lǐng)域的應(yīng)用.而在物理層面,為了原生支持AI計算,我們?nèi)匀幻媾R著一些挑戰(zhàn).傳統(tǒng)數(shù)據(jù)庫執(zhí)行引擎用于實(shí)際地對指定數(shù)據(jù)進(jìn)行處理,目前已經(jīng)可以實(shí)現(xiàn)行級并行處理.但是傳統(tǒng)執(zhí)行引擎支持的算子運(yùn)算比較單一,如基本的Aggregate、HashJoin 等數(shù)據(jù)庫算子.所以,為了用數(shù)據(jù)庫執(zhí)行引擎原生地支持AI 操作,我們分別從算子實(shí)現(xiàn)(異構(gòu)的AI 計算引擎)、并行優(yōu)化(分布式加速架構(gòu))、執(zhí)行優(yōu)化(AI 執(zhí)行優(yōu)化技術(shù))、智能數(shù)據(jù)分析這4 個方面綜述執(zhí)行引擎對AI 計算的支持.
本節(jié)中,我們分別介紹如何基于數(shù)據(jù)管理技術(shù)更好地支持人工智能算法中異構(gòu)的操作算子.AI 算子主要有兩類特點(diǎn):(1)種類多樣,包括標(biāo)量、向量、大規(guī)模張量等不同操作;(2)計算密集型,大規(guī)模的張量計算對芯片(算力)和存儲(數(shù)據(jù))的性能要求很高.針對以上特點(diǎn),我們分別從調(diào)研數(shù)據(jù)管理技術(shù)在硬件優(yōu)化、優(yōu)化函數(shù)優(yōu)化、執(zhí)行邏輯優(yōu)化這3 個方面展開工作.
首先,一些數(shù)據(jù)庫系統(tǒng)集成了異構(gòu)的計算框架和大規(guī)模內(nèi)存計算能力,可以有效提高處理人工智能算法的能力.例如,ColumnML[21]系統(tǒng)可以在執(zhí)行 ML 任務(wù)之前方便地對復(fù)雜模式進(jìn)行預(yù)處理和非規(guī)范化:首先,ColumnML 集成專門的硬件加速器,用FPGA、GPU 等新硬件對常用子運(yùn)算符(如哈希、分區(qū)、排序、高級分析等)進(jìn)行專門化處理,從而提高DBMS 中的處理效率;其次,在大多數(shù)這類系統(tǒng)中,將數(shù)據(jù)移動到加速器需要高效的I/O,否則性能優(yōu)勢將不復(fù)存在,所以ColumnML 基于內(nèi)存型列式存儲,面向列的處理使得從內(nèi)存中移動數(shù)據(jù)變得更加容易.同時,仍然能夠利用硬件中的可用并行性,特別是在壓縮列時,可以提高I/O 效率.最后,這種列式存儲的方式不完全適用于機(jī)器學(xué)習(xí)算法,特別像隨機(jī)梯度下降(SGD)等優(yōu)化函數(shù),它們經(jīng)常同時訪問一個元組的所有屬性,逐行處理元組,存在大量的“行操作”.但是它們?nèi)匀豢梢栽诹写鎯ι蠄?zhí)行SGD:由于DRAM 的行緩沖區(qū)位置的原因[22],為了使從內(nèi)存中的遠(yuǎn)程地址讀取更加有效,必須批量讀取:從一列讀取多個緩存線,將它們存儲在緩存中,再從下一列讀取.這實(shí)際上是一種動態(tài)的列存儲到行存儲的轉(zhuǎn)換,是不利的,所以它需要與數(shù)據(jù)集中的功能數(shù)量成比例地緩存空間和較大的批處理大小,以便盡可能地按照順序讀取[23,24].
為了解決ColumnML 等列式存儲系統(tǒng)中行式計算低效的問題,Shwartz 等人[25]引入了一種新的優(yōu)化函數(shù)——隨機(jī)坐標(biāo)下降算法(stochastic coordinate descent,簡稱SCD),并在運(yùn)行時提供一個邊界以進(jìn)行聚合.SCD 的核心思想是:保持一個包含模型與樣本之間內(nèi)積結(jié)果的向量,然后可以始終將所做的更改應(yīng)用于模型的一個坐標(biāo),也可以應(yīng)用于該內(nèi)積向量,這將在所有樣本和對應(yīng)的優(yōu)化梯度之間保持最新的內(nèi)部積.該模型要求對所有樣本只訪問一個坐標(biāo),這相當(dāng)于按列訪問模式.我們通過在每次迭代中隨機(jī)地(不替換)選擇一個特性來執(zhí)行SCD.模型x初始化為0,因此內(nèi)積向量z也從0 開始.一個epoch 對應(yīng)于處理整個數(shù)據(jù)集:完全訪問每一列,以計算Lasso[26]邏輯回歸的部分漸變.然后,利用局部梯度更新模型的相應(yīng)坐標(biāo).最后,進(jìn)行內(nèi)積向量更新,以使z中的內(nèi)積保持最新,通過對損失函數(shù)的估計,對優(yōu)化問題進(jìn)行多個階段的求解,直至收斂.此外,他們還使用了SCD 的分區(qū)版本(partitioned version of SCD),靈感來自于Jaggi 等人引入的Cocoa 算法[27].Cocoa 的目標(biāo)是:在執(zhí)行分布式雙坐標(biāo)提升時,降低通信頻率.PSCD 的主要目標(biāo)是減少中間狀態(tài)的保留量.由于緩存位置的存在,可以降低內(nèi)存訪問的復(fù)雜性.
此外,數(shù)據(jù)管理技術(shù)可以提供細(xì)粒度的數(shù)據(jù)操作優(yōu)化.前面我們介紹了MADlib 是如何在邏輯層面上實(shí)現(xiàn)AI 算法自動化生成的,而在物理層面上,
? 一方面,MADlib 的數(shù)據(jù)庫引擎可以利用線性代數(shù)例程來處理其獲取的核心數(shù)據(jù)片段.為此,它需要快速地調(diào)用經(jīng)過優(yōu)化的線性代數(shù)方法.除了執(zhí)行塊的粗粒度管理之外,數(shù)據(jù)庫引擎還必須有效地調(diào)用執(zhí)行算術(shù)計算的單個節(jié)點(diǎn)上的代碼.對于在行級操作的UDF(可能每行多次),標(biāo)準(zhǔn)方法是在C 或C++中實(shí)現(xiàn)之.當(dāng)進(jìn)行密集矩陣運(yùn)算時,這些函數(shù)會對開放源代碼庫進(jìn)行本地調(diào)用,如Lapack[27]或Eigen[28];
? 另一方面,稀疏矩陣在標(biāo)準(zhǔn)數(shù)學(xué)庫中沒有很好地得到處理,需要進(jìn)行更多的定制,以便在磁盤和內(nèi)存中有效地加以表示.他們選擇用C 語言為MADlib 編寫自己的稀疏矩陣庫,利用C 語言中的基本算術(shù)循環(huán)進(jìn)行編碼.
傳統(tǒng)單機(jī)上的AI 優(yōu)化方法已經(jīng)不能滿足大規(guī)模機(jī)器學(xué)習(xí)的需求,分布式計算引擎可以從兩個方面進(jìn)一步優(yōu)化機(jī)器學(xué)習(xí)的執(zhí)行效率:首先,通過水平擴(kuò)展,我們可以將機(jī)器學(xué)習(xí)的訓(xùn)練任務(wù)下發(fā)到多個物理節(jié)點(diǎn)上,利用物理并行方式加速AI 算法的執(zhí)行效率;其次,由于很多機(jī)器學(xué)習(xí)的優(yōu)化算法需要頻繁讀寫數(shù)據(jù),如批量隨機(jī)下降算法的每輪訓(xùn)練需要計算所有樣本的損失值,我們通過數(shù)據(jù)壓縮,將盡可能多的數(shù)據(jù)放到內(nèi)存中進(jìn)行計算,從而進(jìn)一步提升整體執(zhí)行效率.下面我們分別從分布式任務(wù)并行和分布式內(nèi)存計算兩個方面綜述這類技術(shù).
? 分布式并行計算
單機(jī)數(shù)據(jù)庫的性能面臨著瓶頸,越來越多的數(shù)據(jù)庫系統(tǒng)支持分布式架構(gòu),如MPP、NUMA,以解決臨界資源帶來的瓶頸問題,為AI 技術(shù)提供大規(guī)模的并行數(shù)據(jù)處理功能.同時,很多研究考慮如何利用分布式數(shù)據(jù)庫系統(tǒng)加速機(jī)器學(xué)習(xí)算法,如Kinetica[29]基于MPP 架構(gòu)支持大規(guī)模的機(jī)器學(xué)習(xí)訓(xùn)練.首先,它在分布式節(jié)點(diǎn)上進(jìn)行大規(guī)模的統(tǒng)計和分析查詢;其次,在這個規(guī)模下,機(jī)器學(xué)習(xí)模型可以同時基于原始數(shù)據(jù)的多個子集進(jìn)行訓(xùn)練,對每個子集,模型學(xué)習(xí)到一種狀態(tài)之后就將這部分?jǐn)?shù)據(jù)丟棄在數(shù)據(jù)倉庫中(節(jié)省空間);最后,基于自定義函數(shù)(CDF),用戶可以定義模型的訓(xùn)練方式.另一種方法是重新定義分布式機(jī)器學(xué)習(xí)庫,如MLlib 基于Spark 的分布式執(zhí)行框架執(zhí)行機(jī)器學(xué)習(xí)算法.首先,它提供一套開源的分布式機(jī)器學(xué)習(xí)庫,算法包括樸素貝葉斯、決策樹、k-means 等[30].該庫還提供了許多用于凸優(yōu)化、分布式線性代數(shù)、統(tǒng)計分析和特征提取的低級原語和基本實(shí)用程序,并支持各種I/O 格式,包括對libsvm 格式的本機(jī)支持、通過spark-SQL 進(jìn)行數(shù)據(jù)集成用于模型導(dǎo)出的MLlib 的內(nèi)部格式.在最底層,Spark Core 提供了一個通用的執(zhí)行引擎,有超過80 個算子來轉(zhuǎn)換數(shù)據(jù),例如進(jìn)行數(shù)據(jù)清理和特征化.相似工作還有RHEEM[31],從更細(xì)粒度層次支持分布式的執(zhí)行算子.為了實(shí)現(xiàn)無縫的分布式執(zhí)行,RHEEM 的邏輯層算子(UDF 中)經(jīng)過優(yōu)化(任務(wù)并行化、部署細(xì)節(jié))轉(zhuǎn)換成實(shí)際執(zhí)行算子,再分發(fā)到各個節(jié)點(diǎn)上執(zhí)行.它將數(shù)據(jù)單位細(xì)化到行/列級,允許我們在更高的并行度上設(shè)計操作并獲得更好的表現(xiàn).
? 分布式內(nèi)存計算
分布式內(nèi)存計算是將盡可能多的數(shù)據(jù)經(jīng)過壓縮存儲在主內(nèi)存中,通過避免頻繁的I/O 操作加速AI 的計算效率.在分析和商業(yè)智能數(shù)據(jù)庫(business intelligent DB)中,廣泛地采用這種模式來加速數(shù)據(jù)分析的效率.如MLWeaving 進(jìn)一步提供了一種緊湊的內(nèi)存表示,它通過將具有數(shù)據(jù)拆分到比特級別,對具有指定值的不同的比特位在大規(guī)模內(nèi)存上獨(dú)立存儲,從而方便且靈活地進(jìn)行并行數(shù)據(jù)處理.然后,數(shù)據(jù)分析平臺Kx 通過結(jié)合基于內(nèi)存的時間序列數(shù)據(jù)庫kdb+,提高數(shù)據(jù)處理效率的同時減少資源開銷.首先,Kx 具有管理、吸收、存儲和分析大型數(shù)據(jù)集的能力,是深度神經(jīng)網(wǎng)絡(luò)的理想執(zhí)行引擎;其次,基于內(nèi)存中的流分析功能,適合快速進(jìn)行數(shù)據(jù)集的采樣、聚合和連接操作.
在當(dāng)今數(shù)據(jù)中心里,機(jī)器學(xué)習(xí)已經(jīng)成為一種重要負(fù)載,如廣告定位、內(nèi)容推薦等.如上一節(jié)所述,目前已存在很多支持人工智能技術(shù)的平臺.但是,傳統(tǒng)系統(tǒng)多把AI 技術(shù)當(dāng)成一種數(shù)據(jù)服務(wù)型負(fù)載的擴(kuò)展,錯過了重要的表現(xiàn)優(yōu)化的機(jī)會.比如,研究型系統(tǒng)Clipper、商業(yè)系統(tǒng)AmazonSagemaker 和微軟的AzureML 等系統(tǒng),將模型當(dāng)成黑盒使用,或只提供普通的系統(tǒng)優(yōu)化手段,如輸入緩存、批量處理等等.像Pretzel 則只能為傳統(tǒng)編譯器提供端到端的優(yōu)化方法.然而,提高機(jī)器學(xué)習(xí)模型的訓(xùn)練效率對于AI 技術(shù)的落地和運(yùn)行時優(yōu)化至關(guān)重要.這一部分包括模型的訓(xùn)練、優(yōu)化、管理等諸多方面,有很大的性能提升空間.現(xiàn)有數(shù)據(jù)庫技術(shù)主要從3 個方面來加快機(jī)器學(xué)習(xí)的訓(xùn)練效率:(1)基于數(shù)據(jù)庫內(nèi)核執(zhí)行AI 操作,提高執(zhí)行效率;(2)基于AI 芯片優(yōu)化AI 算子的執(zhí)行,提高計算效率;(3)基于新型數(shù)據(jù)庫系統(tǒng)支持AI 技術(shù),對整個執(zhí)行流程進(jìn)行優(yōu)化.
? GPU+數(shù)據(jù)庫技術(shù)
GPU 數(shù)據(jù)庫是最早興起的一批AI 數(shù)據(jù)庫系統(tǒng),相關(guān)工作包括Kinetica[29]、MapD[32]、PG-Storm(http://heterodb.github.io/pg-strom/)、Blazegraph(https://www.blazegraph.com/)等等.Kinetica 是一款基于GPU 加速執(zhí)行引擎的數(shù)據(jù)庫系統(tǒng).傳統(tǒng)CPU 的每個核心具有取指和調(diào)度單元構(gòu)成的完整前端,因而其核心是多指令流多數(shù)據(jù)流(multiple instruction multiple data,簡稱MIMD),每個CPU 核心可以在同一時刻執(zhí)行自己的指令,與其他核心完全沒有關(guān)系.但是這種設(shè)計增加了芯片的面積,限制了單塊芯片集成的核心數(shù)量.GPU 的每個流多處理器才能被看作類似于CPU 的單個核心,每個流多處理器以單指令流多線程方式工作,只能執(zhí)行相同的程序.盡管GPU運(yùn)行頻率低于CPU,但是由于其流處理器數(shù)目遠(yuǎn)遠(yuǎn)多于CPU 的核心數(shù),因此我們稱其為“眾核”,其單精度浮點(diǎn)處理能力達(dá)到了同期CPU 的10 倍之多.因此,集成了上千個處理核(目前最多能達(dá)到6 000 核并行)的GPU 芯片可以提高大規(guī)模并行計算的效率.為了充分發(fā)揮GPU 的優(yōu)勢,Kinetica 支持用戶定義函數(shù)(user defined function,簡稱UDF)框架,允許自定義算法和代碼直接在數(shù)據(jù)庫中的數(shù)據(jù)上運(yùn)行.UDF 使得在數(shù)據(jù)庫中運(yùn)行自定義計算和數(shù)據(jù)處理成為可能.這提供了一種高度靈活的方法,可以通過網(wǎng)格計算在規(guī)模上執(zhí)行復(fù)雜的高級分析,將網(wǎng)絡(luò)中每臺計算機(jī)的空閑處理能力連接起來,以承擔(dān)一個被劃分為多個任務(wù)的作業(yè).數(shù)據(jù)庫業(yè)務(wù)和AI 工作負(fù)載可以在同一個GPU 加速數(shù)據(jù)庫平臺上一起運(yùn)行.用戶定義的函數(shù)可以用C++、Java 或Python 編寫.Kinetica 還提供捆綁式TensorFlow,用于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)用例.而微軟的Azure 還提供基于云架構(gòu)的機(jī)器學(xué)習(xí)訓(xùn)練服務(wù),用戶可以根據(jù)不同的需求快速訂制GPU 集群,批量執(zhí)行AI 作業(yè).
? FPGA+數(shù)據(jù)庫技術(shù)
隨著微軟公司利用FPGA 芯片提高模型訓(xùn)練的靈活性和效率,FPGA 數(shù)據(jù)庫也逐漸興起[33].如MLWeaving提供一套基于數(shù)據(jù)庫(如DoppioDB[33,34])和FPGA 的硬件加速技術(shù)[35],主要用于提高低精度輸入數(shù)據(jù)的處理效率.FPGA 可以簡單地被認(rèn)為是包含低級基礎(chǔ)芯片的電路板,例如AND 和OR 門,通常使用硬件描述語言(HDL)指定FPGA 配置,可以配置成與特定任務(wù)或應(yīng)用程序的需求相匹配的方式.此外,FPGA 能夠最大限度地提高并行性和資源利用效率,已被Intel 用于加快深度學(xué)習(xí)網(wǎng)絡(luò)的實(shí)施.MLWeaving 支持FPGA 主要是因?yàn)槠湓谔剿骺赡艿乃惴ê驮O(shè)計方面提供了更高的通用性,面對快速演進(jìn)的機(jī)器學(xué)習(xí)算法具有很大的意義.MLWeaving 主要提供兩個方面的優(yōu)化:(1)支持在任何精度級別上高效地檢索輸入數(shù)據(jù)的內(nèi)存布局;(2)基于FPGA 的設(shè)計,提供硬件加速,以加速SGD 優(yōu)化算法.而不在意使用的精度如何.SGD 是一次一個樣本地進(jìn)行評估,即在計算梯度之前讀取樣本的所有特征.在完全精確的情況下,讀取與數(shù)據(jù)點(diǎn)對應(yīng)的行可以訪問該樣本的所有特性.而MLWeaving在位級別上垂直地劃分每個數(shù)據(jù)點(diǎn)(表中的一行),以便連續(xù)存儲數(shù)據(jù)點(diǎn)所有特性的第1 位,然后存儲第2 位等.這提供了兩個好處:首先,讀取值所需的內(nèi)存訪問數(shù)與所用的精度成正比,低精度會導(dǎo)致更少的內(nèi)存訪問;第二,該格式允許以位流的形式將數(shù)據(jù)序列化到硬件加速器中,從而提高內(nèi)存帶寬利用率.而 Swarm 64 系統(tǒng)(https://www.swarm64.com)還提供CPU+FPGA 的異構(gòu)芯片支持服務(wù),利用CPU 陣列處理傳統(tǒng)的關(guān)系型事務(wù),利用FPGA 模型訓(xùn)練機(jī)器學(xué)習(xí)模型,更好地提高事務(wù)處理的效率和資源的利用率.
? 端到端的執(zhí)行優(yōu)化系統(tǒng)
傳統(tǒng)的機(jī)器學(xué)習(xí)使用方式是一種流水線式的:將輸入數(shù)據(jù)處理成數(shù)值型的向量,然后在特征向量上執(zhí)行ML 模型.計算特征的代價比較高,是一個重要的瓶頸.
一方面,一些工作主要從最終訓(xùn)練目的的角度預(yù)估執(zhí)行代價,自動生成ML 執(zhí)行流水線,如Kraft 等人提出了一套為人工智能模型提供端到端優(yōu)化的系統(tǒng)Willump[36].機(jī)器學(xué)習(xí)不同于傳統(tǒng)負(fù)載:首先,很多情況下,系統(tǒng)不必計算所有的輸入數(shù)據(jù),可以選擇更加“廉價”的模型來預(yù)估原有模型,如不計算所有的輸入特征,從而加速訓(xùn)練;其次,不同于傳統(tǒng)SQL 查詢封裝機(jī)制,機(jī)器學(xué)習(xí)算法大多直接被高層應(yīng)用所調(diào)用.針對以上特點(diǎn),
1)Willump 使用一個完整的程序數(shù)據(jù)流分析算法和一個成本模型來識別重要但計算成本低的特性,從而有效和準(zhǔn)確地加速模型的執(zhí)行.利用這些特性,Willump 自動訓(xùn)練一個近似模型,該模型可以識別和分類“簡單”的數(shù)據(jù)輸入.例如,毒性評論分類的近似模型可能會將帶有詛咒詞的評論分類為毒性,并將其他評論級聯(lián)到更強(qiáng)大的模型中;
2)Willump 提供查詢感知優(yōu)化.單個數(shù)據(jù)輸入的并行計算是困難的,因?yàn)镸L 流水線可能不會自然地并行化,并且通常采用缺乏低延遲多線程的語言編寫.Willump 使用一種數(shù)據(jù)流分析算法來解決這些挑戰(zhàn),該算法識別ML 流水線的計算獨(dú)立組件,并編譯為低延遲多線程框架,將延遲提高4 倍.
此外,Willump 將這兩方面的優(yōu)化方法與標(biāo)準(zhǔn)編譯器優(yōu)化方法和傳統(tǒng)計算圖構(gòu)建方法相結(jié)合,提供自動的ML 流水線快速推理代碼的特征緩存方案,即迭代式地增加參與計算的特征,直到表現(xiàn)足夠滿意.
另一方面,一些工作設(shè)計集成式的執(zhí)行管理系統(tǒng),幫助執(zhí)行引擎更好地完成訓(xùn)練任務(wù).例如,Amazon SageMaker(https://aws.amazon.com/cn/sagemaker/)允許用戶方便地創(chuàng)建、訓(xùn)練、部署任意規(guī)模的機(jī)器學(xué)習(xí)模型,優(yōu)勢包括:
1)避免基礎(chǔ)設(shè)施管理.SageMaker 運(yùn)行用戶定制訓(xùn)練集群(EC2 類型,節(jié)點(diǎn)數(shù)目),由系統(tǒng)自動進(jìn)行配置,并在訓(xùn)練任務(wù)結(jié)束時自動終止進(jìn)程;
2)降低訓(xùn)練開銷.EC2 Spot Instance 利用全管理Spot 訓(xùn)練技術(shù)(managed spot training),包括內(nèi)置AI 算法、自定義AI 模型、模型調(diào)優(yōu)等,進(jìn)一步降低近90%的訓(xùn)練開銷;
3)快速異?;謴?fù).SageMaker 利用Checkpoint 機(jī)制,保證程序在異常終止時迅速地從最近鏡像中恢復(fù).
數(shù)據(jù)分析技術(shù)具有非常廣泛的領(lǐng)域,包括數(shù)據(jù)處理、分析、預(yù)測等諸多方面[37].傳統(tǒng)的數(shù)據(jù)分析技術(shù)存在很大的局限性,如算法適應(yīng)性差、局限性大等.人工智能為數(shù)據(jù)分析技術(shù)提供了新的算法和思路,在數(shù)據(jù)分析的優(yōu)化中做出了很大的貢獻(xiàn)[38,39].然而,基于AI 的數(shù)據(jù)分析技術(shù)仍然有很大的優(yōu)化空間[40].根據(jù)前3 節(jié)的工作,我們進(jìn)一步調(diào)研了基于智能數(shù)據(jù)庫的數(shù)據(jù)分析技術(shù).
? 可擴(kuò)展的數(shù)據(jù)分析框架
預(yù)測性分析日益成為企業(yè)預(yù)測需求的重要方式,如估計客戶需求或安排日常維護(hù).數(shù)據(jù)倉庫通常為企業(yè)存儲最有價值的數(shù)據(jù)集,但這些分析能力傳統(tǒng)上是機(jī)器學(xué)習(xí)專家的領(lǐng)域,多是大多數(shù)數(shù)據(jù)分析師或業(yè)務(wù)用戶無法共享的技能.BigQuery ML[41]推出具有擴(kuò)展的機(jī)器學(xué)習(xí)模型,使數(shù)據(jù)分析師能夠使用熟悉的 SQL 直接在BigQuery 內(nèi)部的大型數(shù)據(jù)集上構(gòu)建和部署機(jī)器學(xué)習(xí)模型.此外,BigQuery 集成了經(jīng)典的機(jī)器學(xué)習(xí)模板,如k-均值聚類和矩陣分解,以進(jìn)行客戶身份的細(xì)分并給出產(chǎn)品建議.客戶也可以通過BigQueryML 建立和直接導(dǎo)入基于TensorFlow 框架的深度神經(jīng)網(wǎng)絡(luò)模型.Geotab 利用100 多萬輛聯(lián)網(wǎng)車輛的匯總數(shù)據(jù)提供新的智能城市解決方案.我們能夠使用BigQuery 的地理信息系統(tǒng)來了解交通流模式,而BigQuery ML 幫助我們深入了解根據(jù)惡劣天氣預(yù)測城市危險駕駛區(qū)域.另外,還將機(jī)器學(xué)習(xí)應(yīng)用于表格數(shù)據(jù)而不必編寫單行代碼.并非所有能夠從機(jī)器學(xué)習(xí)分析中獲益的人都是SQL 專家.為了使得存儲于BigQuery 和云存儲中的結(jié)構(gòu)化數(shù)據(jù)上更容易應(yīng)用ML,我們提供AutoML 表,以便數(shù)據(jù)科學(xué)家、分析師和開發(fā)人員等任何用戶只需點(diǎn)擊幾下,就可以在結(jié)構(gòu)化數(shù)據(jù)上自動構(gòu)建和部署最先進(jìn)的機(jī)器學(xué)習(xí)模型,從而將所需總的時間從幾周縮短到幾天,而無需編寫一行代碼.
? 智能的近似查詢
對于很多用戶來說,非精確但快速響應(yīng)的數(shù)據(jù)庫查詢是傳統(tǒng)查詢的替代方法.形式概念分析(FCA)的使用,使人們能夠?qū)?jīng)典數(shù)據(jù)庫管理系統(tǒng)(DBMS)提供的答案做出近似的回答[42].然而,靈活的查詢在響應(yīng)質(zhì)量上可能代價高昂(尤其是需要計算聚合函數(shù)“sum”“avg”“count”“var”等).因此,Tlili 等人提出了一種機(jī)器學(xué)習(xí)與近似查詢處理技術(shù)(AQP)相結(jié)合的查詢處理方法[43]:(1)對于聚合查詢,他們?nèi)匀皇褂肍CA 生成層次結(jié)構(gòu)的數(shù)據(jù)路由方法,允許用戶將這些響應(yīng)個性化為多個級別;(2)為了降低響應(yīng)時間,他們使用近似查詢處理(AQP),犧牲準(zhǔn)確性以降低響應(yīng)時延;(3)為了提高回答的準(zhǔn)確性,他們同時采用在線聚合技術(shù)[44],在運(yùn)行應(yīng)用程序時逐漸接近答案.此外,在線聚合技術(shù)包括對數(shù)據(jù)庫的初始數(shù)據(jù)應(yīng)用已知的樣本信息,以最小化磁盤訪問,平衡響應(yīng)時間和回答的準(zhǔn)確性.
AI 算法和模型依賴于高質(zhì)量的數(shù)據(jù),但在現(xiàn)實(shí)中,數(shù)據(jù)存在著大量的錯誤和不一致信息.傳統(tǒng)的數(shù)據(jù)管理技術(shù)包括數(shù)據(jù)發(fā)現(xiàn)、清洗、融合等工作,涉及多模數(shù)據(jù)管理、多源數(shù)據(jù)融合等諸多復(fù)雜的問題,但是仍然還存在一些不足,例如質(zhì)量不高、仍然需要大量的人力投入.因此,在數(shù)據(jù)管理系統(tǒng)支持AI 算法時,面對海量異構(gòu)的訓(xùn)練數(shù)據(jù)和模型數(shù)據(jù),我們需要提供更加高效的數(shù)據(jù)存儲和分析技術(shù).智能數(shù)據(jù)管理引擎[45,46]通過結(jié)合AI 技術(shù)優(yōu)化數(shù)據(jù)庫組件,可以為大規(guī)模的數(shù)據(jù)發(fā)現(xiàn)、清洗、融合提供更加智能的服務(wù).
多源異構(gòu)數(shù)據(jù)中可能存在大量的信息丟失現(xiàn)象.此外,很多數(shù)據(jù)都是稀疏的,不容易發(fā)現(xiàn)真正有意義或敏感的數(shù)據(jù).這些問題由于缺少統(tǒng)一的評價規(guī)則、數(shù)據(jù)結(jié)構(gòu)復(fù)雜、信息不對稱等挑戰(zhàn)而變得非常難以解決.故此,下面我們分別介紹如何結(jié)合數(shù)據(jù)管理系統(tǒng)和分布式計算平臺,更好地實(shí)現(xiàn)數(shù)據(jù)發(fā)現(xiàn).
? 統(tǒng)一的數(shù)據(jù)處理架構(gòu)
Teradata-for-DL 平臺提供了統(tǒng)一的數(shù)據(jù)處理架構(gòu)[47],重新記錄不同的數(shù)據(jù)是如何被存儲、管理、分發(fā)和持久化的.雖然Teradata 數(shù)據(jù)庫是一個傳統(tǒng)的關(guān)系數(shù)據(jù)庫,它使用ASTER 分析系統(tǒng)進(jìn)行數(shù)據(jù)發(fā)現(xiàn),這包括對非結(jié)構(gòu)化或半結(jié)構(gòu)化數(shù)據(jù)的“極端SQL”分析和高級分析(非SQL).此外,Aster 引入了不同類型數(shù)據(jù)需要的計算平臺,包括引入MapReduce 提供分布式計算能力;引入圖形引擎和NPath 分析等.這樣,Teradata-SQL-for-DL 能夠更好地混合、使用不同的數(shù)據(jù)源(如傳統(tǒng)的關(guān)系型數(shù)據(jù)存儲在企業(yè)數(shù)據(jù)倉庫中、實(shí)時數(shù)據(jù)流存儲在Hadoop 中,等等),供深度學(xué)習(xí)模型學(xué)習(xí),如給銀行客戶的信用進(jìn)行打分.此外,它還提供在線的Web 服務(wù),用戶可以利用Restful 框架,方便地自定義數(shù)據(jù)處理的方式.
? 數(shù)據(jù)編排
隨著來自不同系統(tǒng)、業(yè)務(wù)流程數(shù)據(jù)的容量、速度、多樣性的增長,企業(yè)需要面對更加復(fù)雜的數(shù)據(jù)訪問、發(fā)現(xiàn)、管理、安全等問題,導(dǎo)致查找和驗(yàn)證數(shù)據(jù)集變成一個復(fù)雜的手動過程.并且,不斷增加的法規(guī)和合規(guī)性要求使其變得更加重要.因此,BigQueryML 提供了數(shù)據(jù)目錄技術(shù),用于數(shù)據(jù)發(fā)現(xiàn)、管理和簡化.為了幫助企業(yè)快速發(fā)現(xiàn)、管理和理解他們的數(shù)據(jù)資產(chǎn),數(shù)據(jù)目錄提供完全管理和可擴(kuò)展的元數(shù)據(jù)管理服務(wù).數(shù)據(jù)目錄為數(shù)據(jù)發(fā)現(xiàn)提供了一個簡單易用的搜索界面,由支持Gmail 和Drive 的相同Google 搜索技術(shù)提供支持,并為捕獲技術(shù)和業(yè)務(wù)元數(shù)據(jù)提供了一個靈活而強(qiáng)大的編目系統(tǒng).在安全和數(shù)據(jù)治理方面,它與云DLP(data loss prevention)系統(tǒng)集成,用戶可以發(fā)現(xiàn)、編目敏感的數(shù)據(jù)資產(chǎn).此外,它基于谷歌云支持源訪問控制列表(ACLs),簡化用戶訪問和管理數(shù)據(jù),使用戶在企業(yè)級數(shù)據(jù)平臺上以可信方式管理數(shù)據(jù).
傳統(tǒng)的數(shù)據(jù)清洗非常繁雜,包括噪聲過濾、異常值檢測、去重處理等很多方面的工作(數(shù)據(jù)工作流),用傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)需要結(jié)合大量的人力投入.而人工智能算法中對數(shù)據(jù)清洗質(zhì)量和效率的要求較高,所以我們分析利用AI 優(yōu)化的數(shù)據(jù)庫技術(shù)[48]提供數(shù)據(jù)清洗的工作.
? 自動生成數(shù)據(jù)流水線
Shang 等人提出了一款迭代式生成數(shù)據(jù)工作流的工具Alpine Meadow[48],他們的工作主要是將數(shù)據(jù)工程平民化(democratization),即幫助沒有足夠?qū)I(yè)知識的用戶高效地進(jìn)行數(shù)據(jù)清洗工作.它需要顯著減少構(gòu)建機(jī)器學(xué)習(xí)流水線式架構(gòu)所需的專業(yè)知識.理想情況下,用戶應(yīng)該能夠指定一個高級任務(wù)(例如,根據(jù)數(shù)據(jù)預(yù)測標(biāo)簽X),然后,系統(tǒng)自動組成一條機(jī)器學(xué)習(xí)流水線來完成該任務(wù),包括所有必要的數(shù)據(jù)清理、功能工程和超參數(shù)調(diào)整步驟.Meadow 的核心設(shè)計思想是,通過模擬經(jīng)驗(yàn)豐富的數(shù)據(jù)科學(xué)家的決策過程來解決ML 問題.一個有經(jīng)驗(yàn)的數(shù)據(jù)科學(xué)家如何處理一個問題?首先,他會檢查數(shù)據(jù),并根據(jù)自己的經(jīng)驗(yàn),對特征縮放、嵌入、數(shù)據(jù)清理等做出高層決策.Meadow 把這個過程映射為一個“數(shù)據(jù)處理流水線”,并將所有可能抽象成一個有向無環(huán)圖上的搜索空間.基于數(shù)據(jù)庫中存儲的大量數(shù)據(jù)處理相關(guān)的經(jīng)驗(yàn),它自動學(xué)習(xí)構(gòu)建數(shù)據(jù)處理流水線的規(guī)則.其次,數(shù)據(jù)科學(xué)家可能會使用可靠且經(jīng)常成功的模型族,例如隨機(jī)森林,并檢查最常見的錯誤(例如標(biāo)簽不平衡或重復(fù)標(biāo)簽列).在初始結(jié)果產(chǎn)生之后,數(shù)據(jù)科學(xué)家將開始通過添加更復(fù)雜的處理步驟、更改模型族、添加/刪除特性、增加樣本大小等操作來修改流水線框架.在Meadow 中,每個邏輯流水線的超參數(shù)空間都有一個關(guān)聯(lián)的性能模型,用于查找有潛力的配置.如果從未使用過邏輯流水線,則沒有與之關(guān)聯(lián)的任何模型,因此我們開始使用默認(rèn)或隨機(jī)配置.一旦收集到第1 個結(jié)果,我們的系統(tǒng)就開始選擇下一個基于貝葉斯優(yōu)化的超參數(shù).通過評估不同的物理流水線,我們收集了當(dāng)前數(shù)據(jù)集的一些經(jīng)驗(yàn),可以使用這些經(jīng)驗(yàn)更新我們的成本和質(zhì)量模型以選擇邏輯流水線,并使用貝葉斯優(yōu)化模型來選擇物理流水線.這是一個迭代和增量的過程.類比數(shù)據(jù)科學(xué)家的工作方式,Meadow 結(jié)合數(shù)據(jù)庫的數(shù)據(jù)管理能力和機(jī)器學(xué)習(xí)模型的學(xué)習(xí)能力共同完成復(fù)雜的數(shù)據(jù)清洗工作.
? 自動化數(shù)據(jù)管理
智能數(shù)據(jù)庫系統(tǒng)[42]可以為大規(guī)模共享數(shù)據(jù)提供智能管理服務(wù):其一,智能數(shù)據(jù)庫系統(tǒng)集成了AI 組件,幫助實(shí)現(xiàn)數(shù)據(jù)搜索的各類智能操作(AI 優(yōu)化數(shù)據(jù)庫組件);其二,智能數(shù)據(jù)庫系統(tǒng)集成了大量數(shù)據(jù)優(yōu)化技術(shù),幫助更好地融合不同數(shù)據(jù)(數(shù)據(jù)庫優(yōu)化技術(shù)).以異常值檢測為例,異常值檢測廣泛用于特征工程、對異常數(shù)據(jù)進(jìn)行過濾.其復(fù)雜度隨單元的磁盤算法中的單元數(shù)呈指數(shù)增長,性能會隨著單元數(shù)和數(shù)據(jù)點(diǎn)數(shù)的增加而降低.一方面,我們可以利用數(shù)據(jù)庫優(yōu)化技術(shù)優(yōu)化AI 算法,如Zhao 等人提出利用索引結(jié)構(gòu)CDTree 對異常點(diǎn)檢測進(jìn)行優(yōu)化[49].CDTree 只存儲非空的單元格,并使用聚合技術(shù)將同一單元格中的數(shù)據(jù)對象存儲到連續(xù)的磁盤頁中,從而大大提升了異常值檢測的表現(xiàn).另一方面,我們可以用AI 克服數(shù)據(jù)多樣性的挑戰(zhàn),如目前數(shù)據(jù)庫系統(tǒng)會綜合性地存儲多模數(shù)據(jù),Xu 等人提出了基于希爾伯特指數(shù)的異常檢測算法[50],將不同的數(shù)據(jù)類型抽象到度量空間中,實(shí)現(xiàn)更高的檢測速度.
復(fù)雜的AI 算法需要大量的數(shù)據(jù)作為訓(xùn)練集.一個訓(xùn)練集往往有多個數(shù)據(jù)來源,如社交評論、訪問信息、交易信息等,存在大量不同的數(shù)據(jù)格式,如csv、json、jpg 等.對這些異構(gòu)數(shù)據(jù)直接進(jìn)行建模、類型轉(zhuǎn)換、連接等開銷較大,所以我們分析利用AI 優(yōu)化的數(shù)據(jù)庫技術(shù)[46]提供數(shù)據(jù)融合的工作.
? 降低數(shù)據(jù)生成開銷
在大規(guī)模訓(xùn)練場景下,訓(xùn)練集往往來自多個數(shù)據(jù)源,因此需要SQL 提供多源數(shù)據(jù)融合服務(wù).對于任何機(jī)器學(xué)習(xí)算法,我們通常假設(shè)數(shù)據(jù)集是一個單一的表.但現(xiàn)實(shí)生活中,數(shù)據(jù)集往往是由多個存在主外鍵依賴的表組成的.將它們直接連接再進(jìn)行特征選擇,非常浪費(fèi)時間.而且特征數(shù)量的增加可能會使分析人員更難探索數(shù)據(jù),而且還會增加機(jī)器學(xué)習(xí)算法和特性選擇方法的執(zhí)行時間.因此,Kumar 等人[51]提出了一種分析主外鍵(key-ForeignKey)對機(jī)器學(xué)習(xí)表現(xiàn)和準(zhǔn)確度影響的方法.首先,他們基于信息論的方法增加價值評估功能,評估每個原始特征對于模型的“有用程度”.然而,被評定為“冗余(redundancy)”的特征可能在預(yù)測有用特征方面有價值.因此,之后他們評估特征之間的相關(guān)性(relevancy),基于模型特點(diǎn)在冗余-相關(guān)性之間加以折中.最后,面對核心問題:如何預(yù)測一個先驗(yàn),即判斷一個與r表的連接是否是可以安全避免的,他們從使用“受控”數(shù)據(jù)集的模擬研究開始,以驗(yàn)證理論分析,并精確測量當(dāng)改變標(biāo)準(zhǔn)化數(shù)據(jù)的不同屬性時誤差的變化情況.最后,他們解釋得出的決策規(guī)則以及如何使用模擬測量來調(diào)整特征join 方式.這種方法可以在提高機(jī)器學(xué)習(xí)模型表現(xiàn)的同時不喪失準(zhǔn)確性,并幫助將機(jī)器學(xué)習(xí)算法應(yīng)用在數(shù)據(jù)庫的數(shù)據(jù)處理流程中.此外,Kumar 等人還提出了基于線性回歸模型優(yōu)化數(shù)據(jù)源的連接操作.對于一個稱為廣義線性模型(GLMs)的大型通用ML 技術(shù)類,可以在不犧牲質(zhì)量和可伸縮性的情況下學(xué)習(xí)連接并避免冗余.他們主要研究用于連接操作的混合哈希算法,用于快速估計所有方法的I/O和CPU 成本.此外,他們提出了3 種在單節(jié)點(diǎn)RDBMS 中的連接上運(yùn)行批量梯度下降(batch gradient descent,簡稱BGD)的替代方法:流、流重用和分解學(xué)習(xí).每種方法都避免了某種形式的冗余:流避免寫入關(guān)系表,并可以保存在I/O 上;流重用利用了BGD 的迭代特性,并避免了在第1 次迭代后重新劃分基關(guān)系.但是,這兩種方法都不能避免BGD 計算中的冗余.因此,他們設(shè)計了避免計算冗余的因式分解學(xué)習(xí)方法.分解學(xué)習(xí)法通過交錯連接操作與BGD 的計算和I/O 來實(shí)現(xiàn)這一點(diǎn).我們的方法都不影響模型的質(zhì)量.此外,使用用戶定義的聚合函數(shù)(UDAFs)的抽象,很容易地在RDBMS 中得以實(shí)現(xiàn),這提供了可伸縮性和易于部署的能力[52].
? 簡化數(shù)據(jù)建模
數(shù)據(jù)庫研究的一個主要目標(biāo)是,將附加語義合并到數(shù)據(jù)模型中.經(jīng)典的數(shù)據(jù)模型由于無法表示和處理許多實(shí)際應(yīng)用中可能出現(xiàn)的不精確和不確定的信息而受到影響.因此,模糊集理論已廣泛應(yīng)用于各種數(shù)據(jù)模型的擴(kuò)展,滿足復(fù)雜對象不精確和不確定性建模的需要.為了更恰當(dāng)?shù)孛枋鲞@種關(guān)系并更好地利用現(xiàn)有值,Lai 等人提出了一種不完全數(shù)據(jù)建模方法來輸入缺失值[50].該方法利用不完全記錄和完整記錄建立Takagi-Sugeno(TS)模型.在這個過程中,不完整的數(shù)據(jù)集被分成幾個子集,并且只包含重要變量的線性函數(shù)被建立起來,以描述每個子集中屬性之間的關(guān)系.這套方法能為存在一定缺失值的數(shù)據(jù)集很好地建立起數(shù)據(jù)模型,并提高數(shù)據(jù)的準(zhǔn)確性.
? 智能數(shù)據(jù)融合
訓(xùn)練集數(shù)據(jù)的結(jié)構(gòu)和價值可能存在很大差異.企業(yè)數(shù)據(jù)池大多基于Hadoop 等大數(shù)據(jù)引擎,需要將大量業(yè)務(wù)相關(guān)的數(shù)據(jù)源聚合在一起,然而這種數(shù)據(jù)聚合的速度對于機(jī)器學(xué)習(xí)來說太慢了.基于如Kinetica、IBM Watson Analytics(https://www.ibm.com/watson-analytics)等結(jié)合人工智能數(shù)據(jù)庫的平臺,首先,我們可以利用大規(guī)模GPU芯片組快速進(jìn)行數(shù)據(jù)編/解碼和類型轉(zhuǎn)換;其次,IBM Watson Analytics 還允許直接查詢各種數(shù)據(jù)庫,包括Cloudera Impala、MySQL、Oracle、PostgreSQL 等.它有32 個連接器,可以方便地使用來自這些源的數(shù)據(jù),近乎實(shí)時地進(jìn)行數(shù)據(jù)同步和融合.該工具使那些具有深厚數(shù)據(jù)科學(xué)技能的人們能夠跳過數(shù)據(jù)融合的復(fù)雜工作,直接進(jìn)入到模型設(shè)計階段.
目前,數(shù)據(jù)庫系統(tǒng)支持AI 操作存在數(shù)據(jù)模型不一致的問題.數(shù)據(jù)庫中的數(shù)據(jù)大多是關(guān)系型數(shù)據(jù),而AI 操作存在大量張量型數(shù)據(jù).這導(dǎo)致在用數(shù)據(jù)庫管理AI 時存在大量的數(shù)據(jù)存儲開銷,如存在格式轉(zhuǎn)換、數(shù)據(jù)丟失等問題;而且會降低執(zhí)行效率,如在用機(jī)器學(xué)習(xí)做圖片分類問題時,圖片都是張量格式,而在進(jìn)行類別判斷(如“刪掉標(biāo)簽‘貓’”等)時,需要進(jìn)行一些標(biāo)量計算,導(dǎo)致執(zhí)行引擎需要在不同的數(shù)據(jù)模型上分別操作,增加了執(zhí)行開銷.所以,未來我們需要研究用統(tǒng)一的數(shù)據(jù)模型同時支持標(biāo)量、向量、大規(guī)模張量等不同類型的數(shù)據(jù)操作,更好地支持AI 計算和數(shù)據(jù)庫查詢.但是現(xiàn)有的數(shù)據(jù)模型(如關(guān)系表、鍵值對、時間序列等)都有著各自的局限性,所以Idreos等人提出了一種學(xué)習(xí)型數(shù)據(jù)結(jié)構(gòu)設(shè)計引擎Data Alchemist[53].它混合不同粒度的數(shù)據(jù)結(jié)構(gòu)的設(shè)計原則,構(gòu)成一般化的設(shè)計空間.通過在設(shè)計空間中對不同的組合、調(diào)優(yōu)和性能進(jìn)行分析,自動生成合適的數(shù)據(jù)結(jié)構(gòu).
盡管已有工作利用聲明性的語言模型支持AI 算法,但在優(yōu)化器生成實(shí)際AI 操作階段仍存在很多問題.一種方法是直接把類SQL 程序轉(zhuǎn)化成Python、R 等語言執(zhí)行(如SQLFlow、Rheem 等),不僅增加了語言轉(zhuǎn)化開銷,也沒有對算法流程進(jìn)行優(yōu)化.而另一種方法是預(yù)先針對AI 算法定義了新的算子(如MADlib 等),借助代碼生成器將類SQL 語句翻譯成AI 算子序列,但是不同于傳統(tǒng)數(shù)據(jù)庫查詢生成執(zhí)行計劃,沒有對算子類型選擇以及算子之間的連接關(guān)系進(jìn)行有效的優(yōu)化.因此,未來我們將研究面向AI 的優(yōu)化器:首先,統(tǒng)計AI 執(zhí)行相關(guān)的物理信息(如芯片頻率、磁盤讀寫速度等),建立AI 算子的代價估計機(jī)制.其次,設(shè)計針對AI 的執(zhí)行計劃選擇機(jī)制.因?yàn)椴煌跀?shù)據(jù)庫查詢,除了數(shù)據(jù)建立的聯(lián)系外,AI 算子之間還存在環(huán)境、計算等依賴關(guān)系,或沒有顯式關(guān)系(泛化為“執(zhí)行森林”).所以計劃選擇算法(如泛化的動態(tài)規(guī)劃、強(qiáng)化學(xué)習(xí)算法等)需要基于代價估計的結(jié)果,智能地選擇合適的運(yùn)行環(huán)境、算子類型、組織邏輯等,在算法的優(yōu)化程度和選擇效率之間實(shí)現(xiàn)平衡.
AI 和數(shù)據(jù)庫融合技術(shù)有非常大的發(fā)展?jié)摿?
? 首先,通過結(jié)合AI 技術(shù)(AIforDB),智能數(shù)據(jù)庫系統(tǒng)可以實(shí)現(xiàn)組件學(xué)習(xí)化,包括智能參數(shù)調(diào)優(yōu)[54-56]、優(yōu)化器[57,58]、物理設(shè)計[59,60]、表現(xiàn)預(yù)測[61]等等.比如:學(xué)習(xí)型參數(shù)調(diào)優(yōu)[54,56]通過理解不同負(fù)載特點(diǎn),動態(tài)地調(diào)整參數(shù)來實(shí)現(xiàn)整體吞吐量和單條查詢執(zhí)行效率之間的平衡;智能計劃選擇[58]利用機(jī)器學(xué)習(xí)模型,從歷史數(shù)據(jù)中學(xué)習(xí)對不同連接方式的代價估計方法,進(jìn)而選擇合適的執(zhí)行計劃;動態(tài)索引選擇[60]基于強(qiáng)化學(xué)習(xí)等算法,針對不同的查詢和數(shù)據(jù)特點(diǎn)選擇合適的索引,平衡索引建立開銷和查詢的執(zhí)行效率.因此,AI 技術(shù)可以全方位地提高數(shù)據(jù)庫處理海量查詢、異構(gòu)場景的能力;
? 其次,前面我們已經(jīng)介紹了基于傳統(tǒng)數(shù)據(jù)庫對AI 易用性、執(zhí)行效率、數(shù)據(jù)質(zhì)量進(jìn)行優(yōu)化的方法,而基于智能數(shù)據(jù)庫系統(tǒng),我們可以進(jìn)一步提供智能靈活的AI 解決方案,包括:
1)智能的AI 語言模型:結(jié)合NLP 等方面的研究成果,數(shù)據(jù)庫可以支持自然語言級別的SQL 翻譯,允許基于用戶對問題的模糊描述給出較為精確的分析結(jié)果,進(jìn)一步實(shí)現(xiàn)AI 平民化;
2)智能的AI 算法優(yōu)化引擎:目前,生成類數(shù)據(jù)庫的AI 執(zhí)行計劃仍然是很具挑戰(zhàn)性的,包括對大量不同的AI 算法統(tǒng)一建模、在大規(guī)模算子空間中進(jìn)行算法匹配等等.利用深度學(xué)習(xí)、強(qiáng)化學(xué)習(xí)等算法,可以更快、更好地學(xué)習(xí)算法組織策略,并根據(jù)需求變化,智能地調(diào)整優(yōu)化目標(biāo);
3)智能的AI 執(zhí)行引擎:目前,數(shù)據(jù)庫執(zhí)行引擎需要調(diào)度不同類型的AI 算子和傳統(tǒng)數(shù)據(jù)庫算子,負(fù)擔(dān)較大.結(jié)合AI 技術(shù),智能AI 執(zhí)行引擎可以預(yù)先估計AI 算法可能的計算、存儲需求,節(jié)省資源輪詢的開銷.此外,通過智能地調(diào)配空閑資源,允許等待的任務(wù)提前執(zhí)行,更加充分地使用不同的硬件資源,提高整體訓(xùn)練效率;
? 再有,AI 和數(shù)據(jù)庫融合技術(shù)為下一代計算方法指明了方向.面對海量異構(gòu)數(shù)據(jù),傳統(tǒng)的計算方法存在用時長(普通數(shù)據(jù)庫處理查詢)、結(jié)果不夠準(zhǔn)確(AQP)等問題,通過結(jié)合深度學(xué)習(xí)等技術(shù),我們可以在一個KB 級神經(jīng)網(wǎng)絡(luò)中壓縮TB 級數(shù)據(jù)信息,根據(jù)問題,在毫秒級別給出計算結(jié)果(前向傳播),為傳統(tǒng)計算方法帶來革命性的創(chuàng)新和優(yōu)化.AI 原生數(shù)據(jù)庫通過結(jié)合AI 較強(qiáng)的學(xué)習(xí)、計算能力和數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)處理、管理等經(jīng)驗(yàn),在降低AI 使用門檻的同時,可以大幅度地提升數(shù)據(jù)庫各方面的性能,為下一代數(shù)據(jù)庫和AI 技術(shù)的發(fā)展指明了一個方向.
在今天的機(jī)器學(xué)習(xí)任務(wù)中,隨著訓(xùn)練數(shù)據(jù)和模型的增長,很難在單個服務(wù)器上執(zhí)行訓(xùn)練過程,這就需要分布式機(jī)器學(xué)習(xí)方法(distributed machine learning)在多個服務(wù)器之間劃分工作負(fù)載[62].比如,訓(xùn)練數(shù)據(jù)的實(shí)際數(shù)量如果在1TB~1PB 之間,就可以創(chuàng)建具有109~1012個參數(shù)的強(qiáng)大和復(fù)雜的模型,這些模型通常由所有工作節(jié)點(diǎn)全局共享,在執(zhí)行計算以優(yōu)化共享參數(shù)時,這些工作節(jié)點(diǎn)必須經(jīng)常訪問共享參數(shù).為了更好地管理、優(yōu)化、分析這些共享參數(shù),目前有一些參數(shù)服務(wù)器方面的研究[62,63]支持大規(guī)模參數(shù)的分布式存儲和協(xié)同.但是這些工作大多需要基于獨(dú)立的服務(wù)器,或搭載在主流的分布式機(jī)器學(xué)習(xí)系統(tǒng)上(如TensorFlow).而目前已有很多比較成熟的分布式數(shù)據(jù)庫系統(tǒng)(distributed DBMS),通過在事務(wù)工作負(fù)載中利用并行性可以實(shí)現(xiàn)更高的性能[64].未來,如果用分布式數(shù)據(jù)庫支持參數(shù)服務(wù)器,我們可以將機(jī)器學(xué)習(xí)訓(xùn)練任務(wù)作為負(fù)載下發(fā)給分布式數(shù)據(jù)庫系統(tǒng):一方面,由數(shù)據(jù)庫自動地進(jìn)行任務(wù)調(diào)度和執(zhí)行,簡化分布式機(jī)器學(xué)習(xí)算法的實(shí)現(xiàn);另一方面,將全局共享參數(shù)表示為關(guān)系型數(shù)據(jù),幫助算法在更細(xì)粒度上實(shí)現(xiàn)并行操作,提高訓(xùn)練任務(wù)的執(zhí)行效率.此外,利用數(shù)據(jù)庫的可靠性控制機(jī)制(如自動診斷、錯誤容忍、自動恢復(fù)等),我們可以有效地解決參數(shù)更新同步等問題,避免數(shù)據(jù)不一致帶來的更多的資源開銷和結(jié)果誤差[57].
深度學(xué)習(xí)模型訓(xùn)練不具有錯誤容忍能力,進(jìn)行分布式訓(xùn)練時,一個進(jìn)程崩潰,整個任務(wù)就會失敗.而且,放在內(nèi)存中的數(shù)據(jù)更容易出現(xiàn)這類問題.因此,未來我們可以結(jié)合數(shù)據(jù)庫系統(tǒng)的錯誤容忍技術(shù),提高深度學(xué)習(xí)的魯棒性.為了確保在可預(yù)見和不可預(yù)見的人為或自然災(zāi)害下業(yè)務(wù)的連續(xù)性,數(shù)據(jù)庫系統(tǒng)都必須從以下兩個方面保證容錯和災(zāi)難恢復(fù)能力.
? 首先,由相同或等效系統(tǒng)備份的硬件系統(tǒng).例如,可以通過使用并行運(yùn)行的相同服務(wù)器,將所有操作鏡像到備份服務(wù)器,使服務(wù)器具有硬件上的容錯性;
? 其次,由其他軟件實(shí)例備份的軟件系統(tǒng).例如,具有客戶信息的數(shù)據(jù)庫可以連續(xù)地復(fù)制到另一臺機(jī)器上(復(fù)制集).如果主數(shù)據(jù)庫關(guān)閉,操作可以自動地重定向到第2 個數(shù)據(jù)庫.此外,目前還有在流式處理系統(tǒng)上提供的近似錯誤容忍技術(shù)[35,65],通過適應(yīng)性地發(fā)布備份(如僅當(dāng)錯誤超過用戶定義的可接受級別時才發(fā)出備份操作),以確保故障時的誤差受到理論保證的限制.
分布式機(jī)器學(xué)習(xí)包括多節(jié)點(diǎn)的機(jī)器學(xué)習(xí)算法和系統(tǒng),用于提升執(zhí)行性能、提高計算精度、擴(kuò)展到更大的輸入數(shù)據(jù)(幫助顯著減少學(xué)習(xí)的錯誤率)[66-68],因此,已被廣泛應(yīng)用在真實(shí)生產(chǎn)環(huán)境中,幫助公司、研究人員和個人從大量數(shù)據(jù)中得出有意義的結(jié)論.然而,分布式機(jī)器學(xué)習(xí)仍然面臨著很多亟待解決的問題,如它不支持彈性調(diào)度.比如一個有N個GPU 的集群上在運(yùn)行一個作業(yè),使用了一個GPU.此時,一個新提交的作業(yè)要求使用N個GPU,因?yàn)榭臻eGPU 個數(shù)是N-1,所以這個新的作業(yè)不能開始執(zhí)行,而是得一直等數(shù)小時甚至數(shù)天,直到前一個作業(yè)結(jié)束、釋放那個被占用的GPU.在如此長的時間里,集群利用率<1/N,導(dǎo)致集群利用率很低.所以,我們可以結(jié)合數(shù)據(jù)庫系統(tǒng),提供多方面的系統(tǒng)性能上的優(yōu)化.
1)一致性:數(shù)據(jù)庫系統(tǒng)能夠有效地保證訓(xùn)練一致性,如在多個節(jié)點(diǎn)為同一個任務(wù)工作時,確保在不同分區(qū)的同一套全局?jǐn)?shù)據(jù)的一致性;
2)容錯性:如上節(jié)討論的,當(dāng)我們把一個負(fù)載任務(wù)分發(fā)到10 000 個計算節(jié)點(diǎn)上,在一個節(jié)點(diǎn)宕機(jī)時,仍然能夠保持訓(xùn)練(如根據(jù)最近的歷史鏡像回退),以避免重新訓(xùn)練;
3)通信:分布式機(jī)器學(xué)習(xí)涉及大量的I/O(如磁盤讀寫)和跨節(jié)點(diǎn)數(shù)據(jù)傳遞過程.基于數(shù)據(jù)庫的存儲引擎,我們能夠高效地調(diào)度不同類型環(huán)境(如單節(jié)點(diǎn)磁盤系統(tǒng)、分布式文件系統(tǒng)等)上的I/O 操作,提供無阻塞的數(shù)據(jù)處理過程;
4)資源管理:構(gòu)建和維護(hù)一個計算集群的成本較高,因此,一個集群通常由許多用戶共享.基于數(shù)據(jù)庫的負(fù)載調(diào)度機(jī)制,在最大化利用率的同時,幫助管理集群,并適當(dāng)?shù)胤峙滟Y源以滿足每個人的請求(個性化定制).
本文綜述了支持人工智能的數(shù)據(jù)管理技術(shù).針對人工智能技術(shù)中存在的使用門檻高、數(shù)據(jù)密度高、算力要求高等問題和挑戰(zhàn),我們從數(shù)據(jù)管理系統(tǒng)的層次角度出發(fā),分別分析不同層級數(shù)據(jù)管理方法如何優(yōu)化人工智能算法.首先概述了支持人工智能的數(shù)據(jù)管理技術(shù)的整體架構(gòu),給出了不同層級的主要內(nèi)容.然后,針對每一層級分別展開綜述.在聲明性語言模型方面,分別概述聲明性SQL 語言的擴(kuò)展、邏輯封裝與優(yōu)化技術(shù);在算法優(yōu)化引擎優(yōu)化AI 方面,分別概述算子代價估計與選擇、算法組裝與選擇、模型管理等技術(shù);在異構(gòu)執(zhí)行引擎方面,分別從新硬件和分布式架構(gòu)兩方面概述異構(gòu)AI 算子的計算和優(yōu)化方法;在智能數(shù)據(jù)治理方面,分別概述多模、多源數(shù)據(jù)存儲和基于智能數(shù)據(jù)庫的數(shù)據(jù)查詢優(yōu)化、數(shù)據(jù)分析優(yōu)化和數(shù)據(jù)建模簡化方面的工作.最后,討論了支持人工智能的數(shù)據(jù)管理技術(shù)的發(fā)展方向,并給出進(jìn)一步的展望.
致謝本文由國家自然科學(xué)基金(61925205,61632016)、華為公司、好未來教育公司給予大力支持.