模型部署简介
通过了解 TensorRT、TensorLite、PyTorch Mobile、ONNX 和 OpenVINO 等多种部署框架,学习模型的部署步骤。
AI模型的部署
现在我们来学习模型部署阶段及其实际运行环境。我们将使用训练好的模型,加载其预训练权重来进行预测,这一过程也称为推理(inference)。
通常情况下,部署环境的硬件配置与训练环境不同。例如,我们可能在本地机器上使用GPU进行模型训练,但希望将训练好的模型部署到内存更小、处理器性能较弱的嵌入式系统或手机设备中。或者我们需要在另一台计算机或服务器上运行模型,但由于预算限制,无法使用高性能设备,只能选择算力较低的硬件。此外,即使训练和部署环境的硬件相似,我们也可能希望加快推理速度,这就需要对训练好的模型进行优化。
不同部署环境对应的框架
如前所述,我们的部署环境可能是以下之一:
- 手机设备
- 云端或本地计算机
- 嵌入式系统(包含必要组件的电子电路板)等
根据不同的部署环境,我们需要选用相应的框架。
TensorRT
TensorRT 是由 NVIDIA 开发的库,用于在其图形处理器(GPU)上实现更快的推理。例如,如果我们使用的是 NVIDIA Jetson 设备,或树莓派连接了外置 NVIDIA GPU,使用 TensorRT 可以有效优化模型以适应部署需求。
通过 TensorRT 对模型进行优化和转换后,我们就可以将其嵌入并在这些设备上运行。
TensorFlow Lite(TensorLite)
如果我们使用 TensorFlow 训练了一个模型,并希望将其集成到 Android 或 iOS 移动应用中,则需要使用 TensorFlow Lite(简称 TensorLite)。
PyTorch Mobile
类似于 TensorLite,如果我们使用 PyTorch 训练了模型,并希望在 Android 或 iOS 移动设备上运行,PyTorch Mobile 框架提供了所需的优化和转换功能。
ONNX(开放神经网络交换格式)
ONNX 是一个通用框架,支持多种深度学习框架之间的模型转换。例如,我们有一个用 PyTorch 训练的模型,但需要在 NVIDIA Jetson 设备上使用 TensorRT 进行部署,此时 ONNX 可作为中间桥梁:先将模型从 PyTorch 转换为 ONNX 格式,再从 ONNX 转换为 TensorRT 格式。
同样地,如果我们要在边缘设备上使用原生 Python 或 C++ 运行模型,ONNX Runtime 引擎可以实现这一目标。我们可以将模型从 PyTorch 转换为 ONNX,然后利用 ONNX Runtime 来执行推理。
注意:我们可以直接在原生 Python 或 C++ 应用中运行模型,这比在 PyTorch 中运行要快得多。
OpenVINO
OpenVINO 支持对来自几乎所有主流框架的深度学习模型进行优化。该框架由 Intel 开发,在使用 Intel 边缘设备时,选择 OpenVINO 能够显著提升边缘端的推理性能。同时,它也兼容部分其他厂商的处理器。
注意:与 ONNX 类似,通过 OpenVINO 转换后的模型也可以通过纯 Python 或 C++ 调用。
我们还可以将 ONNX 模型进一步转换为 OpenVINO 格式。这一点非常重要,因为某些模型尚不支持直接转换为 OpenVINO 格式。而 ONNX 可作为训练框架与 OpenVINO 之间的桥梁,因其支持更复杂的模型转换,覆盖范围更广。
核心术语总结
| 术语 | 含义 |
|---|---|
| 训练阶段(Train time) | 在多个训练周期(epochs)中更新模型权重的过程。 |
| 推理阶段(Inference time) | 使用训练完成的模型进行实际预测的阶段。 |
| CPU | 通用处理器,适用于执行多种任务。但对于复杂模型(如目标检测模型),可能不足以胜任训练任务。 |
| GPU | 专用处理单元,具备强大的数学计算能力,因此比 CPU 更快,能够高效训练复杂神经网络模型,也适用于简单模型。 |
综上所述,若要在本地计算机或服务器上的任意 CPU 或 GPU 上部署模型,建议使用 ONNX 或 OpenVINO 框架,以获得更快的推理速度。
下一步是什么?
接下来,我们将学习如何使用 ONNX 和 OpenVINO 转换模型,并构建基于 Python 的推理流程。
最终,我们会对比分析这些框架在实际应用中的性能差异。