數據不足的情況下,我們可以利用數據增強的方式進行彌補;訓練效率的問題,可以通過預訓練模型+遷移學習的方式節省訓練時間;而在整個「煉丹」的過程中,我們也可以通過超參推薦實現自我優化,減少人工調參的成本;同時加上靈活的部署方式,可以實現高精度 AI 模型一站式開發與部署。
在5月9日晚7點的「智東西」高精度 AI 模型公開課百度 EasyDL 專場中,百度 AI 開發平臺高級研發工程師餅乾老師,為大家系統講解了企業在 AI 模型開發中的難點,以及針對這些難點,百度 EasyDL 專業版又是如何解決的。
本文為此次專場的實錄。
今天的課程主題為《基於 EasyDL 訓練並部署企業級高精度 AI 模型》。本次講解的內容分為下面幾個部分:
1、企業在開發與部署 AI 模型中面臨的挑戰
2、AI 開發平臺 EasyDL 介紹
3、EasyDL 技術原理解析
4、腳本調參和 Notebook 開發方式介紹
5、EasyDL 企業應用案例
6、實操:飲品檢測模型訓練、調優與部署
企業在開發與部署 AI 模型中
面臨的挑戰
目前各行各業都需要 AI 的落地,但是在落地的過程中,往往需要定製化地開發 AI 模型。在一次聯合調研過程中,我們發現約86%的市場需求需要定製化開發業務場景下的 AI 模型。這裡畫一個重點,是「定製」這兩個字。、
百度的 AI 開放平臺已經提供了一些通用的接口,但是這些通用接口只能滿足一部分的需求,並不能滿足所有的需求。比如科研機構的野生生物識別,這是屬於一個細粒度圖像分類的問題;還有工業上統計原材料的數量、或者說統計工業上的一些瑕疵;物流方面的包裹分揀;安防方面的廚師帽檢測、安全帽施工檢測;零售方面的統計 SKU 的數量、計算分銷率、或者統計貨物在貨架上的佔比等等。
然而在定製 AI 模型的時候,我們會遇到一些困難和挑戰。數據採集與標註的成本非常高,而且由於大部分的開發者缺少訓練模型的經驗,導致整個模型迭代的優化時間會很長。其次我們需要將訓練好的模型快速與業務系統緊密結合,因此在工程中的模型部署環節也需要花費很大的精力。
總體來說,目前定製 AI 模型面臨著成本高、項目效果無法達到預期等問題。
AI 開發平臺 EasyDL 介紹
下面是第二部分,EasyDL 的介紹。
EasyDL 是一個企業級的零門檻 AI 開發平臺,支持定製化的模型訓練,並提供一站式的開發體驗。EasyDL 為企業以及個人開發者提供了 AI 模型開發中的全流程功能支撐,面對不同的群體提供多樣化的產品形態。多樣化的產品形態,包括:
EasyDL 經典版,幫助零算法基礎的用戶定製高精度的 AI 模型;EasyDL 專業版,提供可編程操作,幫助開發者更加靈活地進行 AI 模型開發;EasyDL 零售版,結合零售場景中的數據、算法,做了一些場景優化和增值服務。
EasyDL 底層基於百度自主研發的飛槳開源深度學習平臺實現。支持圖片、文本、視頻、音頻等輸入數據,依託飛槳核心框架與工具組件,提供數據預處理、模型訓練、部署以及 serving 服務。目前提供的服務方式有4種:
公有雲 API:用戶可直接調用百度雲提供的 API 進行使用。設備端 SDK:做移動端、端設備、以及嵌入式的一些同學可以考慮使用設備端的 SDK 進行服務部署。Edgeboard/Jetson 系列軟硬一體方案:目前我們所有的算法都會去優先適配這軟硬一體的設備。本地伺服器部署:針對一些有本地化、私有化部署需求的同學,我們提供本地化伺服器部署的方式,同樣可以達到 serving 的效果。
· EasyDL 經典版
EasyDL 經典版是2017年11月份推出的業界首個零算法基礎的 AI 定製化開發平臺,目前主要提供圖像分類、物體檢測、圖像分割、文本分類、聲音分類、視頻分類等功能。其適合 AI 基礎比較薄弱或追求高效率開發的企業及個人開發者。
· EasyDL 零售版
在經典版的基礎之上,我們推出了零售版。提供結合了零售行業的數據、算法、工具等一些服務。其次,我們推出了一些增值功能,比如說 SKU Cloud、貨架拼接、智能拼接、翻拍識別、門頭識別等。
舉個例子,比如說 SKU Cloud,我們已經提供了一個1500類日常化品類的 API,在滿足場景的情況下,可以直接使用提供的標準化 API。如果有其他需求,則可以通過 EasyDL 零售版平臺訓練滿足實際零售場景需求的 SKU 模型。該版本適用於有商品識別需求的零售行業企業或者服務商。
· EasyDL 專業版
為了滿足用戶的深度編程、深度調參等需求,去年我們推出的 EasyDL 專業版。其中內置了百度自有的海量數據訓練的預訓練模型,全面支持飛槳 Master 模式,目前在 CV 和 NLP 領域已經提供了多項的功能。
其中在 NLP 領域,我們預置了百度自研的業界效果最好的預訓練模型 ERNIE 和多種 NLP 經典算法網絡。ERNIE 在中英文的16個任務上超越了業界最好模型。2019年底,ERNIE 以歷史上首次超越90大關的成績登頂自然語言處理領域最權威的 GLUE 評測榜單。之後在 SemEval 2020 中摘得五項世界冠軍。目前通過 EasyDL 專業版助力業界開發者,模型效果和開發效率全面提升。
最後介紹一下 EasyDL 的平臺特性。與普通的機器學習工具相比,EasyDL 從數據、模型訓練、到最後的服務,提供了一站式的解決方案。我們面向用戶也很廣泛,可以是零基礎的小白(經典版),也可以是有一定數據處理能力的開發者(專業版)。同時也提供了比較全面的定製化開發能力,包括分類、檢測、分割、文本、聲音等。在服務端我們提供了端雲一體的解決方案,輕快即用,並內置大量的預訓練模型。
EasyDL 技術原理解析
然後我簡單介紹一下 EasyDL 的一些基本技術原理。
在業務層面上,我們主要提供了數據集管理、模型訓練、模型評估、模型校驗和模型發布的功能,其底層依託於飛槳深度學習平臺。
在工作流這一部分,我們自研了 AI Workflow,可以實現數據服務、數據預處理、模型訓練、評估模型、模型部署的整個 Workflow 定製化。
下面我們先介紹一下 AI Workflow,然後主要講一下數據服務,數據預處理和模型模型訓練這三個部分。
· AI Workflow
提到模型訓練,我們知道,不僅僅是訓練這一個步驟,一般的深度學習都會經歷從數據獲取、數據預處理、模型訓練、模型評估到最後服務部署的流程。EasyDL 的 AI Workflow,融合了傳統的機器學習工作流和大數據處理,其中,數據獲取是基於 MongoDB 和 HDFS,數據預處理和評估是基於 Spark 這個大數據處理框架,模型訓練是基於飛槳深度學習平臺這個深度學習框架,serving 也是基於 k8s 構建的一整套運維系統。
AI Workflow 的基本功能就是要把這些架構完全不同的任務組織成工作流,自動完成流水線任務。進一步講,AI Workflow 還需要對任務進行並發管理、優先級管理、任務重試、支持冪等性等功能,此外,還需要對底層資源進行調度和分發,從而保障流水線可以高效有序地完成。
· 數據服務
數據服務主要包括數據管理、智能標註、和數據閉環,都可以通過 EasyData 來完成。EasyData 是近期上線的智能數據服務平臺,提供數據採集、標註、清洗、加工等一站式數據服務,助力開發者高效獲取 AI 開發所需高質量數據。接下來重點介紹一下數據服務中的智能標註。
智能標註,只需要用戶標註30%的數據就可以訓練出與全量數據訓練效果相等的模型,其標註的流程如下圖右上角所示。當我們有成千上萬的數據時,如果全部通過人工標註的方式進行標註,那麼需要的工作量很大。
所以我們可以先標註少量數據,啟動智能標註,然後進行模型訓練,通過少量數據訓練出的模型自動對其他數據進行標註,而人工只需要對數據中的難例進行判斷,如果符合標準,則可以直接進行標註,不符合標準,則啟動下一輪智能標註的循環,極大地減少了人為的工作量。同時整個工作流也都可以通過 AI Workflow 來直接完成。
舉個例子,如左上角所示。我們進行一個貓狗數據集的標註,如果利用模型進行識別,第一張圖片中的小貓我們可以很容易地判斷出它是一隻貓,屬於 Easy Case,而後面兩張圖片就比較難識別,可能會被識別為其他的類別,屬於 Hard Case。
所以,簡單的 Case 是可以通過模型進行標註,而一些多樣性比較大的 Case 還是需要人為進行標註。從最終標註的結果來看,我們大約只需要30%的標註數據,便可以達到100%標註數據所達到的效果,節省了70%的人力成本。
· 數據預處理
我今天主要介紹一下數據預處理中的數據增強。舉一個簡單的例子,如下圖所示。
比如說在我們採集到的數據中,品牌 A 的車頭都是朝左,品牌 B 的是朝右,那麼對於第三張圖片,模型是識別為品牌 A 還是品牌 B 呢?會不會將車牌識別為一樣的呢?還是會識別車牌的朝向呢?
為了增強其類別的置信度,我們可以對原圖進行數據增強,比如水平翻轉、180度翻轉、270度翻轉等。當然,翻轉只是數據增強方式的一種,還有其他如摳圖、裁剪等方式。
不同場景下所需要的增強方式是不同的。對於開發者來說,需要了解數據集與應用場景,以及每種數據增強方式的不同參數設置。
在 EasyDL 專業版中,我們提供了一種超參自動選擇搜索的自動數據增強方式。在實際的操作過程中,我們會針對開發者提供的 Training Data,提供預設置的增強策略,通過對策略和超參搜索,選擇與該數據集特性強相關的增強策略,對數據進行有益地增強。
· 模型訓練
最後是模型訓練部分。模型訓練包括了四個部分,Transfer Learning、AutoDL、自動超參優化和分布式訓練加速,下面我將為大家一一介紹。
Transfer Learning,所謂遷移學習,就是事先用一個大數據集訓練出一個模型,然後用這個模型再接受用戶自定義的小數據集來進行訓練,對其中網絡結構參數進行微調,從而使模型對於用戶的小數據集更加敏感,達到好的識別效果。
那麼為什麼需要用遷移學習?我從0開始訓練一個模型不行嗎?
一個是考慮用戶數據稀缺性:從頭訓練一個深度神經網絡模型,很依賴大規模的標註數據,但考慮到行業數據的收集難度和標註成本,非常難以獲得。使用遷移學習的另一個原因是考慮訓練時長:從0開始訓練,往往需要幾天甚至幾周,但使用遷移學習,訓練耗時只需要幾小時甚至若干分鐘,可以加快用戶的模型迭代效率。
當然,遷移學習不是萬能的。要使用遷移學習,前提是要保證源領域與目標領域的相似性,這裡的源領域是指預訓練模型所使用的數據集,目標領域指用戶自定義的數據集。遷移學習要求它們具有相似性,只是目標領域更具定製化和細分化。
舉個例子,比如你會騎自行車,那麼應用遷移學習,相信你也能騎電動車,但若是你會騎自行車就想直接開汽車,那遷移學習做不到,因為差別太大了。
因此,EasyDL 是使用了百度自有的海量數據進行預訓練,對用戶涉及到的各個應用場景,基本上都會有涉及,所以才能滿足這個前提。
AutoDL,利用強化學習設計深度學習的框架。具體來說,隨著硬體、應用場景和模態的多樣化,我們使用的模型結構也需要不斷進化。那在設計新模型的過程中,這個搜索空間極為龐大,想要儘可能探索這一空間,就必然要從手工設計模型,轉向自動化生產模型。我們實際使用到的技術就是利用深度增強學習完成模型設計,系統由兩部分組成,第一部分是網絡結構的編碼器,第二部分是網絡結構的評測器。
編碼器通常以 RNN 的方式把網絡結構進行編碼,然後評測器把編碼的結果拿去進行訓練和評測,得到包括準確率、模型大小在內的一些指標,反饋給編碼器,編碼器進行修改,再次編碼,如此迭代。經過若干次迭代以後,最終得到一個設計好的模型。
自動超參調優,做過算法調優的朋友都知道,人工調參,需要設定一組超參數,跑一組實驗,然後根據結果再來調整超參數,這個過程會非常耗時費力,因此我們需要轉向自動調參。要做自動調參,就要涉及到超參推薦策略,也就是根據上一組實驗結果的反饋,推薦出下一組實驗的超參值,從而讓任務自動化。具體的推薦策略簡單的有 Random、Grid(網絡搜索), 具有推薦算法的策略常見的有 TPE、bayes 等。
此外,自動超參調優還包括搜索方式的優化。普通的搜索方式就是並行獨立搜索,即並行跑多組實驗,全部跑完後收集結果,哪組結果最好,就認為哪組超參最優。另一種搜索方式是 PBT,它也是並行搜索,但不獨立。
這裡我舉例來說明,如上圖中,有兩個並發進行的實驗,初始時傳入的超參和模型權重都不相同,經過一定輪數的訓練之後,到第2步會對兩個 Worker 效果進行對比,發現 Worker 0效果比較好,就進行第3步,把 Workder 0的權重和超參值複製到 Worker 1,Worker 0本身的訓練不受影響,而對 Worker 1,還要進行第4步,對複製過來的超參值加入一些擾動,使之與 Worker 0參數有所差異,再繼續訓練。這樣就相當於在訓練過程中把 Worker 1上原始的超參值給過濾了,並在好的超參基礎上進行進一步實驗,從而加快搜索效率。
分布式訓練,前面幾個模型訓練階段的優化都是針對模型效果的,其實在訓練效率上,我們也有優化加速,那就是使用 DGC 深度梯度壓縮機制。
DGC 是由清華大學和史丹福大學共同發表的論文中提出的一種方式。在分布式訓練的過程中,各個 Worker 和 ps,或者是 Worker 之間(這與分布式方式相關),都需要進行大量的梯度數據同步,而數據同步會花費大量帶寬,對訓練環境要求較高,同時耗時也高,尤其是隨著訓練節點數的增多,通信開銷也將成倍增長。基於此,DGC 算法就是挑選出實際有效的梯度數據,並進行壓縮,從而大大減少了分布式訓練時的通信開銷,在論文中,DGC 在保證精度未受損的情況下,壓縮比例達到了270倍至600倍。
飛槳深度學習平臺從1.6.2版本開始也集成了 DGC 的優化機制,我們也即將應用到 EasyDL 專業版中。可以看下我們做的對比實驗,在 v100 上 DGC 機制加速明顯,其中兩機兩卡單 batch 加速9倍、兩機四卡單 batch 加速7.4倍。分布式的 DGC 已經在4月份的 EasyDL 專業版上使用,大家可以在訓練的時候選擇多節點方式進行訓練。
腳本調參和 Notebook
開發方式介紹
下面給大家介紹一下 EasyDL 專業版的兩種開發模式,腳本調參和 Notebook。
腳本調參,進入到腳本調參頁面之後,首先是數據集的選擇。數據集可以是提前準備的數據集,包括分類、檢測。
然後是數據增強策略的選擇。我們這邊支持自動搜索,如果選擇默認配置,我們對每一個模型都會選擇一個比較通用的增強策略。選擇手動配置的話,用戶可以根據自己的行業經驗去配置增強策略。針對不同的場景,不同的想法,都可以通過手動的方式進行配置。
其次,是網絡的選擇。我這邊選擇的是一個 Faster R-CNN 網絡,你也可以選其他如 YOLO、RetinaNet 等網絡。並且同時支持 Python2、Python3 兩個版本。
重點來了,如果你想修改這個模型的結構,或修改一些模型參數,你可以在這個腳本編輯裡面點立即編輯進行編輯。上面暫時並不支持 Backbone 的修改,就是說 ResNet50+FPN 是不能修改,但是 box head,就是頭部是支持修改的。
還有 Batch size、Input of size、Epoch、以及學習率的變化、Learning rate 的變化都是支持修改的。包括對於檢測任務來說,一些 uncle base 方法、基於錨框的訓練方法,我們都可以設置一些關於錨框的一些訓練參數。
Notebook,是一個類似於 Jupyter 的開發工具。左側的這幾個文件都可以通過本地上傳,數據集也可以本地上傳,也可以直接用 EasyDL 把之前上傳過的數據集直接拉到這個訓練環境當中。你可以把這個環境理解成屬於自己的一個高性能 GPU 伺服器終端,我們在 Notebook 裡面,為每個 Notebook 的用戶內置了一個 32GB、V100 的 GPU,這個性能是很好的。大家可以用這個 Notebook 去實現一些簡單的模型,這就是完全把主動權交給大家。
如果說之前的 EasyDL 經典版是一個黑盒,那專業版的就可以修改一些參數,通過 Notebook 的開發模式,用戶可以自己實現模型的定義、數據的讀取、數據的增強、以及最後的預處理。大家如果有新的想法,都可以去體驗一下我們的 Notebook 。
EasyDL 企業應用案例
最後再講一些在 EasyDL 上經典的應用案例。
這是一個扶貧辦的案例。漢中扶貧辦使用 EasyDL 訓練房屋類型、醫學條件的識別模型,並將識別模型加入到他們的平臺系統中,極大地提高工作人員的效率。以前並不能做到家家戶戶地檢查,而通過這種方式,就可以做到全覆蓋檢查。
這是一個工業噴油嘴瑕疵的質檢。柳州源創公司使用 EasyDL 物體檢測的模型去訓練它們工業噴油嘴瘕疵的檢測模型,大約每年可以節約60萬的成本,檢測效率提升了30%。中間那個圖片是他們的解決方案,其中的檢測模型是用到了我們檢測的模型。
零售場景中通過定製化的商品檢測去進行陳列審核。惠合科技採用了 EasyDL 訓練的商品檢測模型,抽取了3000家零售門店並接入陳列審核,那麼品牌商就可以通過這種方式計算到商品的排列佔比、分銷率等。從前是通過人力去觀測這些數值,而現在通過 AI 的方式,讓人員的效率大大提升了30%。
這個是我們內部的一個 Case ,百度作文的小程序。通過 EasyDL 文本分類,訓練識別出作文中的一些修辭手法,並且將修辭手法作為一個參數來對文章質量進行打分,然後再做一些排序,將文章質量高的結果排在前面,進行推薦。
實操
飲品檢測模型訓練、調優與部署
在這個環節中,我將結合一個實際應用案例,為大家實際演示一下 EasyDL 平臺的使用方式。具體的演示內容大家可以點擊下方的視頻進行觀看。