0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

沒有“中間商賺差價(jià)”, OpenVINO? 直接支持 PyTorch 模型對(duì)象

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 2023-06-27 16:39 ? 次閱讀

沒有“中間商賺差價(jià)”,OpenVINO直接支持 PyTorch 模型對(duì)象

背景

作為最熱門的開源深度學(xué)習(xí)框架之一,PyTorch 的易用性和靈活性使其深受學(xué)術(shù)和研究界的喜愛。之前 OpenVINO 對(duì)于 PyTorch 模型的支持也僅僅停留在 ONNX 過渡階段,需要通過將 PyTorch 動(dòng)態(tài)模型導(dǎo)出為 ONNX 靜態(tài)格式后,才可以直接被 OpenVINO runtime 離線加載,雖然 PyTorch 也提供了官方的 torch.onnx.export 接口幫助開發(fā)者導(dǎo)出 ONNX 模型,但畢竟有這么一個(gè)“中間商”在那里,其中很多額外的配置工作也為 OpenVINO 開發(fā)者帶來了不便,諸如動(dòng)態(tài)/靜態(tài)輸入設(shè)定,以及 opset 版本設(shè)定等。

一、OpenVINO 直接支持 PyTorch 模型對(duì)象

bdd45d18-14c1-11ee-962d-dac502259ad0.png

隨著 OpenVINO 2023.0 版本的發(fā)布,OpenVINO 工具庫(kù)中預(yù)置了全新的 PyTorch 前端,為開發(fā)者們提供了一條全新的 PyTorch 模型支持路徑,帶來更友好的用戶體驗(yàn)——OpenVINO 的 mo 工具可以直接將 PyTorch 模型對(duì)象轉(zhuǎn)化為 OpenVINO 的模型對(duì)象,開發(fā)者可以不需要將 ONNX 模型作為中間過渡。

import torchvision import torch from openvino.tools.mo import convert_model model = torchvision.models.resnet50(pretrained=True) ov_model=convert_model(model)

對(duì)比以 ONNX 作為中間過度的方式,新 PyTorch 前端有以下特點(diǎn):

bded37a2-14c1-11ee-962d-dac502259ad0.png

目前支持的 PyTorch 模型對(duì)象有:

· torch.nn.Module

· torch.jit.ScriptModule

· torch.jit.ScriptFunction

在 OpenVINO 內(nèi)部,PyTorch 前端基于 TorchScript 進(jìn)行模型導(dǎo)出,而 TorchScript 支持兩種模型導(dǎo)出模式,一種稱為 Tracing,一種稱為 Scripting。其中 Tracing 指的是 PyTorch 在模型運(yùn)行時(shí),追蹤運(yùn)行經(jīng)過的模塊算子,實(shí)時(shí)構(gòu)建計(jì)算流圖,并最終總結(jié)為一種中間表示,Trace 是個(gè)雙刃劍,好處是用戶無需了解 Python 代碼個(gè)中細(xì)節(jié),無論是 Function、Module 還是 Generators、Coroutines,Tracing 都會(huì)忠實(shí)地記錄下經(jīng)過的 Tensor 以及 Tensor Function,非常適用于不涉及數(shù)據(jù)相關(guān)控制流的簡(jiǎn)單模塊和功能,例如標(biāo)準(zhǔn)卷積神經(jīng)網(wǎng)絡(luò),壞處就在于 Tracing 不能感知控制流和計(jì)算圖的動(dòng)態(tài),如 if 語(yǔ)句或循環(huán)。比如他會(huì)把循環(huán)展開,一方面可能可以增加編譯優(yōu)化的空間,另一方面如果該循環(huán)在不同 infer 的時(shí)候是動(dòng)態(tài)變長(zhǎng)的,那么 Tracing 不能感知到這一點(diǎn),只會(huì)將 Tracing 時(shí)候的循環(huán)記錄下來。為了轉(zhuǎn)換包含依賴于數(shù)據(jù)的控制流的模塊和函數(shù),提供了一種 Scripting 機(jī)制,Scripting 從 Python 源代碼級(jí)別進(jìn)行解析,而非在運(yùn)行時(shí)構(gòu)建。Scripting 會(huì)去理解所有的 code,真正像一個(gè)編譯器一樣去進(jìn)行語(yǔ)法分析等操作。Scripting 相當(dāng)于一個(gè)嵌入在 Python/Pytorch 的DSL,其語(yǔ)法只是 PyTorch 語(yǔ)法的子集,這意味著存在一些 op 和語(yǔ)法 Scripting 不支持,這樣在編譯的時(shí)候就會(huì)遇到問題。

在剛剛的例子中 PyTorch 前端使用 Scripting 進(jìn)行模型導(dǎo)出,如果想使用 Tracing 的方式,可以在接口中新增一個(gè) example_input 參數(shù),此時(shí) PyTorch 前端會(huì)優(yōu)先調(diào)用 Tracing 的方式,當(dāng) Tracing 的方式失敗后,再調(diào)用 Scripting 方式。

import torchvision import torch from openvino.tools.mo import convert_model model = torchvision.models.resnet50(pretrained=True) ov_model=convert_model(model,example_input=torch.zeros(1,3,100,100))

目前 examle_input 支持的數(shù)據(jù)格式有:

· openvino.runtime.Tensor

· torch.Tensor

· np.ndarray

· listortuplewith tensors (openvino.runtime.Tensor/torch.Tensor/np.ndarray)

· dictionarywhere key is the input name, value is the tensor (openvino.runtime.Tensor/torch.Tensor/np.ndarray)

值得注意的是,以上兩個(gè)例子導(dǎo)出的均為動(dòng)態(tài)輸入模型對(duì)象,如果想指定模型的輸入 shape,可以再次添加額外的參數(shù) input_shape/input, 將輸入 shape 作為參數(shù)傳入,選其一即可。案例可參考以下的實(shí)戰(zhàn)部分。

最后,如果開發(fā)者希望導(dǎo)出靜態(tài) IR 文件以便后續(xù)使用,也可以調(diào)用以下接口,將 OpenVINO 的模型對(duì)象進(jìn)行序列化:

serialize(ov_model, str(ir_model_xml))

二、BERT 模型案例實(shí)戰(zhàn)

接下來我們通過一個(gè)實(shí)例來看下如何完成從 BERT 模型轉(zhuǎn)化到量化的全過程。

1. 獲取 PyTorch 模型對(duì)象

torch_model = BertForSequenceClassification.from_pretrained(PRETRAINED_MODEL_DIR)

2. 設(shè)置模型參數(shù)并轉(zhuǎn)化為 OpenVINO 模型對(duì)象

由于 BERT 是一個(gè)多輸入模型,這里額外添加了一個(gè) input=input_info 參數(shù),可以用來指定多輸入模型中每一個(gè) input 的 shape 以及數(shù)據(jù)類型。

input_shape = PartialShape([1, -1]) input_info = [("input_ids", input_shape, np.int64),("attention_mask", input_shape, np.int64),("token_type_ids", input_shape, np.int64)] default_input = torch.ones(1, MAX_SEQ_LENGTH, dtype=torch.int64) inputs = { "input_ids": default_input, "attention_mask": default_input, "token_type_ids": default_input, } model=convert_model(torch_model,example_input=inputs,input=input_info)

3. 準(zhǔn)備校驗(yàn)數(shù)據(jù)集,并啟動(dòng)量化

上一步中獲得的 model 為 openvino.runtime.Model 類型,可以直接被 NNCF 工具加載

calibration_dataset = nncf.Dataset(data_source, transform_fn) # Quantize the model. By specifying model_type, we specify additional transformer patterns in the model. quantized_model = nncf.quantize(model, calibration_dataset, model_type=ModelType.TRANSFORMER)

4. 編譯量化后的模型對(duì)象,并進(jìn)行推理

compiled_quantized_model = core.compile_model(model=quantized_model, device_name="CPU") output_layer = compiled_quantized_model.outputs[0] result = compiled_quantized_model(inputs)[output_layer] result = np.argmax(result) print(f"Text 1: {sample['sentence1']}") print(f"Text 2: {sample['sentence2']}") print(f"Thesamemeaning:{'yes'ifresult==1else'no'}")

最終結(jié)果如下:

Text 1: Wal-Mart said it would check all of its million-plus domestic workers to ensure they were legally employed . Text 2: It has also said it would review all of its domestic employees more than 1 million to ensure they have legal status . Thesamemeaning:yes

完整實(shí)例和性能精度比較,可以參考:

https://github.com/openvinotoolkit/openvino_notebooks/blob/main/notebooks/105-language-quantize-bert/105-language-quantize-bert.ipynb

三、總結(jié)

作為近期發(fā)布的最新版本,OpenVINO 2023.0 中的 mo 工具可以在不需要通過 ONNX 中間過渡的情況下,直接將 PyTorch 模型對(duì)象轉(zhuǎn)化為 OpenVINO 對(duì)象,免去開發(fā)者離線轉(zhuǎn)化和額外配置的過程,帶來更友好的用戶體驗(yàn)。鑒于該功能是預(yù)發(fā)布狀態(tài),可能存在部分算子不支持的情況,此時(shí),開發(fā)者依舊可以使用之前的路徑,依托 ONNX 前端進(jìn)行 PyTorch 模型的轉(zhuǎn)換。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3063

    瀏覽量

    48575
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5439

    瀏覽量

    120794
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    795

    瀏覽量

    13080

原文標(biāo)題:沒有“中間商賺差價(jià)”, OpenVINO? 直接支持 PyTorch 模型對(duì)象

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    原廠直供TF卡、SD卡、U盤

    `本司自主品牌:偲鴿; 看圖說話,只做正品,價(jià)格優(yōu)美! 避免中間商差價(jià),現(xiàn)原廠直供,需要的朋友滴滴曹生***,拿樣測(cè)試!`
    發(fā)表于 03-19 11:03

    怎樣使用PyTorch Hub去加載YOLOv5模型

    使用 PyTorch Hub 加載自定義 20 類VOC訓(xùn)練的YOLOv5s 模型'best.pt'。TensorRT、ONNX 和 OpenVINO 模型
    發(fā)表于 07-22 16:02

    Pytorch模型轉(zhuǎn)換為DeepViewRT模型時(shí)出錯(cuò)怎么解決?

    的 ONNX 模型。 但是,轉(zhuǎn)換過程終止時(shí)出現(xiàn)一條無用的錯(cuò)誤消息:“ \'NoneType\' 類型的對(duì)象沒有 len() ”。 進(jìn)行轉(zhuǎn)換時(shí),我使用了 eIQ 門戶中的模型工具。
    發(fā)表于 06-09 06:42

    如何將PyTorch模型OpenVINO trade結(jié)合使用?

    無法確定如何轉(zhuǎn)換 PyTorch 掩碼 R-CNN 模型以配合OpenVINO?使用。
    發(fā)表于 08-15 07:04

    如何將Detectron2和Layout-LM模型轉(zhuǎn)換為OpenVINO中間表示(IR)和使用CPU插件進(jìn)行推斷?

    無法確定如何將 Detectron2* 和 Layout-LM* 模型轉(zhuǎn)換為OpenVINO?中間表示 (IR) 和使用 CPU 插件進(jìn)行推斷。
    發(fā)表于 08-15 06:23

    pytorch模型轉(zhuǎn)換需要注意的事項(xiàng)有哪些?

    ,并且可以更積極地進(jìn)行優(yōu)化。 支持什么格式的pytorch模型? 答:Sophon的PyTorch模型編譯工具BMNETP只接受
    發(fā)表于 09-18 08:05

    沒有中間商差價(jià) 筆記本機(jī)械革命S1官網(wǎng)神劵低價(jià)巨給力

    資本驅(qū)動(dòng)的消費(fèi)市場(chǎng),是通過一級(jí)一級(jí)利益剝削維持運(yùn)作的。用咱們老百姓的話講,10塊錢的東西從廠子里出來,讓中間商倒賣幾手就成了20塊,批發(fā)的貨永遠(yuǎn)比零售的便宜,也是這個(gè)道理。一般的日用消耗品都是
    發(fā)表于 06-29 10:27 ?980次閱讀

    區(qū)塊鏈的本質(zhì)是什么 能否成為下個(gè)風(fēng)口

    去中心化就像我們?nèi)ベ?gòu)物一樣,賣方和我們直接了當(dāng)?shù)慕灰祝?b class='flag-5'>沒有中間商差價(jià),面對(duì)面,一個(gè)愿買一個(gè)愿賣而已,環(huán)節(jié)中百分百透明。
    發(fā)表于 11-02 09:09 ?761次閱讀
    區(qū)塊鏈的本質(zhì)是什么 能否成為下個(gè)風(fēng)口

    AMD官方開始直賣顯卡及處理器

    “開張了,開張了,AMD官方直賣網(wǎng)上線,沒有中間商差價(jià)”……
    發(fā)表于 07-12 15:36 ?1774次閱讀

    英偉達(dá)和AMD等廠商直接銷售新產(chǎn)品并砍掉中間商

    PS5、XSX和新30系顯卡的熱銷以及疫情影響下的供貨不足,導(dǎo)致了大量黃牛的出現(xiàn),將新硬件的價(jià)格炒高。近日,id Software的聯(lián)合創(chuàng)始人John Carmack認(rèn)為,鑒于全球硬件短缺,為了透明起見,索尼、微軟、英偉達(dá)和AMD這些大廠應(yīng)該直接銷售新產(chǎn)品,并砍掉中間商。
    的頭像 發(fā)表于 02-22 09:16 ?1384次閱讀

    大牛建議廠商可砍掉中間商直接銷售顯卡等

    PS5、XSX和新30系顯卡的熱銷以及疫情影響下的供貨不足,導(dǎo)致了大量黃牛的出現(xiàn),將新硬件的價(jià)格炒高。近日,id Software的聯(lián)合創(chuàng)始人John Carmack認(rèn)為,鑒于全球硬件短缺,為了透明起見,索尼、微軟、英偉達(dá)和AMD這些大廠應(yīng)該直接銷售新產(chǎn)品,并砍掉中間商。
    的頭像 發(fā)表于 02-22 10:58 ?1412次閱讀

    解析OpenVINO? + SSD 實(shí)時(shí)對(duì)象檢測(cè)

    。 SSD對(duì)象檢測(cè)模型 對(duì)象檢測(cè)是計(jì)算機(jī)視覺核心任務(wù)之一,也是最常見與應(yīng)用最廣泛的視覺場(chǎng)景。OpenVINO 已經(jīng)提供了以下通用場(chǎng)景下的對(duì)象
    的頭像 發(fā)表于 05-18 09:35 ?1898次閱讀
    解析<b class='flag-5'>OpenVINO</b>? + SSD 實(shí)時(shí)<b class='flag-5'>對(duì)象</b>檢測(cè)

    OpenVINO模型優(yōu)化實(shí)測(cè):PC/NB當(dāng)AI辨識(shí)引擎沒問題!

    這次我們將會(huì)自制一個(gè)CNN分類器,并透過OpenVINO模型轉(zhuǎn)換程序轉(zhuǎn)換成IR模型,并進(jìn)行模型效能與正確率分析。依據(jù)Intel官方網(wǎng)站的說明,Op
    的頭像 發(fā)表于 12-09 16:13 ?2274次閱讀

    自訓(xùn)練Pytorch模型使用OpenVINO?優(yōu)化并部署在AI愛克斯開發(fā)板

    本文章將依次介紹如何將 Pytorch 自訓(xùn)練模型經(jīng)過一系列變換變成 OpenVINO IR 模型形式,而后使用 OpenVINO Pyth
    的頭像 發(fā)表于 05-26 10:23 ?843次閱讀
    自訓(xùn)練<b class='flag-5'>Pytorch</b><b class='flag-5'>模型</b>使用<b class='flag-5'>OpenVINO</b>?優(yōu)化并部署在AI愛克斯開發(fā)板

    如何將Pytorch自訓(xùn)練模型變成OpenVINO IR模型形式

    本文章將依次介紹如何將Pytorch自訓(xùn)練模型經(jīng)過一系列變換變成OpenVINO IR模型形式,而后使用OpenVINO Python AP
    的頭像 發(fā)表于 06-07 09:31 ?1794次閱讀
    如何將<b class='flag-5'>Pytorch</b>自訓(xùn)練<b class='flag-5'>模型</b>變成<b class='flag-5'>OpenVINO</b> IR<b class='flag-5'>模型</b>形式