如何無縫地將人工智慧擴充套件到分散式大資料

示說網發表於2020-09-19

 

作者:Jason Dai,最初發表於LinkedIn Pulse

6 月初,在今年的虛擬 CVPR 2020 上,我在半天的 教程課中 介紹 瞭如何構建面向大資料的深度學習應用程式。這是一個非常獨特的體驗,在本文中,我想分享本教程的一些重點內容。

關鍵問題:大資料上的人工智慧

本教程的重點是AI 從實驗階段進入生產應用這個過程中出現的一個關鍵問題,即 如何無縫地將人工智慧擴充套件到分散式大資料 。如今,人工智慧研究人員和資料科學家要將人工智慧模型應用到儲存在分散式大資料叢集中的生產資料集上,都需要經歷巨大的痛苦。

通常,傳統的方法是配置兩個獨立的叢集,一個用於大資料處理,另一個用於深度學習(例如GPU 叢集),中間部署“聯結器”(或膠水程式碼)。遺憾的是,這種“聯結器方法”不僅帶來了大量的開銷(例如,資料複製、額外的叢集維護、碎片化的工作流等),而且還會因為跨異構元件而導致語義不匹配(下一節將對此進行詳細介紹)。

為了應對這些挑戰,我們開發了開源技術,直接在大資料平臺上支援新的人工智慧演算法。如下圖所示,這包括 BigDL (面向 Apache Spark 的分散式深度學習框架)和 Analytics Zoo (Apache Spark/Flink&Ray 上的分散式 Tensorflow、Keras 和 PyTorch)。 

 

一個啟發性的示例: JD.com

在深入講解 BigDL 和 Analytics Zoo 的技術細節之前,我在教程中分享了一個啟發性的示例。京東是中國最大的網購網站之一;他們在 HBase 中儲存了數以億計的商品圖片,並構建了一個端到端的物件特徵提取應用程式來處理這些圖片(用於影像相似性搜尋、圖片去重等)。雖然物件檢測和特徵提取是標準的計算機視覺演算法,但如果擴充套件到生產環境中的數億張圖片,這將是一個相當複雜的資料分析流水線,如下面的幻燈片所示。

 

之前,京東的工程師在 5 節點的 GPU 叢集上構建瞭解決方案,採用的是“聯結器方法”:從 HBase 讀取資料,跨叢集對資料進行分割槽和處理,然後在 Caffe 上執行深度學習模型。這個過程非常複雜且容易出錯(因為資料分割槽、負載平衡、容錯等都需要手動管理)。此外,“聯結器”還出現了語義不匹配的情況(在這裡是 HBase+Caffe)——從 HBase 讀取資料大約需要花費一半的時間(因為任務並行性與系統中 GPU 卡的數量相關,與 HBase 互動讀取資料的速度太慢了)。

為了克服這些問題,京東的工程師使用 BigDL 實現了端到端的解決方案(包括資料載入、分割槽、預處理、DL 模型推斷等),作為一個統一的管道,以分散式方式執行在單個 Spark 叢集上。這不僅極大地提高了開發效率,而且速度比 GPU 解決方案提高了大約 3.83 倍。要了解這個應用程式的更多細節,可以參考 [1] 和 [2] 

關鍵技術:BigDL框架

在過去的幾年裡,我們一直在推動開源技術,力爭無縫地將人工智慧擴充套件到分散式大資料。2016 年,我們開源了 BigDL ,一個面向 Apache Spark 的分散式深度學習框架。它被實現為 Spark 上的一個標準庫,並提供了一個富有表現力的、“資料分析整合”深度學習程式設計模型。因此,使用者可以將新的深度學習應用程式作為標準的 Spark 程式構建,無需進行任何更改,就可以在現有的大資料叢集上執行,如下面的幻燈片所示。

 

與機器學習社群的一般常識(細粒度的資料訪問和就地更新對於高效的分散式訓練至關重要)相反,BigDL 直接在 Spark 的函式式計算模型(具有寫時複製和粗粒度操作特性)上提供可擴充套件的分散式訓練。它使用 Spark 中現有的原語(比如 shuffle、broadcast、記憶體快取等)實現了一個高效的類 AllReduce 操作,與 Ring AllReduce 具有相似的效能特徵。詳情請參閱我們的 SoCC 2019 論文

關鍵技術:Analytics Zoo平臺

BigDL 提供了 Spark 原生框架讓使用者建立深度學習應用程式, Analytics Zoo 則試圖解決一個更普遍的問題:如何以分散式、可擴充套件的方式無縫地將任意人工智慧模型(可以使用 TensroFlow、PyTorch、PyTorch、Keras、Caffe 等等)應用到儲存在大資料叢集上的生產資料。

 

如上面的幻燈片所示,Analytics Zoo 是在 DL 框架和分散式資料分析系統之上實現的一個更高層次的平臺。特別是,它提供了一個“端到端 流水線 層”,可以無縫地將 TensorFlow、Keras、PyTorch、Spark 和 Ray 程式整合到一個整合 流水線 中,後者可以透明地擴充套件到大型(大資料或 K8s)叢集,用於分散式訓練和推理。

作為一個具體的例子,下面的幻燈片展示了 Analytics Zoo 使用者如何在 Spark 程式中直接編寫 TensorFlow 或 PyToch 程式碼;這樣,程式就可以先使用 Spark 處理大資料(儲存在 Hive、HBase、Kafka、Parquet 中),然後將記憶體中的 Spark RDD 或 Dataframes 直接提供給 TensorFlow/PyToch 模型用於分散式訓練或推理。在底層,Analytics Zoo 會自動處理資料分割槽、模型複製、資料格式轉換、分散式引數同步等,這使得 TensorFlow/PyToch 模型可以無縫地應用於分散式大資料。

 

總結

在本教程中,我還分享了更多關於如何使用 Analytics Zoo 構建可擴充套件大資料 AI 流水線 的細節,包括高階功能(比如 RayOnSpark、用於時序資料的 AutoML 等)和 實際的應 用案例(比如 Mastercard、Azure、CERN、SK Telecom 等)。感興趣的讀者,可以查閱以下資料:

參考

  1. “Building Large-Scale Image Feature Extraction with BigDL at JD.com”, https://software.intel.com/en-us/articles/building-large-scale-image-feature-extraction-with-bigdl-at-jdcom
  2. “BigDL: A Distributed Deep Learning Framework for Big Data”, ACM Symposium of Cloud Computing conference (SoCC) 2019, https://arxiv.org/abs/1804.05839

 

相關文章