首次在手機端不犧牲準確率實現BERT實時推理,比TensorFlow-Lite快近8倍,每幀只需45ms

2021-12-30 CSDN
來源 | AI科技大本營(ID:rgznai100)基於Transformer的預訓練模型在許多自然語言處理(NLP)任務中取得了很高的準確度。但是這些預訓練模型往往需要很大的計算量和內存。由於移動平臺的存儲空間以及計算能力的限制,這些模型很難實現在移動端的部署。因此,在這個邊緣計算越來越重要的今天,如何有效的壓縮這些大模型成為了一個重要的研究課題。 在過去的一年中,為了減少BERT模型的大小,同時保持多個下遊NLP任務的準確性,很多小模型被相繼提出。例如,DistilBERT 和TinyBERT是通過減少Transformer Block數量來達到減小模型的目的,然而精確度相比於BERT-base有明顯下降。MobileBERT在BERT-base的基礎上,成功的將模型尺寸比減小了4倍,並且保持了較小的精度損失。有意思的是,如果我們將MobileBERT與VGG-16進行對比, MobileBERT的計算量比VGG-16小5.3倍,但計算延遲卻比VGG-16的高6.2倍。造成這種現象的原因是MobileBERT擁有超過2000個計算層(與BERT-large相同),這會在計算過程中產生大量的中間結果,最終導致嚴重的計算延遲。這也成為了將擁有較深層的網絡模型部署在移動端實現實時推理的另一大阻礙。因此,我們不禁思考,是否存在一種有效的解決方案,可以在不犧牲BERT模型準確率的情況下,在移動端實現實時推理?近日,美國東北大學王言治研究組和威廉瑪麗學院任彬研究組共同提出了名為CANAO的編譯器感知的神經網絡結構優化框架,在保持了與BERT原模型相近的準確率的同時,他們成功的將模型大小減少了4.8倍,速度提升了5倍。相比於TensorFlow-Lite(TFLite), CANAO框架在速度方面提升了7.8倍,延遲僅為45ms,首次實現在手機端的高準確率(幾乎不犧牲準確率)、實時自然語言處理任務。他們將CANAO與三種模型BERT-base, DistilBERT, MobileBERT在準確率和延遲上做了對比。CANAOBERT w/o distill.是直接訓練的小模型,CANAOBERT是通過知識蒸餾法訓練的模型,CANAOBERT是通過NAS進一步優化模型寬度得到的模型。
可以看出,三個CANAO模型的延遲都小於對比的三種模型。相比於BERT-base,他們的模型在CPU和GPU上分別快了5.2倍和4.1倍,準確率僅降了0.5-2%。相比於MobileBERT, 他們的模型在CPU和GPU上分別快了1.49倍和1.53倍,準確率僅降了0.4-1%。上表顯示了他們的編譯器感知的神經網絡結構優化框架在DistilBERT,BERT-base以及他們的CANAOBERT模型上取得的效果,並與TFLite框架(只支持移動端CPU)進行了比較。CANAO框架可以分別在CPU和GPU上提升2倍和2.4倍的速度。未進行任何優化的BERT-base模型在TFLite上的運行速度是382ms, 而他們的壓縮模型在CANAO框架下最快能達到45ms,速度提升了7.8倍。他們的研究最先起始於對NLP模型的深度與模型準確率關係的探究。目前大多數預訓練NLP模型都很深,從計算層數來算的話,BERT-base有1000+層,Bert-large和MobileBERT有2000層,這會導致在移動端部署時很高的計算延遲。那麼NLP模型真的需要這麼多層數嗎?如果需要的話,要如何解決高延遲的問題呢?首先,對於層數問題,他們做了多組對比實驗。如下表所示,在擁有相同的計算量的前提下,他們分別使用了一個深且窄的網絡結構和一個淺且寬的網絡結構,並進行了準確率的對比,以此來探究模型深度與準確率的關係,這些模型是通過BERT-large蒸餾得到。通過對比實驗結果可以發現,在相同的計算量下,較深的網絡確實比較淺的網絡在準確率方面有更好的表現,從而也在一定程度說明了網絡深度對於NLP模型的必要性。他們提出了CANAO編譯器感知的神經網絡結構優化框架,其中包括:1.基於輕量級多項式的層融合技術(Lightweight Polynomial-based Layer Fusion)2.編譯器感知的神經結構搜索技術(Compiler-aware Neural Architecture Search)這是一種基於編譯器的優化技術,通過有效的合併多個計算層,來大量減少由多次存取層間結果帶來的計算延遲。他們是首個將編譯器優化信息作為反饋信息加入到神經結構搜索的循環中,來實現對網絡模型的協同優化,讓模型同時擁有高準確率和低延遲。雖然使用網絡延遲來優化網絡結構的硬體感知神經結構搜索(hardware-aware NAS) 已經被提出,但是在NAS和編譯器優化之間仍然缺少一些聯繫。例如,現有的支持硬體的NAS: MnasNet、FBNet、ProxylessNAS都採用通用的、非優化的編譯器。對於具有較淺層數的CV應用來說尚可達到較好的效果,但是對於具有數百甚至數千層的網絡,如果沒有編譯器優化的協助,則很難實現低延遲的目標。而他們提出的CANAO編譯器感知的神經網絡結構優化框架可以讓搜索出的模型滿足編譯器優化後的對計算資源的高利用率,從而在保持高準確率的前提下,實現對BERT類模型在行動裝置上的實時推斷。https://arxiv.org/abs/2009.06823在移動手機普及的今天,如何在移動端等資源受限的設備上使用 BERT 模型,是一個極具挑戰問題。而CANAO編譯器感知的神經網絡結構優化框架提供了一個有效的解決方案,它對BERT模型進行結構優化,並在編譯器優化的協助下,在移動端實現了高準確率、實時自然語言處理。王言治是美國東北大學電子與計算機工程系助理教授。他在清華電子系和南加州大學拿到本科和博士學位。他的主要研究方向是深度神經網絡的加速與安全性。他們的CoCoPIE壓縮編譯協同優化框架可以實現大多數神經網絡在移動端的實時推理。他的文章廣泛發表於各個頂會頂刊,包括機器學習方向AAAI,CVPR,ICML,ICCV,ICLR,IJCAI,ECCV等,電路與設計自動化方向DAC,ICCAD,ISSCC,FPGA等,計算機系統方面ASPLOS,ISCA,MICRO,HPCA,CCS,VLDB,PLDI,ICS,PACT等。他的文章引用超過7200次,得過Google,Mathworks, Intel等研究獎項,得過4項最佳論文獎,另外10次提名,多次設計競賽獎項。他的研究工作被媒體廣泛報導和引用超過400次。他的多位學生已經在各個學校擔任教職,包括康乃狄克大學,克萊姆森大學等,工作單位包括谷歌、臉書、騰訊、滴滴(超新星員工)。


更多精彩推薦

☞程式設計師刪庫被判 6 年,公司損失近億,雲原生時代如何打造安全防線?

☞8次迭代5大升級,曠視天元1.0預覽版正式發布

☞曾是谷歌程式設計師,拋下百萬年薪創業,4 年成就 7 億用戶,今身價百億!

☞首次在手機端不犧牲準確率實現BERT實時推理,比TensorFlow-Lite快近8倍,每幀只需45ms

☞Service Mesh 在超大規模場景下的落地挑戰

☞比特幣背後的技術,是否已成為科技領軍代表?

相關焦點

  • 詳解Tensorflow模型量化(Quantization)原理及其實現方法
    因此,為了解決此類問題模型量化應運而生,本篇我們將探討模型量化的概念原理、優缺點及tensorflow模型量化的實現方法。五、tensorflow訓練後量化(Post-training quantization)介紹及其實現方法tensorflow訓練後量化是針對已訓練好的模型來說的,針對大部分我們已訓練未做任何處理的模型來說均可用此方法進行模型量化,而tensorflow提供了一整套完整的模型量化工具,如TensorFlow
  • TensorFlow Lite發布重大更新!支持移動GPU、推斷速度提升4-6倍
    隨著 TensorFlow Lite GPU 後端開發者預覽版的發布,將能夠利用移動 GPU 來選擇模型訓練 (如下所示),對於不支持的部分,將自動使用 CPU 進行推理。新的後端利用了:目前 TensorFlow Lite 仍使用 CPU 浮點推斷進行人臉輪廓檢測 (非人臉識別)。
  • 如何基於Flutter和Paddle Lite實現實時目標檢測
    在端側部署方面,Paddle Lite是飛槳產品棧中用於端側高性能輕量化AI應用部署的推理引擎,給了移動端等場景更多可能。這款引擎允許我們在很多硬體平臺上實現輕量化的高效預測,進行一次預測耗時較短,也不需要太多的計算資源。那麼如果我們想開發一款既能在本地進行預測又能在Android和iOS上面有一致體驗的App的話,Flutter無疑是一個好選擇。
  • 模型秒變API只需一行代碼,支持TensorFlow等框架
    positive$ cortex get classifier --watchstatus up-to-date available requested last update avg latencylive 1 1 1 8s 123msclass countpositive
  • 谷歌發布TF新工具:計算速度提升2倍,減少無效參數
    實時目標檢測的延遲也更低了:這是谷歌特意為行動裝置和Web端開發的一系列新工具,可以在幾乎不影響AI模型推理準確性的同時,「修剪」模型大小,以提升模型推理速度。如果能在不影響推理結果的同時,將矩陣中的部分參數設置成0,就能極大地加快矩陣運算速度,縮短推理時間。
  • 谷歌更新TensorFlow目標檢測API
    去年穀歌發布了TensorFlow目標檢測API[7],從那以後陸續添加了很多新特性,比如Neural Architecture Search[1]的模型學習
  • 中文視頻教學 | 在 iOS 中使用 TensorFlow Lite
    比如:我們看到它這部手機給判斷成了 iPod。嗯,不錯,它正確認出了這個馬克杯。為什麼會出現這樣認錯物品的情況呢?回想一下我們是怎樣得到這個模型的?這個模型是在一些現實數據的基礎的上訓練出來的。所以如果給它看的圖片裡如果沒有這樣的手機,那麼它怎麼會認識呢?自然就只能認作是相似的 iPod 啦(可能在樣本中出現過幾次)。
  • tensorflow(8)將h5文件轉化為pb文件並利用tensorflow/serving實現模型部署
    在文章Keras入門(七)使用Flask+Keras-bert構建模型預測服務,我們也介紹了如何使用Flask和example.h5文件來實現模型預測的HTTP服務。  本文將會介紹如何將h5文件轉化為pb文件並利用tensorflow/serving實現模型部署。
  • 教程 | 如何使用Docker、TensorFlow目標檢測API和OpenCV實現實時目標檢測和視頻處理
    以下是我安裝 TensorFlow 目標檢測的方法(按照官方安裝指南進行):# Install tensorFlowRUN pip install -U tensorflow# Install tensorflow models object detectionRUN git clone https://github.com/tensorflow/models
  • 聲網:基於 TensorFlow 在實時音視頻中實現圖像識別
    近兩年來,Python 在眾多程式語言中的熱度一直穩居前五,熱門程度可見一斑。Python 擁有很活躍的社區和豐富的第三方庫,Web 框架、爬蟲框架、數據分析框架、機器學習框架等,開發者無需重複造輪子,可以用 Python 進行 Web 編程、網絡編程,開發多媒體應用,進行數據分析,或實現圖像識別等應用。其中圖像識別是最熱門的應用場景之一,也是與實時音視頻契合度最高的應用場景之一。
  • 使用 Cloud TPU 在 30 分鐘內訓練並部署實時移動物體探測器
    整個過程 - 基於 Android 設備從訓練到推理 - 需要 30 分鐘,Google Cloud 的成本不到5美元。當你完成後,你將擁有一個 Android 應用程式(我們即將推出 iOS 相關教程),可以對狗和貓的品種進行實時檢測,並且此App佔用手機上的空間不超過 12Mb。
  • 利用 TensorRT 實現 TensorFlow 低延遲推理
    圖 2:僅在 TensorFlow 中執行推理,以及在 TensorFlow-TensorRT 中使用轉換後的 SavedModel 執行推理時的工作流圖圖 2 顯示了原生 TensorFlow 中的標準推理工作流,並與 TF-TRT 工作流進行了對比。SavedModel 格式包含共享或部署經過訓練的模型所需的所有信息。
  • TensorFlow Lite 深度解析 | 中文教學視頻
    大家如果想要更好掌握 TensorFlow Lite 的技術細節,一定要閱讀以下文件:lite/context.hlite/model.hlite/interpreter.hlite/kernels/register.h希望我們的分享能讓廣大開發者們對 TensorFlow Lite 的代碼有一個初步認識,期待看到大家精彩的作品
  • 【端側框架介紹】(十二)Neuropilot
    前言Neuropilot是MTK(MediaTek)在tflite的基礎上針對自家平臺定製的移動端推理引擎, 支持CPU/GPU/APU推理。是MTK特有的,實測兩種方式推理速度差不多,在CPU超頻的情況下MTK Neuron會稍微快2、3ms, 但使用Android NNAPI這種方式配置要簡單一些,各有優劣,根據實際情況選擇。
  • 使用樹莓派RP2040進行端到端tinyML音頻分類
    https://www.tensorflow.org/responsible_ai數據擴充數據擴充是一組用於增加數據集大小的技術。這是通過稍微修改數據集中的樣本或創建合成數據來實現的。在這種情況下,我們使用音頻,我們將創建一些函數來增強不同的樣本。我們將使用三種技術:向音頻樣本添加白噪聲。為音頻添加隨機靜音。
  • 在NVIDIA Drive PX上利用TensorRT 3 進行快速INT8推理
    如果我直接使用Caffe和cuDNN在其中一個 NVIDIA DRIVE PX AutoChauffeur  GPU (Pascal)上運行推理,這個網絡可以實現大約242毫秒的延遲和大約4張圖像/秒的吞吐量。以每小時35英裡的速度,242毫秒相當於大約12英尺的駕駛距離。這種水平的性能不足以為自動駕駛做出及時的決策。讓我們看看如何做得更好。
  • tensorflow(7)利用tensorflow/serving實現BERT模型部署
    本文將會詳細介紹如何使用tensorflow/serving來實現BERT模型的部署及預測。  我們以Github上的bertNER為例,該項目使用BERT+Bi-LSTM+CRF結構實現中文序列標註,對BERT進行微調,並且提供了模型訓練、模型預測的辦法。
  • NCNN+INT8+YOLOV4量化模型和實時推理
    之前對tensorflow框架一直不感冒,很大一部分源於tensorflow每更新一次版本,就殺死一片上一版本的接口,可能上了2.0以後這種情況好了很多,不過依舊訓練是torch用的更多)ncnn int8量化工具(ncnn2table)新特性支持 kl aciq easyquant 三種量化策略支持RGB/
  • 在 Android 上使用 TensorFlow Lite
    註:TensorFlow Lite 連結https://www.tensorflow.org/mobile/tflite/目前,TensorFlow Lite 為 Android 和 iOS 設備提供了 C ++ API,並且為 Android 開發人員提供了 Java Wrapper。