1. 程式人生 > >基於百度英偉達EasyDL公開課的學習筆記

基於百度英偉達EasyDL公開課的學習筆記

本文是基於智東西公開課《零演算法基礎的百度EasyDL定製化影象識別揭祕》整理的學習筆記

本文非廣告,標註單純是出於尊重智東西和EasyDL的智慧財產權

如若涉及侵權,請聯絡本人

作者:李皮皮

謝絕任何不標註原出處的轉載以及百度百家號抄襲

 

本次公開課為期一小時,涉及四個方面:

1. AI賦能行業的的痛點

2. EasyDL服務端和裝置端技術解析

3. GPU叢集加速EasyDL訓練與推理

4. EasyDL賦能行業案例分享


AI賦能行業的痛點

在目前的AI行業中,需求大致可以分為兩種:通用需求和定製需求。

對於通用需求,我們可以用通用模型解決。例如語音識別,影象識別,OCR,人臉識別等。

對於定製需求,則是一些通用模型解決不了的問題。例如輔助醫藥工作者對中草藥進行鑑定,生物研究輔助研究員對生物品種進行分類……在本科階段,北京郵電大學經管院的陳霞老師曾告訴過我們,電子商務做的就是抓使用者的痛點,這一點也同樣適用於網際網路行業。根據百度AI技術生態部高階演算法工程師趙鵬昊老師的介紹,AI定製需求的核心訴求大概有三個:

(1)客戶往往需要使用自己的資料訓練自己特有的模型

(2)客戶通常對自己領域都有很強的專業知識,但是並不瞭解深度學習(以下簡稱DL),也不願意去做複雜的模型訓練、服務部署和運維

(3)客戶的需求往往比較急切,希望快速驗證模型效果(並直接獲得可整合的定製化服務API和私有化部署能力)

根據這些痛點,百度的EasyDL應運而生,大致服務流程如下:

——圖片摘自智東西公開課課件

 

這款產品的亮點是,它不僅提供雲端的API服務,更提供了離線SDK的服務,能讓使用者線上下部署自己的私有化定製。


EasyDL服務端和裝置端技術解析

在EasyDL的服務端,有下面幾種核心技術:AI Workflow分散式引擎,百度自創PaddlePaddle深度學習框架,遷移學習,Auto Model Search機制, early stoopping機制,模型效果評估機制。下面來一一瞭解一下。

對於一個DL建模,大致工作流程如下:

(1)在資料倉庫提取資料

(2)ETL*進行資料清洗,特徵提取,驗證集的切分

(3)分散式訓練

(4)模型評估

(5)自動服務(auto serving)

 

* ETL(以下解釋摘自百度百科《ETL》【1】): 

ETL,是英文 Extract-Transform-Load 的縮寫,用來描述將資料從來源端經過抽取(extract)、互動轉換(transform)、載入(load)至目的端的過程。ETL一詞較常用在資料倉庫,但其物件並不限於資料倉庫。

ETL是構建資料倉庫的重要一環,使用者從資料來源抽取出所需的資料,經過資料清洗,最終按照預先定義好的資料倉庫模型,將資料載入到資料倉庫中去。

資訊是現代企業的重要資源,是企業運用科學管理、決策分析的基礎。目前,大多數企業花費大量的資金和時間來構建聯機事務處理OLTP的業務系統和辦公自動化系統,用來記錄事務處理的各種相關資料。據統計,資料量每2~3年時間就會成倍增長,這些資料蘊含著巨大的商業價值,而企業所關注的通常只佔在總資料量的2%~4%左右。因此,企業仍然沒有最大化地利用已存在的資料資源,以至於浪費了更多的時間和資金,也失去制定關鍵商業決策的最佳契機。於是,企業如何通過各種技術手段,並把資料轉換為資訊、知識,已經成了提高其核心競爭力的主要瓶頸。而ETL則是主要的一個技術手段。

這裡需要注意,可能我們會有一個誤區——AI訓練集不需要太大。其實,AI的訓練集往往都符合大資料的經典3V原則*,所以我們需要用MongoDB,Hadoop的DFS做資料儲存、用spark叢集做分散式預處理和模型評估、使用百度的PaddlePaddle呼叫框架建模,最後把訓練好的模型通過Docker技術做AI平臺服務。個人認為這是一個很好的學習指南,讓大資料工程師能夠很好查漏補缺。

大資料經典3V原則(摘自動點科技文章【2】):

如果你問人們,大資料是什麼?比較樣板化的答案通常是三個 V:數量(volume),效率(velocity)和廣闊性(variety)。接下來他們會開始討論,他們的資料到底有多大才能被定義為“大資料”。當你開始看到實際技術的時候,事情開始變得比較複雜。這些主要的挑戰使事情發展到,今天已經沒有單一的一種科技可以一次性處理有關於大資料的三個 V 的所有問題——數量。效率和廣闊性。

 

剛才提到了的核心技術除去AI workflow, 還有百度自創PaddlePaddle深度學習框架。PaddlePaddle全名叫做PArallel Distributed Deep Learning, “是一個深度學習框架/語言”。在EasyDL中,Paddle有如下應用示例:

——摘自智東西公開課課件

可以看到,它可能是一個類TensorFlow的框架,具體我也沒有了解過,就過了。

下面重點講一下遷移學習(transfer learning)*。在我看來,遷移學習在百度這個產品中佔據的是核心地位,為什麼呢?因為普通的機器學習不能很好滿足客戶需求。一般來說有定製化需求的客戶的標註資料都是很有限的,甚至其領域內的資料標註成本非常高。在這樣的情況下,客戶的需求確實通過較少的資料快速獲得可用且準確率較高的模型。一般來說,從開頭開始搭建神經網路顯然不符合這樣的客戶需求。為了解決這個矛盾,百度使用了遷移學習。舉個栗子,做中草藥識別模型時,EasyDL會將已有的植物識別模型運用到中草藥識別當中去:將百度大規模標註的資料集在深度神經網路上做預訓練,將預訓練引數加入神經網路中做調解(遷移學習),從而大大提高效率。這樣可以將幾十個小時的訓練降低到幾小時甚至幾分鐘量級。此外,EasyDL還支援多點預訓練,持續閉環等機制,使得工作流實現配置化和自動化。

遷移學習(摘自知乎使用者“劉詩昆”關於《什麼是遷移學習(Transfer Learning)?這個領域歷史發展前景如何?》的回答【3】)

遷移學習(Transfer learning) 顧名思義就是就是把已學訓練好的模型引數遷移到新的模型來幫助新模型訓練。考慮到大部分資料或任務是存在相關性的,所以通過遷移學習我們可以將已經學到的模型引數(也可理解為模型學到的知識)通過某種方式來分享給新模型從而加快並優化模型的學習效率不用像大多數網路那樣從零學習(starting from scratch,tabula rasa)。

這裡不禁想感嘆一下當時學《電子商務概論》課程時,就覺得百度和騰訊是緊緊抓住了流量入口的。現在百度的搜尋引擎產生的資料量真是奠定了其資料霸主的地位啊。

此外,EasyDL還使用了Auto Model Search 和 Early stopping機制,讓少兩樣本就能有用高精度。Auto Model Search就是對模型結構和超引數做自動搜尋,更好匹配不同型別資料,做最佳模型。而early stopping呢,能夠降低過擬合風險。做過DL的同學應該都有體會,DL是能分分鐘過擬合的,對於這種風險,early stopping能很好抑制過擬合和欠擬合。目前EasyDL的模型絕大多數準確率都在80%以上。

技術本身是一方面,學統計的同學肯定有體會,模型的評估也是至關重要的。在呈現評估結果時,EasyDL就非常好的利用了混淆矩陣的各個指標和F1-score,做了儘可能精細的結果展示。這裡我覺得有一個亮點,就是bad case的展示。一般可能大家是不願意把擬合的不好的結果放出來的,但是百度這裡把badcase放出來,讓客戶對預測結果有了一個感性的認知。再結合其領域內專業知識,說不定可以很好解決錯誤分類的問題,而且也有利於他們專門對錯誤分類的資料做一個訓練集的補充。

下面來學習一下EasyDL裝置端計算(Edge Computing)。據趙鵬昊老師說,這個裝置端的實現是谷歌目前都沒有的。這個創意我覺得超級好,現在真的有一點資源浪費嚴重了,上雲就是高大上,但是並不是所有開發都需要雲端才能完成的,夠用就可以了。EasyDL在自己的裝置上就可以完成,如果算力不夠,就會進入霧計算;如果霧計算也不能滿足需求,才會啟動雲端計算。這樣的多層計算結構很好的抑制了浪費(就是不知道真實情況如何了)。然後放一個雲端計算和裝置端計算的對比課件:

 

伺服器叢集訓練的機器學習模型通常大小都在200MB-500MB,其本質原因是模型含有上千萬的單精度浮點引數。顯然對於手機這樣的裝置端是不可能給這麼多記憶體來計算的。所以就需要對模型進行體積壓縮,通常目標體積為20MB-30MB。採用的壓縮技術有:引數剪枝(Pruning),將浮點數量化成8bit或者4bit的數值,輕量網路(SqueezeNet, MobileNet)。

除去壓縮問題,還有裝置加速問題,這裡通過異構晶片實現加速。還有一個小知識點,對於IOS的遊戲開發,MPS庫是一個常用的加速手段,更好利用IOS上的GPU做加速。還有使用ARM晶片通過NEON技術加速。


GPU叢集加速EasyDL訓練與推理

這一趴老師主要講了一下英偉達GPU*叢集的構成。通常使用的是英偉達特斯拉系列搭建平臺,有P4, P40, V100這三個版。P4視訊記憶體8G, P40視訊記憶體24G, 所以通常用P4做部署,P40和V100做訓練。結論就是GPU叢集在做影象分類和物體檢測時,效能遠超CPU叢集。EasyDL使用者最快五分鐘就可以使用小規模資料集訓練,完成定製化模型並獲得服務。並且GPU叢集的分散式架構能夠確保任何單節點的故障都不會影響整體的服務能力。

其實有一個細思極恐的問題,百度的EasyDL能夠在短時間內完成如此快速的計算,一方面是演算法等百度自身開發的功勞,但是有一個大功勞是英偉達的(“P4提升吞吐量高達30倍,同時延遲降低75%”)。不禁讓人想起了中興的慘案。核心的技術還是掌握在別人手裡。

GPU與CPU的區別與聯絡(摘自CSDN使用者“JackZhangNJU”的文章【4】)

從硬體來分析,CPU和GPU似乎很像,都有記憶體、cache、ALU、CU,都有著很多的核心,但是二者是有區別的。

但以核心為例,CPU的核心比較重,可以用來處理非常複雜的控制邏輯,預測分支、亂序執行、多級流水等等CPU做得非常好,這樣對序列程式的優化做得非常好;

但是GPU的核心就是比較輕,用於優化具有簡單控制邏輯的資料並行任務,注重並行程式的吞吐量。

簡單來說就是CPU的核心擅長完成多重複雜任務,重在邏輯,重在序列程式;GPU的核心擅長完成具有簡單的控制邏輯的任務,重在計算,重在並行。

另外,並行和併發的概念是不一樣的,並行就是大家一起幹,同時去做,併發就是多執行緒競爭資源


EasyDL賦能行業案例分享

這一部分是我覺得最有意思的了。目前EasyDL能解決的問題有三類,影象分類、物體檢測和定製聲音識別,還在開發別的功能(文字分類,情緒情感分析,視訊監控)。給出了四個案例:

(1)蝶魚科技:使用3000張圖片訓練,在製造和組裝鍵盤流水線中,識別鍵盤組裝後的合格性,將鍵盤圖片分類。每條生產流水線每年節省12萬人工檢測員人力成本,準確率高達99%【科技是第一生產力啊。。。真是可怕】

(2)checkpoint零售安防:這是美國的一家連鎖超市,用於識別購物車下層是否有未付款商品,需求是精準排除殘疾人購物車和兒童購物車。之前該公司使用的是感測器,準確率極差,使用了DL後,準確率高達95%。據老師說,目前該公司計劃全部更新店鋪裝置,使其能與百度EasyDL全面接軌。

(3)惠合科技e店佳:這個也非常有意思,是通過拍攝視訊來識別超市的物品陳列是否符合要求。在以往,需要專人到店鋪挨個檢查,不但耗時耗力,還有很多作弊情況。使用DL後,稽核效率提升了30%。這讓我想到了除去法律和道德,科技也可以做到約束人性醜惡,減少作弊。

(4)CELLA(百度合作伙伴):CELLA為聖象地板做木地板瑕疵檢測木星,並且釋出生成離線SDK.檢測率高達95%,提高了產能——處理單片木板原料的單位時間僅為原來的四分之一。


當然EasyDL也存在很多問題,我能想到的一個就是目前的資料標註問題,老師也提到目前是使用者自己標註,後面可能會有眾包。

真是該好好關注一下各大網際網路公司的AI部署了,感覺自己好落後~~


參考文獻:

【1】https://baike.baidu.com/item/ETL/1251949?fr=aladdin

【2】https://cn.technode.com/post/2013-11-08/3v-big-data/

【3】https://www.zhihu.com/question/41979241