MLDB是每個(gè)數(shù)據(jù)科學(xué)家夢(mèng)寐以求的數(shù)據(jù)庫(kù)
現(xiàn)實(shí)世界中的機(jī)器學(xué)習(xí)解決方案很少只是構(gòu)建和測(cè)試模型的問(wèn)題。 到目前為止,從訓(xùn)練到優(yōu)化,管理和自動(dòng)化機(jī)器學(xué)習(xí)模型的生命周期是機(jī)器學(xué)習(xí)解決方案中最難解決的問(wèn)題。 為了控制模型的生命周期,數(shù)據(jù)科學(xué)家需要能夠持久地并大規(guī)模地查詢其狀態(tài)。 除非您認(rèn)為任何平均深度學(xué)習(xí)模型都可以包含數(shù)百個(gè)隱藏層和數(shù)百萬(wàn)個(gè)互連節(jié)點(diǎn),否則這個(gè)問(wèn)題似乎微不足道。
存儲(chǔ)和訪問(wèn)大型計(jì)算圖絕非易事。 在大多數(shù)情況下,數(shù)據(jù)科學(xué)團(tuán)隊(duì)花費(fèi)大量時(shí)間嘗試將商品化的NOSQL數(shù)據(jù)庫(kù)適應(yīng)機(jī)器學(xué)習(xí)模型,然后得出一個(gè)不太明顯的結(jié)論:機(jī)器學(xué)習(xí)解決方案需要一種新型的數(shù)據(jù)庫(kù)。
MLDB是為機(jī)器學(xué)習(xí)時(shí)代而設(shè)計(jì)的數(shù)據(jù)庫(kù)。 該平臺(tái)經(jīng)過(guò)優(yōu)化,可以存儲(chǔ),轉(zhuǎn)換和導(dǎo)航表示機(jī)器學(xué)習(xí)結(jié)構(gòu)(例如深度神經(jīng)網(wǎng)絡(luò))的計(jì)算圖。 我知道您在想什么AWS云機(jī)器學(xué)習(xí)平臺(tái)(例如AWS SageMaker或Azure ML)已經(jīng)包含用于機(jī)器學(xué)習(xí)圖的持久性模型,那么為什么我們需要另一個(gè)解決方案? 好吧,事實(shí)證明,可以從真實(shí)數(shù)據(jù)庫(kù)中受益的現(xiàn)實(shí)世界機(jī)器學(xué)習(xí)解決方案有很多需求:

輸入MLDB
MLDB提供了一個(gè)開(kāi)放源代碼的本地?cái)?shù)據(jù)庫(kù),用于存儲(chǔ)和查詢機(jī)器學(xué)習(xí)模型。 該平臺(tái)首先在Datacratic中孵化,最近被AI強(qiáng)國(guó)Elementai收購(gòu),以驗(yàn)證數(shù)據(jù)庫(kù)引擎在現(xiàn)代機(jī)器學(xué)習(xí)項(xiàng)目中的相關(guān)性。 MLDB有多種形式,例如可以部署在任何容器平臺(tái)上的云服務(wù),VirtualBox VM或Docker實(shí)例。
MLDB的體系結(jié)構(gòu)結(jié)合了不同的工件,這些工件抽象了機(jī)器學(xué)習(xí)解決方案生命周期的不同元素。 從技術(shù)上講,MLDB模型可以歸納為六個(gè)簡(jiǎn)單的組件:文件,數(shù)據(jù)集,過(guò)程,函數(shù),查詢和API。

檔案
文件表示MLDB體系結(jié)構(gòu)中的通用抽象單元。 在MLDB模型中,文件可用于加載模型的數(shù)據(jù),函數(shù)的參數(shù)或保留特定的數(shù)據(jù)集。 MLDB支持與流行的文件系統(tǒng)(例如HDFS和S3)進(jìn)行本機(jī)集成。
數(shù)據(jù)集
MLDB數(shù)據(jù)集表示過(guò)程和機(jī)器學(xué)習(xí)模型使用的主要數(shù)據(jù)單元。 從結(jié)構(gòu)上講,數(shù)據(jù)集是無(wú)模式,僅附加命名的數(shù)據(jù)點(diǎn)集,它們包含在單元格中,單元格位于行和列的交點(diǎn)處。 數(shù)據(jù)點(diǎn)由值和時(shí)間戳組成。 每個(gè)數(shù)據(jù)點(diǎn)因此可以表示為(行,列,時(shí)間戳,值)元組,而數(shù)據(jù)集可以視為稀疏的3維矩陣。 可以創(chuàng)建數(shù)據(jù)集,并可以通過(guò)MLDB的REST API將數(shù)據(jù)添加到數(shù)據(jù)集,也可以通過(guò)過(guò)程從文件中加載或保存到文件中。
程序
在MLDB中,過(guò)程用于實(shí)現(xiàn)機(jī)器學(xué)習(xí)模型的不同方面,例如培訓(xùn)或數(shù)據(jù)轉(zhuǎn)換。 從技術(shù)的角度來(lái)看,過(guò)程被命名為可重用的程序,用于實(shí)現(xiàn)長(zhǎng)時(shí)間運(yùn)行的批處理操作而沒(méi)有返回值。 過(guò)程通常在數(shù)據(jù)集上運(yùn)行,并且可以通過(guò)SQL表達(dá)式進(jìn)行配置。 過(guò)程的輸出可以包括數(shù)據(jù)集和文件。
功能
MLDB函數(shù)抽象了過(guò)程中使用的數(shù)據(jù)計(jì)算例程。 函數(shù)被命名為可重用的程序,用于實(shí)現(xiàn)可以接受輸入值并返回輸出值的流計(jì)算。 通常,MLDB函數(shù)封裝表示特定計(jì)算的SQL表達(dá)式。
查詢
MLDB的主要優(yōu)點(diǎn)之一是它使用SQL作為查詢存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)的機(jī)制。 該平臺(tái)支持相當(dāng)完整的基于SQL的語(yǔ)法,其中包括熟悉的構(gòu)造,例如SELECT,WHERE,F(xiàn)ROM,GROUP BY,ORDER BY等。 例如,在MLDB中,我們可以使用SQL查詢?yōu)閳D像分類模型準(zhǔn)備訓(xùn)練數(shù)據(jù)集:
- mldb.query("SELECT * FROM images LIMIT 3000")
API和Pymldb
MLDB的所有功能都通過(guò)簡(jiǎn)單的REST API公開(kāi)。 該平臺(tái)還包括pymldb,這是一個(gè)Python庫(kù),它以非常友好的語(yǔ)法抽象了API的功能。 以下代碼顯示了如何使用pymldb創(chuàng)建和查詢數(shù)據(jù)集。
- from pymldb import Connection
- mldb = Connection("http://localhost")
- mldb.put( "/v1/datasets/demo", {"type":"sparse.mutable"})
- mldb.post("/v1/datasets/demo/rows", {"rowName": "first", "columns":[["a",1,0],["b",2,0]]})
- mldb.post("/v1/datasets/demo/rows", {"rowName": "second", "columns":[["a",3,0],["b",4,0]]})
- mldb.post("/v1/datasets/demo/commit")
- df = mldb.query("select * from demo")
- print type(df)
支持機(jī)器學(xué)習(xí)算法
MLDB支持大量的算法,例如可以從"過(guò)程和函數(shù)"中使用的算法。 該平臺(tái)還本地支持TensorFlow等不同深度學(xué)習(xí)引擎的計(jì)算圖。

匯集全部
讓我們以機(jī)器學(xué)習(xí)解決方案中的通用工作流程為例,例如模型的訓(xùn)練和評(píng)分。 下圖說(shuō)明了如何在MLDB中實(shí)現(xiàn)它:

- 該過(guò)程從充滿訓(xùn)練數(shù)據(jù)的文件開(kāi)始,該文件已加載到訓(xùn)練數(shù)據(jù)集中。
- 運(yùn)行培訓(xùn)程序以生成模型文件
- 模型文件用于參數(shù)化評(píng)分功能
- 可通過(guò)REST端點(diǎn)立即訪問(wèn)此評(píng)分功能,以進(jìn)行實(shí)時(shí)評(píng)分
- 還可以通過(guò)SQL查詢立即訪問(wèn)評(píng)分功能
- 批處理計(jì)分過(guò)程使用SQL將計(jì)分功能應(yīng)用于未計(jì)分的數(shù)據(jù)集,從而產(chǎn)生計(jì)分的數(shù)據(jù)集
結(jié)論
MLDB是為實(shí)現(xiàn)機(jī)器學(xué)習(xí)解決方案而重新設(shè)計(jì)的第一個(gè)數(shù)據(jù)庫(kù)實(shí)例。 該平臺(tái)仍然可以進(jìn)行很多改進(jìn),以支持現(xiàn)代機(jī)器和深度學(xué)習(xí)技術(shù),但是它的靈活性和可擴(kuò)展性使其成為了這個(gè)新領(lǐng)域的一次重大迭代。