65.9K
CodeProject 正在变化。 阅读更多。
Home

通过 Torch-ORT 与 Intel OpenVINO™ 集成来优化 PyTorch

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2022年9月12日

CPOL

4分钟阅读

viewsIcon

4346

OpenVINO 与 Torch-ORT 的集成使 PyTorch 开发者能够在他们选择的框架内工作,同时仍然通过用于加速 PyTorch 应用程序的内联优化获得 OpenVINO™ 工具包的速度和推理能力。

引言

您是否希望在进行最少代码更改的情况下,使用 PyTorch API 并获得 OpenVINO™ Toolkit 的推理性能优势?别再犹豫了,今天我们很高兴地宣布,与微软合作,推出了 OpenVINO™ 与 ONNX Runtime for PyTorch 的集成(简称 OpenVINO™ integration with Torch-ORT)。

OpenVINO 重新定义了 Intel® 驱动设备上的 AI 推理,并获得了前所未有的开发者采用率。如今,数十万开发者使用 OpenVINO 来加速几乎所有想象得到的用例中的 AI 推理,从模拟人类视觉、自动语音识别、自然语言处理、推荐系统等等。该工具包基于最新的神经网络,包括卷积神经网络 (CNN)、循环神经网络和注意力网络,可在 Intel 硬件(Intel® CPU、Intel® 集成显卡、Intel® Neural Compute Stick 2 和带 Intel® Movidius™ VPU 的 Intel® Vision Accelerator Design)上扩展计算机视觉和非视觉工作负载,从而最大化性能。OpenVINO 从边缘到云端加速部署了高性能、AI 和深度学习推理的应用程序。

随着 OpenVINO 生态系统的不断发展,我们听到 PyTorch 开发者表示希望有更无缝的方法来加速 PyTorch 模型。在此之前,希望加速模型的 PyTorch 开发者必须将模型转换为 ONNX,然后用 OpenVINO™ Runtime 运行它,或者将 ONNX 模型转换为 OpenVINO™ toolkit IR 进行推理。

这对 PyTorch 开发者造成了几个问题,例如

  • 由于 PyTorch 层/算子不受 ONNX 转换支持而导致 ONNX 转换失败
  • 由于转换模型的层/算子不受 OpenVINO 支持而导致 ONNX 推理失败
  • 模型转换所需的额外步骤(PyTorch -> ONNX,ONNX -> OpenVINO IR 等)

为什么 PyTorch 开发者应该使用 OpenVINO 与 Torch-ORT 集成?

OpenVINO 与 Torch-ORT 的集成使 PyTorch 开发者能够在他们选择的框架内工作,同时仍然通过用于加速 PyTorch 应用程序的内联优化获得 OpenVINO™ 工具包的速度和推理能力。

通过 Intel® OpenVINO™ 与 Torch-ORT 集成加速 PyTorch

  • 易于安装 — 使用 PIP 安装 OpenVINO 与 Torch-ORT 集成
  • 简单 API — 无需重构现有代码,只需导入 OpenVINO 与 Torch-ORT 集成,设置您所需的推理目标设备,然后包装您的模型即可!
  • 性能 — 实现比标准 PyTorch 更高的推理性能
  • 支持 Intel 设备 — Intel CPU、Intel 集成 GPU、Intel VPU
  • 内联模型转换 — 无需显式的模型转换步骤

工作原理

  1. 用户将他们的 nn.Module 包装在 torch_ort.ORTInferenceModule 中,以使用 ONNX Runtime OpenVINO Execution Provider 为模型做好推理准备。
  2. 该模块使用 torch.onnx.export 导出为内存中的 ONNX 图。
  3. 启动一个 ONNX Runtime 会话,并将 ONNX 图作为输入。ONNX Runtime 将图划分为具有支持和不支持算子的子图。
  4. 所有与 OpenVINO 兼容的节点将由 OpenVINO Execution Provider 执行,并可以在 Intel CPU、GPU 或 VPU 上执行。
  5. 所有其他节点将回退到默认的 CPU MLAS Execution Provider。CPU MLAS Execution Provider 将调用 ONNX Runtime 自己的 CPU 内核来处理默认算子集域中的节点。

开发者体验

开始使用 OpenVINO 与 Torch-CRT 集成很简单,因为它遵循 PyTorch 的习惯用法。下面是一个代码片段,展示了如何从 HuggingFace Transformers 中获取一个预训练的 NLP BERT 模型,并使其与 OpenVINO™ integration with Torch-ORT 代码示例兼容。

以下是代码片段

Install

pip install torch-ort-infer[openvino]
python -m torch_ort.configure

定义模型

from torch_ort import ORTInferenceModule 
model = ORTInferenceModule(model)Provider options for different devicesfrom torch_ort import ORTInferenceModule, OpenVINOProviderOptions 
provider_options = OpenVINOProviderOptions(backend = "GPU", precision = "FP16") 
model = ORTInferenceModule(model, provider_options = provider_options)

代码示例

只需将您的 nn.Module 包装在 ORTInferenceModule 中,您就可以获得 OpenVINO 加速的好处。

from transformers 
import AutoTokenizer, AutoModelForSequenceClassification
import numpy as np
from torch_ort import ORTInferenceModuletokenizer = AutoTokenizer.from_pretrained(
            "textattack/bert-base-uncased-CoLA")
model = AutoModelForSequenceClassification.from_pretrained(
        "textattack/bert-base-uncased-CoLA")# Convert nn.Module to ORTInferenceModule to leverage OpenVINO on CPU
model = ORTInferenceModule(model)text = "Replace me any text by you'd like ."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)# Post processing
logits = output.logits
logits = logits.detach().cpu().numpy()# predictions
pred = np.argmax(logits, axis=1).flatten()
print("Grammar correctness label (0=unacceptable, 1=acceptable)")
print(pred)

完整的代码示例可以在这里找到。

只需两行代码,OpenVINO 与 Torch-CRT 集成就可以帮助您获得出色的推理性能,并利用 OpenVINO 全套工具包提供的许多功能。如果您有兴趣尝试一下,请查看 Github 仓库 并阅读详细文档,可在 此处 找到。

您还可以期待我们提供更多内容

  • 其他代码示例(Python 脚本、Jupyter Notebook)
  • 更多的 TorchVision 和 HuggingFace Transformers 模型覆盖

开始使用 Intel® DevCloud for the Edge

Intel® DevCloud for the Edge 是一个云开发环境,使开发者能够通过最少的设置在 Intel 硬件上开发和基准测试 AI 和计算机视觉解决方案的性能。Edge Devcloud 预装了 OpenVINO™ integration with Torch-ORT [Beta] 以及代码片段,以帮助加速您的开发过程。要开始,请按照以下步骤操作:

第一步。在此处免费注册并登录 获取免费访问权限

第二步。向下滚动并选择 OpenVINO™ integration Torch-ORT [beta] Notebook

第三步。打开代码片段,搜索“OpenVINO™ integration with Torch-ORT [beta]”,将代码片段拖放到笔记本中

第四步。运行单元格

如果您遇到任何问题,请 联系 Intel® DevCloud 支持团队。

资源

声明与免责条款

英特尔技术可能需要启用硬件、软件或服务激活。

没有任何产品或组件可以绝对安全。

您的成本和结果可能会有所不同。

© 英特尔公司。英特尔、英特尔徽标和其他英特尔标志是英特尔公司或其子公司的商标。其他名称和品牌可能是其他方的财产。

© . All rights reserved.