演講嘉賓簡介:邱鑫,英特爾高級軟件工程師,BigDL和Analytics Zoo核心貢獻者。
以下內容根據演講視頻以及PPT整理而成。
點擊鏈接觀看精彩回放:https://developer.aliyun.com/live/43188
本次分享主要圍繞以下四個方面:
一、Overview of Analytics Zoo & BigDL
二、Getting Started
三、End-to-End Pipelines
四、ML Workflow
一、Overview of Analytics Zoo & BigDL
BigDL
BigDL是2016底開源項目,是基於Spark的分佈式深度學習框架。當時考慮到Spark在深度學習的支持方面比較弱,所以希望為大數據用戶提供更多先進的深度學習算法。開發完BigDL之後發現它對深度學習出身的開發者並不友好,因為大家需要學習Spark相關知識,還需要學習Scala。因此開發了Analytics Zoo,在Analytics Zoo中直接提供了TensorFlow,PyTorch,Keras,BigDL,Ray的支持。
當時做BigDL的初衷是因為很多大數據用戶希望使用深度學習的算法,如京東有大量圖像存儲在HBase上,需要對圖像做預處理,將處理後數據放到模型中繼續工作,還需要將特徵提取結果存放在HDFS上,做圖像相似性檢索等應用。京東使用的是Caffe,與大數據集群不同的是,兩個集群網絡帶寬有限,且圖像經常更新,用戶每次從GPU集群拉取到大數據集群網絡開銷都非常大。當英特爾將整個預測的pipeline搬到Spark集群上時,HBase和Spark可以結合在一起,提供零拷貝的處理策略,這種策略使得京東預測速度提升了3.83倍。
BigDL可以直接跑Spark集群上面,不需要對集群做修改,集成了很多英特爾特有的技術,對模型訓練進行加速。大家如果對BigDL有興趣可參考SoCC上發表的一篇工作。
Analytics Zoo
Analytics Zoo是統一的數據分析AI平臺,支持筆記本、雲、Hadoop Cluster、K8s Cluster等平臺、此外,Analytics Zoo提供了端到端的pipeline,大家可以將AI模型應用到分佈式大數據場景中。Analytics Zoo還提供了端到端的ML workflow和內置的模型和算法。具體而言,在底層的使用環境中,支持深度學習框架,如TensorFlow、PyTorch、OpenVINO等,還支持分佈式框架,如Spark、Flink、Ray等,還可以使用Python庫,如Numpy、Pandas、sklearn等。在端到端的pipeline中用戶可以使用原生的TensorFlow和PyTorch,用戶只需要很簡單的修改就可以將原有的TensorFlow和PyTorch代碼移植到Spark上來做分佈式訓練。Analytics Zoo還提供了RayOnSpark,ML Pipeplines,Automatic Cluster Serving,支持流式Serving。在內置算法中,提供了推薦算法,時序算法,視覺以及自然語言處理等。
一般大家在開發大數據AI應用時,需要經過三步。首先在laptop上面使用一些樣本數據實現模型的原型。然後將代碼移植到集群上面,使用歷史數據做測試。再將代碼移到生產環境中,處理分佈式數據。從用戶角度而言,希望代碼儘可能在第一步完成,後面兩步不再修改,即可部署到自己的Hadoop或K8S集群上。
二、Getting Started
用戶首先需要安裝Analytics Zoo,可以通過Google Colab或者Aliyun EMR,亦或是在筆記本上Pull Analytics Zoo Docker Image,pip install 等方式安裝。
Aliyun EMR指的是Aliyun E-MapReduce, 用戶可以選擇Analytics Zoo 0.8.1版本或TensorFlow 1.15.0作為可選服務。
三、End-to-End Pipelines
下圖中代碼部分是Analytics Zoo代碼,train_rdd使用了Hadoop API,dataset是從train_rdd導出的TFDataset。開始構建TensorFlow模型,將其放到TFOptimizer中,再定義MaxEpoch。
例1:Image Segmentation using TFPark
下面展示了Image Segmentation 的一個例子。注意在第一步,需要帶上sc=init_nncontext(),表示初始化運行環境,幫助用戶初始化analytic-zoo的環境變量以及Spark context。
再將數據下載到指定目錄中,加載數據。還可以可視化數據,展示原生圖片和Mask後的圖片。定義參數,如img_shape,batch_size,epoch等。使用Scipy做數據預處理,得到處理好的特徵數據,將數據放到TFDataset中,定義U-Net模型,使用Keras function API,定義loss,使用net.compile()方法,調用summary可查看目前的結構,使用keras_model.fit()方法訓練模型,最後再可視化預測結果。比對原始圖片,實際Mask圖片以及預測圖片如下:
例2:Face Generation Using Distributed PyTorch on Analytics Zoo
下面介紹使用PyTorch的Face Generation 的一個例子,先從PyTorch Hub中下載的PAGN模型,再使用noise方法獲得隨機數據,將noise放在model中生成結果,如下圖:
Analytics Zoo的初始化有三種方法,包括sc=init_nncontext(),第二種是使用init_spark_on _yarn() 方法,第三種是使用 init_spark_on_local()方法。
例子3:Image Similarity using NNFrame
如果想要將Analytics Zoo使用在現有的Spark MLPipeline裡面的話,可以使用NNEstimater。
下面介紹Image similarity的例子。客戶主要做房產交易,它們的一種業務場景是為用戶推薦房子。最開始還是需要sc=init_nncontext() 初始化環境,使用NNImageReader將圖片讀取到Spark中,定義模型,加載模型,再使用NNEstimater集成Analytics Zoo。
Image similarity可視化結果如下圖:
在Production Deployment時,首先要訓練模型,再提取圖片特徵數據集,最後是做預測。下圖中左邊是正在觀看的House的樣子,右邊是推薦的較為相似的House。
四、ML Workflow
在做Cluster Serving時可以通過InputQueue方式將數據存放到pipeline中,再通過OutputQueue方式輸出數據。用戶可以更方便的構建出Serving工程。
使用AutoML可以做時序數據預測,相信對做醫學的同學還是很有用的,如觀察某個病人的健康特徵隨著時間變化的情況。