丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能開發(fā)者 正文
發(fā)私信給skura
發(fā)送

0

利用 Spark 和 scikit-learn 將你的模型訓(xùn)練加快 100 倍

本文作者: skura 2019-09-16 10:50
導(dǎo)語: 利用 Spark 和 scikit-learn 加快模型訓(xùn)練

在 Ibotta,我們訓(xùn)練了許多機(jī)器學(xué)習(xí)模型。這些模型為我們的推薦系統(tǒng)、搜索引擎、定價(jià)優(yōu)化引擎、數(shù)據(jù)質(zhì)量等提供動(dòng)力。它們?cè)谂c我們的移動(dòng)應(yīng)用程序交互時(shí)為數(shù)百萬用戶做出預(yù)測(cè)。

當(dāng)我們使用 Spark 進(jìn)行數(shù)據(jù)處理時(shí),我們首選的機(jī)器學(xué)習(xí)框架是 scikit-learn。隨著計(jì)算機(jī)變得越來越便宜,機(jī)器學(xué)習(xí)解決方案的上市時(shí)間變得越來越關(guān)鍵,我們探索了加快模型訓(xùn)練的各種方法。其中一個(gè)解決方案是將 Spark 和 scikit-learn 中的元素組合到我們自己的混合解決方案中。

sk-dist 的介紹

我們很高興地宣布我們的開源項(xiàng)目 sk-dist 的啟動(dòng)。該項(xiàng)目的目標(biāo)是為使用 Spark 分發(fā) scikit 學(xué)習(xí)元估計(jì)器提供一個(gè)通用框架。元估計(jì)器的例子有決策樹集合(隨機(jī)林和額外隨機(jī)樹)、超參數(shù)調(diào)解器(網(wǎng)格搜索和隨機(jī)搜索)和多分類技術(shù)(一對(duì)多和多對(duì)一)。

 利用 Spark 和 scikit-learn 將你的模型訓(xùn)練加快 100 倍

我們的主要?jiǎng)訖C(jī)是填補(bǔ)傳統(tǒng)機(jī)器學(xué)習(xí)模型空間的空白。在神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的空間之外,我們發(fā)現(xiàn)我們的訓(xùn)練模型的大部分計(jì)算時(shí)間并沒有花在訓(xùn)練單個(gè)數(shù)據(jù)集的單個(gè)模型上。相反,大部分時(shí)間都花在使用元估計(jì)器在數(shù)據(jù)集上訓(xùn)練模型的多次迭代上。

例子

讓我們談?wù)勈謱憯?shù)字?jǐn)?shù)據(jù)集。在這里,我們對(duì)手寫數(shù)字的圖像進(jìn)行了適當(dāng)?shù)木幋a、分類。我們可以很快在一臺(tái)機(jī)器上訓(xùn)練 1797 條記錄的支持向量機(jī),花費(fèi)的時(shí)間不到一秒鐘。但超參數(shù)調(diào)整需要在訓(xùn)練數(shù)據(jù)的不同子集上進(jìn)行大量的訓(xùn)練。

如下圖所示,我們已經(jīng)構(gòu)建了一個(gè)總計(jì)需要 1050 個(gè)訓(xùn)練的參數(shù)網(wǎng)格。在擁有 100 多個(gè)核的 Spark 上使用 sk dist 只需 3.4 秒。這項(xiàng)工作的總時(shí)間是 7.2 分鐘,意思是在沒有并行化的單機(jī)上訓(xùn)練要花這么長時(shí)間。

import timefrom sklearn import datasets, svm
from skdist.distribute.search import DistGridSearchCV
from pyspark.sql import SparkSession # instantiate spark session
spark = (  
   SparkSession    
   .builder    
   .getOrCreate()    
   )
sc = spark.sparkContext # the digits dataset
digits = datasets.load_digits()
X = digits["data"]
y = digits["target"] # create a classifier: a support vector classifier
classifier = svm.SVC()
param_grid = {
   "C": [0.01, 0.01, 0.1, 1.0, 10.0, 20.0, 50.0],
   "gamma": ["scale", "auto", 0.001, 0.01, 0.1],
   "kernel": ["rbf", "poly", "sigmoid"]
   }
scoring = "f1_weighted"
cv = 10# hyperparameter optimization
start = time.time()
model = DistGridSearchCV(    
   classifier, param_grid,    
   sc=sc, cv=cv, scoring=scoring,
   verbose=True    
   )
model.fit(X,y)
print("Train time: {0}".format(time.time() - start))
print("Best score: {0}".format(model.best_score_))------------------------------
Spark context found; running with spark
Fitting 10 folds for each of 105 candidates, totalling 1050 fits
Train time: 3.380601406097412
Best score: 0.981450024203508

這個(gè)例子演示了一個(gè)常見的場(chǎng)景,在這個(gè)場(chǎng)景中,將數(shù)據(jù)擬合到內(nèi)存中并訓(xùn)練單個(gè)分類器是很簡(jiǎn)單的,但是適合超參數(shù)優(yōu)化所需的匹配數(shù)量會(huì)迅速增加。下面是一個(gè)運(yùn)行網(wǎng)格搜索問題的例子,和上面的 sk dist 示例類似:

 利用 Spark 和 scikit-learn 將你的模型訓(xùn)練加快 100 倍

帶sk-dist的網(wǎng)格搜索

對(duì)于 ibotta 傳統(tǒng)機(jī)器學(xué)習(xí)的實(shí)際應(yīng)用,我們經(jīng)常發(fā)現(xiàn)自己處于類似這樣的情況中:中小型數(shù)據(jù)(10k 到 1M 的記錄)和許多簡(jiǎn)單分類器迭代以適應(yīng)超參數(shù)調(diào)整、集成和多分類解決方案。

現(xiàn)有解決方案

傳統(tǒng)的機(jī)器學(xué)習(xí)元估計(jì)器訓(xùn)練方法已經(jīng)存在。第一個(gè)是最簡(jiǎn)單的:scikit-learn 使用 joblib 內(nèi)置的元估計(jì)器并行化。這與 sk-dist 的操作非常相似,但是它有一個(gè)主要的限制:性能受限于任何機(jī)器的資源。即使與理論上擁有數(shù)百個(gè)內(nèi)核的單機(jī)相比,Spark 仍然具有一些優(yōu)勢(shì),如執(zhí)行器的微調(diào)內(nèi)存規(guī)范、容錯(cuò),以及成本控制選項(xiàng),如對(duì)工作節(jié)點(diǎn)使用 spot 實(shí)例。

另一個(gè)現(xiàn)有的解決方案是 Spark ML,它是 Spark 的一個(gè)本地機(jī)器學(xué)習(xí)庫,支持許多與 scikit-learn 相同的算法來解決分類和回歸問題。它還具有諸如樹集合和網(wǎng)格搜索之類的元估計(jì)器,以及對(duì)多分類問題的支持。

 利用 Spark 和 scikit-learn 將你的模型訓(xùn)練加快 100 倍

分布在不同的維度上

如上所示,Spark ML 將針對(duì)分布在多個(gè)執(zhí)行器上的數(shù)據(jù)來訓(xùn)練單個(gè)模型。當(dāng)數(shù)據(jù)量很大,以至于無法存入一臺(tái)機(jī)器上的內(nèi)存時(shí),這種方法可以很好地工作。然而,當(dāng)數(shù)據(jù)量很小時(shí),在單臺(tái)機(jī)器上這可能會(huì)比 scikit-learn 的學(xué)習(xí)效果差。此外,例如,當(dāng)訓(xùn)練一個(gè)隨機(jī)森林時(shí),Spark ML 按順序訓(xùn)練每個(gè)決策樹。此項(xiàng)工作的時(shí)間將與決策樹的數(shù)量成線性比例,和分配給該任務(wù)的資源無關(guān)。

對(duì)于網(wǎng)格搜索,Spark ML 實(shí)現(xiàn)了一個(gè)并行參數(shù),該參數(shù)將并行地訓(xùn)練各個(gè)模型。然而,每個(gè)單獨(dú)的模型仍在對(duì)分布在執(zhí)行器之間的數(shù)據(jù)進(jìn)行訓(xùn)練。這項(xiàng)任務(wù)的總并行度只是純粹按照模型維度來的,而不是數(shù)據(jù)分布的維度。

最后,我們希望將我們的訓(xùn)練分布在與 Spark ML 不同的維度上。當(dāng)使用中小型數(shù)據(jù)時(shí),將數(shù)據(jù)擬合到內(nèi)存中不是問題。對(duì)于隨機(jī)森林的例子,我們希望將訓(xùn)練數(shù)據(jù)完整地廣播給每個(gè)執(zhí)行器,在每個(gè)執(zhí)行者身上擬合一個(gè)獨(dú)立的決策樹,并將這些擬合的決策樹帶回給驅(qū)動(dòng)器,以集合成一個(gè)隨機(jī)森林。這個(gè)維度比串行分布數(shù)據(jù)和訓(xùn)練決策樹快幾個(gè)數(shù)量級(jí)。

特征

考慮到這些現(xiàn)有解決方案在我們的問題空間中的局限性,我們內(nèi)部決定開發(fā) sk-dist。歸根結(jié)底,我們希望發(fā)布的是模型,而不是數(shù)據(jù)。

雖然 sk-dist 主要關(guān)注元估計(jì)器的分布式訓(xùn)練,但它也包括很多其它模塊,如 Spark 的 scikit-learn 模型的分布式預(yù)測(cè)模塊等。

  • 分布式訓(xùn)練——使用 Spark 進(jìn)行分布式元估計(jì)訓(xùn)練,支持以下算法:帶網(wǎng)格搜索和隨機(jī)搜索的超參數(shù)優(yōu)化、帶隨機(jī)林的樹集合、額外樹和隨機(jī)樹嵌入,以及一對(duì)一和一對(duì)多的多分類策略。

  • 分布預(yù)測(cè)——具有 Spark 數(shù)據(jù)幀的擬合 scikit-learn 估計(jì)器的預(yù)測(cè)方法。這使得帶有 scikit-learn 的大規(guī)模分布式預(yù)測(cè)可以在沒有 Spark 的情況下進(jìn)行。

  • 特征編碼——分布特征編碼使用被稱為編碼器的靈活特征變換器來完成。不管有沒有 Spark,它都可以起作用。它將推斷數(shù)據(jù)類型,自動(dòng)應(yīng)用默認(rèn)的特征變換器作為標(biāo)準(zhǔn)特征編碼技術(shù)的最佳實(shí)現(xiàn)。它還可以作為一個(gè)完全可定制的功能聯(lián)合,如編碼器,它的附加優(yōu)勢(shì)是與 Spark 匹配的分布式 transformer。

用例

以下是判斷 sk-dist 是否適合解決你的機(jī)器學(xué)習(xí)問題的一些準(zhǔn)則:

  1. 傳統(tǒng)的機(jī)器學(xué)習(xí)方法,如廣義線性模型、隨機(jī)梯度下降、最近鄰、決策樹和樸素貝葉斯等,都能很好地應(yīng)用于 sk-dist,這些方法都可以在 scikit-learn 中實(shí)現(xiàn),并且可以直接應(yīng)用于 sk-dist 元估計(jì)。

  2. 中小型數(shù)據(jù)、大數(shù)據(jù)不能很好地在 sk-dist 中起作用。記住,分布式訓(xùn)練的維度是沿著模型的軸,而不是數(shù)據(jù)。數(shù)據(jù)不僅需要放在每個(gè)執(zhí)行器的內(nèi)存中,而且要小到可以傳播。根據(jù) Spark 配置,最大傳播大小可能會(huì)受到限制。

  3. Spark 定向和訪問——sk-dist 的核心功能需要運(yùn)行 Spark。對(duì)于個(gè)人或小型數(shù)據(jù)科學(xué)團(tuán)隊(duì)來說,這并不總是可行的。

這里一個(gè)重要的注意事項(xiàng)是,雖然神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)在技術(shù)上可以用于 sk-dist,但這些技術(shù)需要大量的訓(xùn)練數(shù)據(jù),有時(shí)需要專門的基礎(chǔ)設(shè)施才能有效。深度學(xué)習(xí)不是 sk-dist 的最佳用例,因?yàn)樗`反了上面的(1)和(2)。

開始

要開始使用 sk-dist,請(qǐng)查看安裝指南。代碼庫還包含一個(gè)示例庫,用于說明 sk-dist 的一些用例。歡迎所有人提交問題并為項(xiàng)目做出貢獻(xiàn)。

via:https://medium.com/building-ibotta/train-sklearn-100x-faster-bec530fc1f45

雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

 利用 Spark 和 scikit-learn 將你的模型訓(xùn)練加快 100 倍

分享:
相關(guān)文章
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說