通过 Torch-ORT 与 Intel OpenVINO™ 集成来优化 PyTorch
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
- 内联模型转换 — 无需显式的模型转换步骤
工作原理
- 用户将他们的
nn.Module
包装在torch_ort.ORTInferenceModule
中,以使用 ONNX Runtime OpenVINO Execution Provider 为模型做好推理准备。 - 该模块使用 torch.onnx.export 导出为内存中的 ONNX 图。
- 启动一个 ONNX Runtime 会话,并将 ONNX 图作为输入。ONNX Runtime 将图划分为具有支持和不支持算子的子图。
- 所有与 OpenVINO 兼容的节点将由 OpenVINO Execution Provider 执行,并可以在 Intel CPU、GPU 或 VPU 上执行。
- 所有其他节点将回退到默认的 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 支持团队。
资源
声明与免责条款
英特尔技术可能需要启用硬件、软件或服务激活。
没有任何产品或组件可以绝对安全。
您的成本和结果可能会有所不同。
© 英特尔公司。英特尔、英特尔徽标和其他英特尔标志是英特尔公司或其子公司的商标。其他名称和品牌可能是其他方的财产。