0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

没有“中间商赚差价”, OpenVINO™ 直接支持 PyTorch 模型对象

OpenCV学堂 来源:OpenCV学堂 2023-06-27 16:39 次阅读

没有“中间商赚差价”,OpenVINO直接支持 PyTorch 模型对象

背景

作为最热门的开源深度学习框架之一,PyTorch 的易用性和灵活性使其深受学术和研究界的喜爱。之前 OpenVINO 对于 PyTorch 模型的支持也仅仅停留在 ONNX 过渡阶段,需要通过将 PyTorch 动态模型导出为 ONNX 静态格式后,才可以直接被 OpenVINO runtime 离线加载,虽然 PyTorch 也提供了官方的 torch.onnx.export 接口帮助开发者导出 ONNX 模型,但毕竟有这么一个“中间商”在那里,其中很多额外的配置工作也为 OpenVINO 开发者带来了不便,诸如动态/静态输入设定,以及 opset 版本设定等。

一、OpenVINO 直接支持 PyTorch 模型对象

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

随着 OpenVINO 2023.0 版本的发布,OpenVINO 工具库中预置了全新的 PyTorch 前端,为开发者们提供了一条全新的 PyTorch 模型支持路径,带来更友好的用户体验——OpenVINO 的 mo 工具可以直接将 PyTorch 模型对象转化为 OpenVINO 的模型对象,开发者可以不需要将 ONNX 模型作为中间过渡。

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

对比以 ONNX 作为中间过度的方式,新 PyTorch 前端有以下特点:

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

目前支持的 PyTorch 模型对象有:

· torch.nn.Module

· torch.jit.ScriptModule

· torch.jit.ScriptFunction

在 OpenVINO 内部,PyTorch 前端基于 TorchScript 进行模型导出,而 TorchScript 支持两种模型导出模式,一种称为 Tracing,一种称为 Scripting。其中 Tracing 指的是 PyTorch 在模型运行时,追踪运行经过的模块算子,实时构建计算流图,并最终总结为一种中间表示,Trace 是个双刃剑,好处是用户无需了解 Python 代码个中细节,无论是 Function、Module 还是 Generators、Coroutines,Tracing 都会忠实地记录下经过的 Tensor 以及 Tensor Function,非常适用于不涉及数据相关控制流的简单模块和功能,例如标准卷积神经网络,坏处就在于 Tracing 不能感知控制流和计算图的动态,如 if 语句或循环。比如他会把循环展开,一方面可能可以增加编译优化的空间,另一方面如果该循环在不同 infer 的时候是动态变长的,那么 Tracing 不能感知到这一点,只会将 Tracing 时候的循环记录下来。为了转换包含依赖于数据的控制流的模块和函数,提供了一种 Scripting 机制,Scripting 从 Python 源代码级别进行解析,而非在运行时构建。Scripting 会去理解所有的 code,真正像一个编译器一样去进行语法分析等操作。Scripting 相当于一个嵌入在 Python/Pytorch 的DSL,其语法只是 PyTorch 语法的子集,这意味着存在一些 op 和语法 Scripting 不支持,这样在编译的时候就会遇到问题。

在刚刚的例子中 PyTorch 前端使用 Scripting 进行模型导出,如果想使用 Tracing 的方式,可以在接口中新增一个 example_input 参数,此时 PyTorch 前端会优先调用 Tracing 的方式,当 Tracing 的方式失败后,再调用 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 支持的数据格式有:

· 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)

值得注意的是,以上两个例子导出的均为动态输入模型对象,如果想指定模型的输入 shape,可以再次添加额外的参数 input_shape/input, 将输入 shape 作为参数传入,选其一即可。案例可参考以下的实战部分。

最后,如果开发者希望导出静态 IR 文件以便后续使用,也可以调用以下接口,将 OpenVINO 的模型对象进行序列化:

serialize(ov_model, str(ir_model_xml))

二、BERT 模型案例实战

接下来我们通过一个实例来看下如何完成从 BERT 模型转化到量化的全过程。

1. 获取 PyTorch 模型对象

torch_model = BertForSequenceClassification.from_pretrained(PRETRAINED_MODEL_DIR)

2. 设置模型参数并转化为 OpenVINO 模型对象

由于 BERT 是一个多输入模型,这里额外添加了一个 input=input_info 参数,可以用来指定多输入模型中每一个 input 的 shape 以及数据类型。

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. 准备校验数据集,并启动量化

上一步中获得的 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. 编译量化后的模型对象,并进行推理

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'}")

最终结果如下:

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

完整实例和性能精度比较,可以参考:

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

三、总结

作为近期发布的最新版本,OpenVINO 2023.0 中的 mo 工具可以在不需要通过 ONNX 中间过渡的情况下,直接将 PyTorch 模型对象转化为 OpenVINO 对象,免去开发者离线转化和额外配置的过程,带来更友好的用户体验。鉴于该功能是预发布状态,可能存在部分算子不支持的情况,此时,开发者依旧可以使用之前的路径,依托 ONNX 前端进行 PyTorch 模型的转换。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    3226

    浏览量

    48807
  • 深度学习
    +关注

    关注

    73

    文章

    5500

    浏览量

    121111
  • pytorch
    +关注

    关注

    2

    文章

    807

    浏览量

    13200

原文标题:没有“中间商赚差价”, OpenVINO™ 直接支持 PyTorch 模型对象

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    原厂直供TF卡、SD卡、U盘

    `本司自主品牌:偲鸽; 看图说话,只做正品,价格优美! 避免中间商差价,现原厂直供,需要的朋友滴滴曹生***,拿样测试!`
    发表于 03-19 11:03

    怎样使用PyTorch Hub去加载YOLOv5模型

    使用 PyTorch Hub 加载自定义 20 类VOC训练的YOLOv5s 模型'best.pt'。TensorRT、ONNX 和 OpenVINO 模型
    发表于 07-22 16:02

    Pytorch模型转换为DeepViewRT模型时出错怎么解决?

    的 ONNX 模型。 但是,转换过程终止时出现一条无用的错误消息:“ \'NoneType\' 类型的对象没有 len() ”。 进行转换时,我使用了 eIQ 门户中的模型工具。
    发表于 06-09 06:42

    如何将PyTorch模型OpenVINO trade结合使用?

    无法确定如何转换 PyTorch 掩码 R-CNN 模型以配合OpenVINO™使用。
    发表于 08-15 07:04

    如何将Detectron2和Layout-LM模型转换为OpenVINO中间表示(IR)和使用CPU插件进行推断?

    无法确定如何将 Detectron2* 和 Layout-LM* 模型转换为OpenVINO中间表示 (IR) 和使用 CPU 插件进行推断。
    发表于 08-15 06:23

    pytorch模型转换需要注意的事项有哪些?

    ,并且可以更积极地进行优化。 支持什么格式的pytorch模型? 答:Sophon的PyTorch模型编译工具BMNETP只接受
    发表于 09-18 08:05

    没有中间商差价 笔记本机械革命S1官网神劵低价巨给力

    资本驱动的消费市场,是通过一级一级利益剥削维持运作的。用咱们老百姓的话讲,10块钱的东西从厂子里出来,让中间商倒卖几手就成了20块,批发的货永远比零售的便宜,也是这个道理。一般的日用消耗品都是
    发表于 06-29 10:27 1001次阅读

    区块链的本质是什么 能否成为下个风口

    去中心化就像我们去购物一样,卖方和我们直接了当的交易,没有中间商差价,面对面,一个愿买一个愿卖而已,环节中百分百透明。
    发表于 11-02 09:09 782次阅读
    区块链的本质是什么 能否成为下个风口

    AMD官方开始直卖显卡及处理器

    “开张了,开张了,AMD官方直卖网上线,没有中间商差价”……
    发表于 07-12 15:36 1794次阅读

    英伟达和AMD等厂商直接销售新产品并砍掉中间商

    PS5、XSX和新30系显卡的热销以及疫情影响下的供货不足,导致了大量黄牛的出现,将新硬件的价格炒高。近日,id Software的联合创始人John Carmack认为,鉴于全球硬件短缺,为了透明起见,索尼、微软、英伟达和AMD这些大厂应该直接销售新产品,并砍掉中间商
    的头像 发表于 02-22 09:16 1413次阅读

    大牛建议厂商可砍掉中间商直接销售显卡等

    PS5、XSX和新30系显卡的热销以及疫情影响下的供货不足,导致了大量黄牛的出现,将新硬件的价格炒高。近日,id Software的联合创始人John Carmack认为,鉴于全球硬件短缺,为了透明起见,索尼、微软、英伟达和AMD这些大厂应该直接销售新产品,并砍掉中间商
    的头像 发表于 02-22 10:58 1439次阅读

    解析OpenVINO™ + SSD 实时对象检测

    。 SSD对象检测模型 对象检测是计算机视觉核心任务之一,也是最常见与应用最广泛的视觉场景。OpenVINO 已经提供了以下通用场景下的对象
    的头像 发表于 05-18 09:35 1951次阅读
    解析<b class='flag-5'>OpenVINO</b>™ + SSD 实时<b class='flag-5'>对象</b>检测

    OpenVINO模型优化实测:PC/NB当AI辨识引擎没问题!

    这次我们将会自制一个CNN分类器,并透过OpenVINO模型转换程序转换成IR模型,并进行模型效能与正确率分析。依据Intel官方网站的说明,Op
    的头像 发表于 12-09 16:13 2372次阅读

    自训练Pytorch模型使用OpenVINO™优化并部署在AI爱克斯开发板

    本文章将依次介绍如何将 Pytorch 自训练模型经过一系列变换变成 OpenVINO IR 模型形式,而后使用 OpenVINO Pyth
    的头像 发表于 05-26 10:23 927次阅读
    自训练<b class='flag-5'>Pytorch</b><b class='flag-5'>模型</b>使用<b class='flag-5'>OpenVINO</b>™优化并部署在AI爱克斯开发板

    如何将Pytorch自训练模型变成OpenVINO IR模型形式

    本文章将依次介绍如何将Pytorch自训练模型经过一系列变换变成OpenVINO IR模型形式,而后使用OpenVINO Python AP
    的头像 发表于 06-07 09:31 1985次阅读
    如何将<b class='flag-5'>Pytorch</b>自训练<b class='flag-5'>模型</b>变成<b class='flag-5'>OpenVINO</b> IR<b class='flag-5'>模型</b>形式