在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    625

    瀏覽量

    13935
  • nlp
    nlp
    +關注

    關注

    1

    文章

    490

    瀏覽量

    22425

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

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    SC171開發套件V3 技術資料

    與使用(SC171開發套件V3) https://bbs.elecfans.com/jishu_2485280_1_1.html AI端側部署開發(SC171開發套件V3) https
    發表于 04-17 11:03

    AI端側部署案例(SC171開發套件V3)

    AI端側部署案例(SC171開發套件V3) 序列 課程名稱 視頻課程時長 視頻課程鏈接 課件鏈接 工程源碼 1 初學者入門手寫數字識別案例 20分02秒 https://t.elecfans.com
    發表于 04-16 18:33

    AI端側部署開發(SC171開發套件V3)

    AI端側部署開發(SC171開發套件V3) 序列 課程名稱 視頻課程時長 視頻課程鏈接 課件鏈接 工程源碼 1 Fibo AI Stack模型轉化指南------Docker Desk
    發表于 04-16 18:30

    何在Ollama中使用OpenVINO后端

    Ollama 和 OpenVINO 的結合為大型語言模型(LLM)的管理和推理提供了強大的雙引擎驅動。Ollama 提供了極簡的模型管理工具鏈,而 OpenVINO 則通過 Intel
    的頭像 發表于 04-14 10:22 ?211次閱讀

    首創開源架構,天璣AI開發套件讓端側AI模型接入得心應手

    應用開發不用“等平臺”,徹底釋放開發效率和模型接入自由度。 自DeepSeek橫空出世以來,這種更適合端側部署,回答效率更高效的訓練模式快速引爆了AI行業,主流大
    發表于 04-13 19:52

    如何部署OpenVINO?工具套件應用程序?

    編寫代碼并測試 OpenVINO? 工具套件應用程序后,必須將應用程序安裝或部署到生產環境的目標設備。 OpenVINO?
    發表于 03-06 08:23

    構建開源OpenVINO?工具套件后,模型優化器位于何處呢?

    構建開源OpenVINO?工具套件后,模型優化器位于何處?
    發表于 03-06 08:18

    OpenVINO?工具套件的深度學習工作臺中無法導出INT8模型怎么解決?

    無法在 OpenVINO? 工具套件的深度學習 (DL) 工作臺中導出 INT8 模型
    發表于 03-06 07:54

    使用工具套件2020.2從ncappzoo運行模型和演示OpenVINO?報錯怎么解決?

    使用工具套件 2020.2 從 ncappzoo 運行模型和演示OpenVINO?報錯
    發表于 03-05 10:22

    OpenVINO?工具套件插件對YOLOv5s模型和scatterUpate層的支持范圍是什么?

    OpenVINO?工具套件插件對YOLOv5s模型和scatterUpate層的支持范圍是什么?
    發表于 03-05 10:16

    如何下載 OpenVINO? 工具套件

    需要下載用于開發工作的 OpenVINO? 工具套件
    發表于 03-05 06:49

    C#集成OpenVINO?:簡化AI模型部署

    在開源測控、機器視覺、數采與分析三大領域中,如何快速將AI模型集成到應用程序, 實現AI賦能和應用增值? 最容易的方式是:在C#,使用 OpenVINO工具
    的頭像 發表于 02-17 10:03 ?1575次閱讀
    C#集成<b class='flag-5'>OpenVINO</b>?:簡化AI<b class='flag-5'>模型</b><b class='flag-5'>部署</b>

    C#中使用OpenVINO?:輕松集成AI模型

    與分析三大領域中,如何快速將AI模型集成到應用程序,實現AI賦能和應用增值?最容易的方式是:在C#,使用OpenVINO?工具套件集成A
    的頭像 發表于 02-07 14:05 ?659次閱讀
    C#中使用<b class='flag-5'>OpenVINO</b>?:輕松集成AI<b class='flag-5'>模型</b>!

    基于哪吒開發部署YOLOv8模型

    2024英特爾 “走近開發者”互動活動-哪吒開發套件免費試 用 AI 創新計劃:哪吒開發板是專為支持入門級邊緣 AI 應用程序和設備而設計,能夠滿足人工智能學習、開發、實訓等應用場景。
    的頭像 發表于 11-15 14:13 ?866次閱讀
    基于哪吒<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 ?583次閱讀
    使用<b class='flag-5'>OpenVINO</b> Model Server在哪吒<b class='flag-5'>開發</b>板上<b class='flag-5'>部署</b><b class='flag-5'>模型</b>
    主站蜘蛛池模板: 五月天丁香婷 | 2017亚洲男人天堂 | 99综合在线| 亚洲综合免费 | 你懂的网址在线 | 精品少妇一区二区三区视频 | 国产精品女丝袜白丝袜 | 亚洲色图视频在线 | 天天天天干 | 女生张开腿让男人桶 | 成年人色网站 | 狠狠干免费视频 | 伊人不卡久久大香线蕉综合影院 | 黄色大秀 | 日本免费福利视频 | 久久婷婷人人澡人人爱91 | 波多野结衣在线观看一区二区 | 久久久香蕉视频 | 色婷婷综合和线在线 | 黄色国产在线视频 | 变态重口极致另类在线 | 女人被免费网站视频在线 | 一个人看aaaa免费中文 | 在线天堂中文在线资源网 | 亚洲国产一区二区三区在线观看 | 日日爱网站 | 在线看片福利 | 色婷五月 | 日本高清视频色 | 欧美特黄视频在线观看 | 一卡二卡卡四卡无人区中文 | 潘金莲国产三级视频在线 | 美女网站视频色 | 五月婷婷综合激情 | 玖玖爱在线播放 | 快乐你懂的在线视频免费观看 | 久青草国产高清在线视频 | 国内自拍 亚洲系列 欧美系列 | 不卡视频免费在线观看 | 97超频国产在线公开免费视频 | h视频在线免费 |