如何無縫地將人工智能擴展到分布式大數據


 

作者: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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM