精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在OpenVINO 開發套件中“無縫”部署PaddlePaddle BERT模型

英特爾物聯網 ? 來源:英特爾物聯網 ? 作者:英特爾物聯網 ? 2022-06-24 11:05 ? 次閱讀

任務背景

01

情感分析

(Sentiment Analysis)

情感分析旨在對帶有情感色彩的主觀性文本進行分析、處理、歸納和推理,其廣泛應用于消費決策、輿情分析、個性化推薦等領域,具有很高的商業價值。例如:食行生鮮自動生成菜品評論標簽輔助用戶購買,并指導運營采購部門調整選品和促銷策略;房天下向購房者和開發商直觀展示樓盤的用戶口碑情況,并對好評樓盤置頂推薦;國美搭建服務智能化評分系統,客服運營成本減少40%,負面反饋處理率100%。

02

自然語言處理(NLP)技術

自然語言處理(英語:Natural Language Process,簡稱NLP)是計算機科學、信息工程以及人工智能的子領域,專注于人機語言交互,探討如何處理和運用自然語言。最近幾年,隨著深度學習以及相關技術的發展,NLP領域的研究取得一個又一個突破,研究者設計各種模型和方法,來解決NLP的各類問題,其中比較常見包括LSTM, BERT, GRU, Transformer, GPT等算法模型。

方案簡介

本方案采用PaddleNLP工具套件進行模型訓練,并基于OpenVINO 開發套件實現在Intel平臺上的高效能部署。本文將主要分享如何在OpenVINO 開發套件中“無縫”部署PaddlePaddle BERT模型,并對輸出結果做驗證。

01

PaddleNLP

PaddleNLP是一款簡單易用且功能強大的自然語言處理開發庫。聚合業界優質預訓練模型并提供開箱即用的開發體驗,覆蓋NLP多場景的模型庫搭配產業實踐范例可滿足開發者靈活定制的需求。

02

OpenVINO 開發套件

OpenVINO 開發套件是Intel平臺原生的深度學習推理框架,自2018年推出以來,Intel已經幫助數十萬開發者大幅提升了AI推理性能,并將其應用從邊緣計算擴展到企業和客戶端。英特爾于2022年巴塞羅那世界移動通信大會前夕,推出了英特爾 發行版OpenVINO 開發套件的全新版本。其中的新功能主要根據開發者過去三年半的反饋而開發,包括更多的深度學習模型選擇、更多的設備可移植性選擇以及更高的推理性能和更少的代碼更改。為了更好地對Paddle模型進行支持,新版OpenVINO 開發套件分別做了一下升級:

■直接支持Paddle格式模型

目前OpenVINO 開發套件2022.1發行版中已完成對PaddlePaddle模型的直接支持,OpenVINO 開發套件的Model Optimizer工具已經可以直接完成對Paddle模型的離線轉化,同時runtime api接口也可以直接讀取加載Paddle模型到指定的硬件設備,省去了離線轉換的過程,大大提升了Paddle開發者在Intel平臺上部署的效率。經過性能和準確性驗證,在OpenVINO 開發套件2022.1發行版中,會有13個模型涵蓋5大應用場景的Paddle模型將被直接支持,其中不乏像PPYolo和PPOCR這樣非常受開發者歡迎的網絡

75e513f4-f2d4-11ec-ba43-dac502259ad0.png

圖:OpenVINO 開發套件的MO和IE可以直接支持Paddle模型輸入

■ 全面引入動態輸入支持

為了適配更廣泛的模型種類,OpenVINO 2022.1版本的CPU Plugin已經支持了動態input shape,讓開發者以更便捷的方式部署類似NLP或者OCR這樣的網絡,OpenVINO 開發套件用戶可以在不需要對模型做reshape的前提下,任意送入不同shape的圖片或者向量作為輸入數據,OpenVINO 開發套件會自動在runtime過程中對模型結構與內存空間進行動態調整,進一步優化dynamic shape的推理性能。

76466b0e-f2d4-11ec-ba43-dac502259ad0.png

圖:在NLP中的Dynamic Input Shape

詳細介紹可以參考:https://docs.openvino.ai/latest/openvino_docs_OV_UG_DynamicShapes.html

BERT原理簡介

01

BERT結構介紹

BERT (Bidirectional Encoder Representations from Transformers)以Transformer 編碼器為網絡基本組件,使用掩碼語言模型(Masked Language Model)和鄰接句子預測(Next Sentence Prediction)兩個任務在大規模無標注文本語料上進行預訓練(pre-train),得到融合了雙向內容的通用語義表示模型。以預訓練產生的通用語義表示模型為基礎,結合任務適配的簡單輸出層,微調(fine-tune)后即可應用到下游的NLP任務,效果通常也較直接在下游的任務上訓練的模型更優。此前BERT即在GLUE評測任務上取得了SOTA的結果。

76621bec-f2d4-11ec-ba43-dac502259ad0.jpg

圖:BERT的2階段訓練任務

不難發現,其模型結構是Transformer的Encoder層,只需要將特定任務的輸入,輸出插入到Bert中,利用Transformer強大的注意力機制就可以模擬很多下游任務。(句子對關系判斷,單文本主題分類,問答任務(QA),單句貼標簽(命名實體識別)),BERT的訓練過程可以分成預訓練和微調兩部分組成。

02

預訓練任務(Pre-training)

BERT是一個多任務模型,它的任務是由兩個自監督任務組成,即MLM和NSP。

■Task #1:Masked Language Model

所謂MLM是指在訓練的時候隨即從輸入預料上mask掉一些單詞,然后通過的上下文預測該單詞,該任務非常像我們在中學時期經常做的完形填空。正如傳統的語言模型算法和RNN匹配那樣,MLM的這個性質和Transformer的結構是非常匹配的。

■Task #2: Next Sentence Prediction

Next Sentence Prediction(NSP)的任務是判斷句子B是否是句子A的下文。如果是的話輸出’IsNext‘,否則輸出’NotNext‘。訓練數據的生成方式是從平行語料中隨機抽取的連續兩句話,其中50%保留抽取的兩句話,它們符合IsNext關系,另外50%的第二句話是隨機從預料中提取的,它們的關系是NotNext的。

微調任務 (Fine-tuning)

在海量單預料上訓練完BERT之后,便可以將其應用到NLP的各個任務中了。以下展示了BERT在11個不同任務中的模型,它們只需要在BERT的基礎上再添加一個輸出層便可以完成對特定任務的微調。這些任務類似于我們做過的文科試卷,其中有選擇題,簡答題等等。微調的任務包括:

■基于句子對的分類任務

■基于單個句子的分類任務

■問答任務

■命名實體識別

7686f08e-f2d4-11ec-ba43-dac502259ad0.png

圖:BERT的4大下游微調任務

訓練與部署流程

本示例包含PaddleNLP訓練和OpenVINO 開發套件部署兩部分組成。

01

環境安裝

打開命令行終端,分別輸入以下命令,完成本地環境安裝和配置。

1.1安裝PaddlePaddle (AI studio環境中可以略過)

如果是CPU訓練環境需要執行以下命令進行安裝:

76c7e60c-f2d4-11ec-ba43-dac502259ad0.png

如果是GPU訓練環境需要執行以下命令進行安裝:

76f37ad8-f2d4-11ec-ba43-dac502259ad0.png

1.2安裝PaddleNLP與相關依賴

下載PaddleNLP:

77291a6c-f2d4-11ec-ba43-dac502259ad0.png

安裝PaddleNLP相關依賴:

775bcda4-f2d4-11ec-ba43-dac502259ad0.png

1.3安裝OpenVINO 開發套件

7786b6d6-f2d4-11ec-ba43-dac502259ad0.png

02

訓練部分

訓練部分是BERT在 Paddle 2.0上的開源實現,可以分為數據準備,BERT Encoder預訓練,SST2情感分類任務微調以及推理模型導出這四個步驟。

可以參考Paddle官方的案例說明,對以下過程做了簡要匯總,地址:

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/bert

77b37158-f2d4-11ec-ba43-dac502259ad0.png

圖:Paddle BERT模型訓練流程

除此之外,我們也可以借助Paddle AI studio直接運行訓練腳本(無腦點擊運行就可以了: )),鏈接如下:

https://aistudio.baidu.com/aistudio/projectdetail/4193790?contributionType=1

2.1步驟一:數據準備(可略過)

PaddleNLP中BERT任務下自帶的create_pretraining_data.py 是創建預訓練程序所需數據的腳本。其以文本文件(使用換行符換行和空白符分隔,data目錄下提供了部分示例數據)為輸入,經由BERT tokenizer進行tokenize后再做生成sentence pair正負樣本、掩碼token等處理,最后輸出hdf5格式的數據文件。使用方式如下,在命令行輸入:

77cd7d78-f2d4-11ec-ba43-dac502259ad0.png

2.2步驟二:GPU訓練(可略過)

使用paddle.distributed.launch配置項運行run_pretrain.py訓練腳本,可以在多卡GPU環境下啟動BERT預訓練任務。命令行指令如下:

77fda782-f2d4-11ec-ba43-dac502259ad0.png

■model_type指示了模型類型,使用BERT模型時設置為bert即可。

■model_name_or_path指示了某種特定配置的模型,對應有其預訓練模型和預訓練時使用的 tokenizer。若模型相關內容保存在本地,這里也可以提供相應目錄地址。

■input_dir表示輸入數據的目錄,該目錄下所有文件名中包含training的文件將被作為訓練數據。output_dir 表示模型的保存目錄。

7826aef2-f2d4-11ec-ba43-dac502259ad0.png

2.3步驟三:模型Fine-tunning

如果自己沒有準備訓練數據集的話,也可以跳過前面的步驟,直接使用huggingface提供的預訓練模型進行Fine-tuning,以GLUE中的SST-2任務為例,該腳本會自動下載SST-2任務中所需要的英文數據集,啟動Fine-tuning的方式如下:

78484904-f2d4-11ec-ba43-dac502259ad0.png

■model_name_or_path指示了某種特定配置的模型,對應有其預訓練模型和預訓練時使用的 tokenizer。若模型相關內容保存在本地,這里也可以提供相應目錄地址。注:bert-base-uncased等對應使用的預訓練模型轉自huggingface/transformers

可以看到啟動Fine-tuning任務以后,腳本會自動下載bert-base-uncased預訓練模型,以及用于Fine-tuning的bert-base-uncased-vocab.txt數據集。

786dcac6-f2d4-11ec-ba43-dac502259ad0.png

當訓練任務到達預先設定的step輪數以后,便會停止訓練,并且將.pdparam格式的模型權重保存在tmp目錄下。

789fbba8-f2d4-11ec-ba43-dac502259ad0.png

2.4步驟四:模型導出

在Fine-tuning完成后,我們可以使用如下方式導出希望用來預測的Paddle靜態模型,并保存在infer_model路徑下:

78d13386-f2d4-11ec-ba43-dac502259ad0.png

導出后的模型文件包含以下內容時,推理時需要保證這三個文件在同一個目錄下:

model.pdmodel, model.pdiparams.info, model.pdiparams

78ff5ae0-f2d4-11ec-ba43-dac502259ad0.png

圖:導出后的Paddle BERT靜態模型文件

03

部署部分

該示例將基于OpenVINO 開發套件進行Paddle的靜態模型部署,需要開發者提前準備好用于做部署的Intel平臺硬件,可以是個人電腦,也可以是云服務器虛機。整體流程可以分為以下幾個步驟:

791b02d6-f2d4-11ec-ba43-dac502259ad0.png

圖:BERT模型部署流程

對于情感分析任務,BERT網絡的識別流程可以分成以下幾個步驟:

■ 輸入語句文本,并轉為相應的Token ID

■ 為每一行Token ID添加Padding,使其保持長度一致

■ Token ID作為輸入數據送入BERT模型進行推理 (模型內流程邏輯參考下圖),通過Embedding Layer將一個詞映射成為固定維度的稠密向量,降維后的向量會再通過Encoder提取Self-attentions后的向量間的關系特征,最后經過Classifier對情感分類任務做出判斷。

■ 獲取模型結果數據,通過后處理函數,計算分類標簽與每一類標簽的置信度

7956ace6-f2d4-11ec-ba43-dac502259ad0.png

圖:BERT for SST2模型內部邏輯

BERT for SST2的輸入的編碼向量(長度不固定)是2個嵌入特征的單位和,這2個詞嵌入特征是:

■ input_ids:輸入文本被轉化為token后的單個字的id;

■ segment_ids:就是句子級別(上下句)的標簽,用于區分兩個句子,例如B是否是A的下文(對話場景,問答場景等)。由于在情感分析任務中沒有下句,所以這里segment_ids為全部為0的向量。

3.1步驟一:文本Token表示

定義數據轉換模塊,將原始的輸入語句轉化為input_ids與segment_ids,作為輸入數據。這邊我們將會使用PaddleNLP自帶的tokenizer()方法進行轉換。

797eac14-f2d4-11ec-ba43-dac502259ad0.png

3.2步驟二:Padding

需要保證input_ids與segment_ids數組在axis0方向的長度一致,由于這邊input_ids與segment_ids均為一維數組,所以也可以不進行該操作。

79a63f86-f2d4-11ec-ba43-dac502259ad0.png

3.3步驟三:模型推理

部署代碼里最核心的部分就是要定義基于OpenVINO 開發套件的預測器,這里使用CPU作為模型的部署平臺,可以看到通過read_model這個函數接口我們可以直接讀取原始的.pdmodel格式模型,省去了之前繁雜的離線轉化過程。此外我們需要通過compile_model這個函數講讀取后的模型在指定的硬件平臺進行加載和編譯。最后創建infer_request推理請求進行推理任務部署。

79cb8e26-f2d4-11ec-ba43-dac502259ad0.png

由于輸入語句的長度往往不一致,這也導致編碼后的向量長度也不一致,這里OpenVINO 開發套件CPU Plugin的支持上已經全面引入了Dynamic Shape功能,無需再手動調整輸入數據的長度,OpenVINO 開發套件會在runtime過程中自動匹配并動態申請一定的內存空間進行推理,優化性能表現。

79eb8442-f2d4-11ec-ba43-dac502259ad0.png

由于新版OpenVINO 開發套件已經全面支持Intel 12代酷睿處理器,為了取得更佳的推理性能,我們建議使用最新的硬件平臺進行測試。

3.4步驟四:結果后處理

此處得到的結果數據為兩種不同評價的可能性,我們需要將其通過softmax函數還原成百分比形式,并且找到可能性最大的那個評價序號所對應的標簽(Positive,Negative)。

7a09420c-f2d4-11ec-ba43-dac502259ad0.png

最后我們找一組測試語句作為輸入數據,將其封裝成List以后,送入到識別器中進行識別,可以發現結果都是符合我們的先驗預期的。

7a32cd98-f2d4-11ec-ba43-dac502259ad0.png

該示例程序可以可以準確按SST2情感二分類任務要求,輸出每段輸入語句的分類情感標簽,并獲得每種情感對應的參考置信度。

7a627db8-f2d4-11ec-ba43-dac502259ad0.png

小結

作為發布至今近4年以來最大的一次更新,OpenVINO 2022.1版本為了更好地支持NLP與語音相關的模型,在CPU plugin中已全面支持了動態input shape,并通過與百度PaddlePaddle框架的深度集成,用更便捷的API接口,更豐富的模型支持,提升雙方開發者在模型部署側的使用體驗,真正實現對PaddleNLP模型的“無縫”轉化與部署。

通過本次的全流程示例,我們看到OpenVINO 開發套件對Paddle BERT模型已經做到了很好的適配,從而加速在Intel平臺上的推理。以下github repository中已為大家提前準備好了OpenVINO 開發套件部署的參考實現與.pdmodel格式的BERT預訓練模型。

https://github.com/OpenVINO-dev-contest/openvino_notebooks/tree/PaddleBert/notebooks/005-hello-paddle-nlp

除此之外,為了方便大家了解并快速掌握OpenVINO 開發套件的使用,我們還提供了一系列開源的Jupyter notebook demo。運行這些notebook,就能快速了解在不同場景下如何利用OpenVINO 開發套件實現一系列、包括OCR在內的、計算機視覺及自然語言處理任務。OpenVINO notebooks的資源可以在Github這里下載安裝:

https://github.com/openvinotoolkit/openvino_notebooks

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 自然語言處理

    關注

    1

    文章

    614

    瀏覽量

    13511
  • nlp
    nlp
    +關注

    關注

    1

    文章

    487

    瀏覽量

    22015

原文標題:基于OpenVINO? “無縫”部署 PaddleNLP 模型 | 開發者實戰

文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用英特爾哪吒開發套件部署YOLOv5完成透明物體目標檢測

    英特爾的哪吒(Nezha)開發套件是一款專為邊緣AI和物聯網應用設計的高性能計算平臺,搭載了英特爾 N97處理器、內置英特爾 UHD Graphics GPU,并提供高達8GB LPDDR5內存
    的頭像 發表于 11-25 17:15 ?112次閱讀
    使用英特爾哪吒<b class='flag-5'>開發套件</b><b class='flag-5'>部署</b>YOLOv5完成透明物體目標檢測

    基于哪吒開發部署YOLOv8模型

    2024英特爾 “走近開發者”互動活動-哪吒開發套件免費試 用 AI 創新計劃:哪吒開發板是專為支持入門級邊緣 AI 應用程序和設備而設計,能夠滿足人工智能學習、開發、實訓等應用場景。
    的頭像 發表于 11-15 14:13 ?165次閱讀
    基于哪吒<b class='flag-5'>開發</b>板<b class='flag-5'>部署</b>YOLOv8<b class='flag-5'>模型</b>

    使用OpenVINO Model Server在哪吒開發板上部署模型

    OpenVINO Model Server(OVMS)是一個高性能的模型部署系統,使用C++實現,并在Intel架構上的部署進行了優化,使用Open
    的頭像 發表于 11-01 14:19 ?196次閱讀
    使用<b class='flag-5'>OpenVINO</b> Model Server在哪吒<b class='flag-5'>開發</b>板上<b class='flag-5'>部署</b><b class='flag-5'>模型</b>

    AM243x LaunchPad?開發套件用戶指南

    電子發燒友網站提供《AM243x LaunchPad?開發套件用戶指南.pdf》資料免費下載
    發表于 10-30 09:58 ?0次下載
    AM243x LaunchPad?<b class='flag-5'>開發套件</b>用戶指南

    使用OpenVINO C++在哪吒開發板上推理Transformer模型

    OpenVINO 是一個開源工具套件,用于對深度學習模型進行優化并在云端、邊緣進行部署。它能在諸如生成式人工智能、視頻、音頻以及語言等各類應用場景中加快深度學習推理的速度,且支持來自
    的頭像 發表于 10-12 09:55 ?284次閱讀
    使用<b class='flag-5'>OpenVINO</b> C++在哪吒<b class='flag-5'>開發</b>板上推理Transformer<b class='flag-5'>模型</b>

    TPS63802HDKEVM-硬件開發套件

    電子發燒友網站提供《TPS63802HDKEVM-硬件開發套件.pdf》資料免費下載
    發表于 09-04 10:08 ?0次下載
    TPS63802HDKEVM-硬件<b class='flag-5'>開發套件</b>

    三相全橋RCP開發套件

    實時軟件監控仿真結果。其中算法模型程序,可以簡易地通過搭積木的方式使用Simulink搭建。圖形化設計使程序語言更直觀更易理解,可使初學者快速掌握基本知識框架。三相全橋開發套件通過CBox轉接調理板
    發表于 06-11 13:50

    簡單兩步使用OpenVINO?搞定Qwen2的量化與部署任務

    英特爾 OpenVINO? 工具套件是一款開源 AI 推理優化部署的工具套件,可幫助開發人員和企業加速生成式人工智能 (AIGC)、大語言
    的頭像 發表于 04-26 09:39 ?1580次閱讀
    簡單兩步使用<b class='flag-5'>OpenVINO</b>?搞定Qwen2的量化與<b class='flag-5'>部署</b>任務

    簡單三步使用OpenVINO?搞定ChatGLM3的本地部署

    英特爾 OpenVINO? 工具套件是一款開源 AI 推理優化部署的工具套件,可幫助開發人員和企業加速生成式人工智能 (AIGC)、大語言
    的頭像 發表于 04-03 18:18 ?2008次閱讀
    簡單三步使用<b class='flag-5'>OpenVINO</b>?搞定ChatGLM3的本地<b class='flag-5'>部署</b>

    【轉載】英特爾開發套件“哪吒”快速部署YoloV8 on Java | 開發者實戰

    部署到生產系統。通過簡化的開發工作流程,OpenVINO可賦能開發者在現實世界中部署高性能應用
    的頭像 發表于 03-23 08:05 ?486次閱讀
    【轉載】英特爾<b class='flag-5'>開發套件</b>“哪吒”快速<b class='flag-5'>部署</b>YoloV8 on Java | <b class='flag-5'>開發</b>者實戰

    基于英特爾哪吒開發套件平臺來快速部署OpenVINO Java實戰

    OpenVINO 工具套件基于OneAPI開發,可以加快高性能計算機視覺和深度學習應用開發速度的工具套件,適用于從邊緣到云的各種英特爾計算平
    的頭像 發表于 03-21 18:24 ?1425次閱讀
    基于英特爾哪吒<b class='flag-5'>開發</b>者<b class='flag-5'>套件</b>平臺來快速<b class='flag-5'>部署</b><b class='flag-5'>OpenVINO</b> Java實戰

    何在MacOS上編譯OpenVINO C++項目呢?

    英特爾公司發行的模型部署工具 OpenVINO 模型部署套件,可以實現在不同系統環境下運行,且發
    的頭像 發表于 01-11 18:07 ?855次閱讀
    如<b class='flag-5'>何在</b>MacOS上編譯<b class='flag-5'>OpenVINO</b> C++項目呢?

    OpenVINO? 賦能千元級『哪吒』AI開發套件大語言模型 | 開發者實戰

    ,大多數高性能模型通常需要昂貴的計算資源,使得它們的應用受限于有限的環境。本文將探討在OpenVINO的賦能下,如何在不足千元的AI開發板上部署
    的頭像 發表于 01-06 08:05 ?1467次閱讀
    <b class='flag-5'>OpenVINO</b>? 賦能千元級『哪吒』AI<b class='flag-5'>開發套件</b>大語言<b class='flag-5'>模型</b> | <b class='flag-5'>開發</b>者實戰

    如何快速下載OpenVINO Notebooks的AI大模型

    OpenVINO Notebooks是Jupyter Notebook形式的OpenVINO范例程序大集合,方便開發者快速學習并掌握OpenVINO推理程序,并通過Copy&Paste
    的頭像 發表于 12-12 14:40 ?1081次閱讀
    如何快速下載<b class='flag-5'>OpenVINO</b> Notebooks<b class='flag-5'>中</b>的AI大<b class='flag-5'>模型</b>

    如何解決模型部署時出現算子不匹配問題

    結果部署到生產系統。通過簡化的開發工作流程,OpenVINO 可賦能開發者在現實世界中部署高性
    的頭像 發表于 12-08 15:30 ?991次閱讀
    如何解決<b class='flag-5'>模型</b><b class='flag-5'>部署</b>時出現算子不匹配問題