您可以部署和推理以 PyTorch 或 Tensorflow 等不同模型格式保存并转换为开放神经网络交换(ONNX)格式的机器学习模型。 ONNX 是一种表示深度学习模型的开源格式。 开发人员可以使用 ONNX 格式在 PyTorch 或 TensorFlow, 等框架中训练模型,然后将其导出到另一个具有不同性能特征的环境中运行。 ONNX 格式提供了一个功能强大的解决方案,可将 maching 学习模型转换为 ONNX 格式,并使用 ONNX 运行时执行推理。
将模型转换为 ONNX 运行时的优势
将模型转换为 ONNX 运行时具有多种优势,尤其是在机器学习和深度学习应用中。 将模型转换为 ONNX 运行时的一些优势如下:
跨平台兼容性 :ONNX 提供了表示机器学习模型的标准格式,这使得在 PyTorch 或 Tensorflow 等不同框架间部署模型变得更加容易。 您可以在一个框架中训练模型,然后将其部署到另一个支持 ONNX 运行时的框架中。
提高性能 :ONNX 运行时通过应用各种针对硬件和软件的优化(如图形优化)来优化推理模型。 此外,它还支持在 CPU 和 GPU 等不同硬件上执行,确保有效利用资源。
互操作性 :ONNX 提供了在一个框架中训练 PyTorch, TensorFlow, 和 scikit-learn 等模型,然后将其输出到另一个环境中运行的方法,从而简化了工作流程。 它打破了不同深度学习框架之间的壁垒,让开发人员能够利用不同库的优势,而不会被锁定在单一的生态系统中。
支持的转换框架
您可以将使用以下框架的机器学习模型转换为 ONNX 格式:
- PyTorch
- TensorFlow
将 PyTorch 模型转换为 ONNX 格式
请按照以下步骤将 PyTorch 中训练好的模型转换为 ONNX 格式:
导入库 :首先导入必要的库,如用于运行模型的
onnxruntime
、用于 PyTorch 功能的torch
以及应用程序所需的其他库。创建或下载 PyTorch 模型您可以使用自己的数据集创建 PyTorch 模型,也可以使用外部开源模型库(如 Hugging Face)提供的模型。
将 PyTorch 模型转换为 ONNX 格式 :将 PyTorch 模型转换为 ONNX 格式:
a. 准备模型使用
model.eval()
函数确保 PyTorch 模型处于评估模式。 您可能需要一个虚拟输入张量来匹配模型的形状。b. 导出模型使用 torch.onnx.export 函数将模型转换为 ONNX 格式。
验证转换 :转换模型后,使用
onnx
库验证模型是否按预期运行。
将 TensorFlow 模型转换为 ONNX 格式
请按照以下步骤将 TensorFlow 模型转换为 ONNX 格式:
导入库 :首先导入必要的库,如
tf2onnx
以方便将 TensorFlow 模型转换为 ONNX,以及应用所需的其他库。下载 TensorFlow 模型 :您必须下载外部创建的 TensorFlow 模型和用于训练模型的数据。
将 TensorFlow 模型转换为 ONNX 格式 :使用
tf2onnx.convert
命令将以SavedModel
格式创建的 TensorFlow 模型转换为 ONNX 格式。 如果要转换 TensorFlow Lite 模型,请使用--tflite
标志而不是--saved-model
标志。验证转换 :转换模型后,使用
onnx
库验证模型是否按预期运行。
其他注意事项
以下是将 TensorFlow 模型转换为 ONNX 格式的一些额外注意事项:
动态轴 :动态轴可用于模型处理输入形状的变化,如动态批量大小或序列长度,这对在输入尺寸可能变化的应用中部署模型非常有用。 如果模型要处理可变的输入大小,如动态批量大小或序列长度,则使用动态轴。
动态轴还可以减少内存开销,因为它们可以与多个输入和输出一起使用,动态地进行调整,而无需重新导出模型。 您可以在 PyTorch 或 TensorFlow 中导出模型时指定动态轴。
操作集版本 :ONNX 的操作集版本决定了模型支持的操作集及其规格。 这是模型转换和部署过程中的一个关键因素。
不同的 ONNX 运行时和框架支持特定的 opset 版本。 旧版本的 opset 可能缺少新版本中的功能或优化。 模型的 opset 版本与 ONNX 运行时不兼容会导致推理过程中出现错误。 您必须确保目标运行时支持您选择的 ONNX 操作集版本。
部署转换为 ONNX 格式的模型
使用 onnxruntime_opset_19
软件规范来部署转换为 ONNX 格式的机器学习模型。 更多信息,请参阅支持的软件规格。
要从用户界面部署转换为 ONNX 格式的模型,请按照以下步骤操作:
在部署空间中,转到 " 资产 "选项卡。
在资产列表中找到模型,单击菜单图标菜单图标,然后选择部署。
为您的模型选择部署类型。 可选择在线部署或批量部署选项。
输入部署的名称,并可选择输入服务名称、描述和标记。
注:- 使用 "服务名称 "字段指定部署的名称,而不是部署 ID。
- 服务名称在名称空间内必须是唯一的。
- 服务名称必须只包含这些字符: a-z,0-9,_],长度不得超过 36 个字符。
- 在定期使用自定义基础模型的工作流中,考虑在每次部署时为模型分配相同的服务名称。 这样,在删除并重新部署模型后,就可以在代码中继续使用相同的端点。
为您的机型选择硬件规格。
为您的机型选择配置和软件规格。
单击创建。
测试模型
请按照以下步骤测试转换为 ONNX 格式的已部署模型:
- 在部署空间中,打开 " 部署 "选项卡并单击部署名称。
- 单击 "测试 "选项卡输入提示文本,并从部署的资产中获取响应。
- 根据您部署的资产类型,以下列格式之一输入测试数据:
- 文本 :输入文本输入数据,生成文本块作为输出。
- 文本流 :输入文本输入数据,生成文本流作为输出。
- JSON :输入 JSON 输入数据,生成 JSON 格式的输出。
- 单击 " 生成" ,根据提示获取结果。
样本笔记本
以下示例笔记本演示了如何使用 Python 客户端库部署从 PyTorch 或 TensorFlow 转换为 ONNX 格式的机器学习模型:
Notebook | 框架 | 描述 |
---|---|---|
将 ONNX 神经网络从固定轴转换为动态轴,并与 watsonx 一起使用 | ONNX | 设置环境 创建并导出基本 ONNX 模型 将模型从固定轴转换为动态轴 持久保存转换后的 ONNX 模型 部署并对 ONNX 模型进行评分 清理 总结和下一步工作 |
用 watsonx 使用从 PyTorch 转换而来的 ONNX 模型 | ONNX | 使用数据集创建 PyTorch 模型。 将 PyTorch 模型转换为 ONNX 格式 将转换后的模型保存在 Watson Machine Learning资源库中。 使用客户端库部署在线评分模型。 使用客户机库对样本记录进行评分。 |
使用从 TensorFlow 转换而来的 ONNX 模型,用 watsonx 识别手写数字 | ONNX | 下载外部训练的 TensorFlow 模型和数据集。 将 TensorFlow 模型转换为 ONNX 格式 将转换后的模型保存在 Watson Machine Learning资源库中。 使用客户端库部署在线评分模型。 使用客户机库对样本记录进行评分。 |
父主题: 部署机器学习资产