部署转换为 ONNX 格式的模型
您可以从 PyTorch
或 TensorFlow
部署和推断机器学习模型,这些模型以不同格式保存并转换为 Open Neural Network Exchange
(ONNX
)格式。 ONNX
是一种用于表示深度学习模型的开源格式。 开发人员可以使用 ONNX
格式在一个框架(如 PyTorch
或 TensorFlow
)中训练模型,然后将其导出到另一个具有不同性能特征的环境中运行。 ONNX
格式为将机器学习模型转换为 ONNX
并使用 ONNX
运行时进行推理提供了强大的解决方案。
将模型转换为 ONNX
运行时的好处
将模型转换为 ONNX
运行时具有诸多优势,尤其是在机器学习和深度学习应用中。 将模型转换为 ONNX
运行时的一些优点如下:
跨平台兼容性 :
ONNX
为机器学习模型的表示提供了一种标准格式,从而更容易在不同框架(如 PyTorch 或 Tensorflow )中部署模型。 您可以在一个框架中训练模型,并将其部署到另一个支持ONNX
运行时的框架中。性能提升 :
ONNX
运行时通过应用各种硬件和软件特定的优化(如图形优化)来优化模型的推理。 此外,它还支持在 CPU 和 GPU 等不同硬件上执行,确保有效利用资源。互操作性 :
ONNX
提供了一种在同一个框架中训练模型的方法,例如 PyTorch,、 TensorFlow, 和scikit-learn,然后将其导出到另一个环境中运行,从而简化了工作流程。 它打破了不同深度学习框架之间的壁垒,让开发人员能够利用不同库的优势,而不会被锁定在单一的生态系统中。
支持的转换框架
您可以将使用以下框架的机器学习模型转换为 ONNX
格式:
PyTorch
TensorFlow
CatBoost
LightGBM
XGBoost
Scikit-learn
将 PyTorch
格式转换为 ONNX
格式
请按照以下步骤将 PyTorch
格式的训练模型转换为 ONNX
格式:
导入库 :首先导入必要的库,如用于运行模型的
onnxruntime
、用于 PyTorch 功能的torch
以及应用程序所需的其他库。创建或下载
PyTorch
模型 :您可以使用自己的数据集创建PyTorch
模型,也可以使用外部开源模型库(如 Hugging Face )提供的模型。将
PyTorch
模型转换为ONNX格式 :将PyTorch
模型转换为ONNX格式:a. 准备模型 :确保您的
PyTorch
模型处于评估模式,方法是使用model.eval()
功能。 您可能需要一个虚拟输入张量来匹配模型的形状。b. 导出模型 :使用
torch.onnx.export
功能将模型转换为ONNX格式。验证转换 :转换模型后,使用
onnx
库验证模型是否按预期运行。
将 TensorFlow
格式转换为 ONNX
格式
请按照以下步骤将您的模型 TensorFlow
转换为ONNX格式:
导入库 :首先导入必要的库,例如
tf2onnx
,以便将TensorFlow
模型转换为ONNX,以及应用程序所需的其它库。下载
TensorFlow
模型 :您必须下载外部创建的TensorFlow
模型和用于训练模型的数据。将
TensorFlow
模型转换为ONNX格式 :使用tf2onnx.convert
命令将TensorFlow
格式的SavedModel
模型转换为ONNX
格式。 如果您想转换TensorFlow Lite
模型,请使用--tflite
标记代替--saved-model
标记。
Keras
模型和 函数可以通过使用 或 函数在 tf
tf2onnx.convert.from_keras
tf2onnx.convert.from_function
Python 中直接转换。
- 验证转换 :转换模型后,使用
onnx
库验证模型是否按预期运行。
将 CatBoost
模型转换为ONNX格式
按照以下步骤将 CatBoost
中训练好的模型转换为ONNX格式:
导入库 :首先导入必要的库,例如用于运行模型的
onnxruntime
、用于CatBoost
功能的catboost
以及应用程序所需的其他库。创建或下载
CatBoost
模型 :您可以使用自己的数据集创建CatBoost
模型,也可以使用外部开源模型库(如 Hugging Face )提供的模型。将
CatBoost
格式转换为ONNX
格式 :将CatBoost
格式转换为ONNX
格式:a. 加载
CatBoost
模型 :您可以加载CatBoost
通过使用以下库来建模pickle
:catboost_model = pickle.load(file)
b. 导出模型 :使用格式参数设置为
onnx
的catboost_model.save_model
函数将模型转换为ONNX
格式。catboost_model.save_model( onnx_model_name, format="onnx", export_parameters={ 'onnx_domain': 'ai.catboost', 'onnx_model_version': 1, 'onnx_doc_string': 'test model for Regressor', 'onnx_graph_name': 'CatBoostModel_for_Regression' } )
验证转换 :转换模型后,使用
onnx
库验证模型是否按预期运行。
将 LightGBM
模型转换为ONNX格式
请按照以下步骤将 LightGBM
格式的训练模型转换为 ONNX
格式:
导入库 :首先导入必要的库,例如用于运行模型的
onnxruntime
、用于LightGBM
功能的lightgbm
以及用于转换的onnxmltools
,以及您的应用程序所需的其它库。创建或下载
LightGBM
模型 :您可以使用自己的数据集创建LightGBM
模型,也可以使用外部开源模型库(如 Hugging Face )提供的模型。将
LightGBM
格式转换为ONNX
格式 :将LightGBM
格式转换为ONNX
格式:a. 加载
LightGBM
模型 :您可以加载LightGBM
通过使用以下库来建模pickle
:lgbm_model = pickle.load(file)
b. 导出模型 :使用
convert_lightgbm
功能将模型转换为ONNX
格式。from onnxmltools import convert_lightgbm from skl2onnx.common.data_types import FloatTensorType from onnxmltools.utils import save_model initial_types = [("float_input", FloatTensorType([None, X.shape[1]]))] onnx_model = convert_lightgbm(model=lgbm_model, initial_types=initial_types) onnx_model_filename = "lgbm_model.onnx" save_model(onnx_model, onnx_model_filename)
提示:有关将
LightGBM
格式转换为ONNX
格式的问题,请参阅 watsonx.ai 运行时故障排除。验证转换 :转换模型后,使用
onnx
库验证模型是否按预期运行。
将 XGBoost
格式转换为 ONNX
格式
请按照以下步骤将 XGBoost
格式的训练模型转换为 ONNX
格式:
导入库 :首先导入必要的库,例如用于运行模型的
onnxruntime
、用于XGBoost
功能的xgboost
以及应用程序所需的其他库。创建或下载
XGBoost
模型 :您可以使用自己的数据集创建XGBoost
模型,也可以使用外部开源模型库(如 Hugging Face )提供的模型。将
XGBoost
模型转换为ONNX格式 :将XGBoost
模型转换为ONNX格式:a. 加载
XGboost
模型 :您可以加载XGBoost
通过使用以下库来建模pickle
:xgboost_model = pickle.load(file)
b. 导出模型 :使用
convert_xgboost
功能将模型转换为ONNX
格式。from onnxmltools import convert_xgboost from onnxconverter_common.data_types import FloatTensorType from onnxmltools.utils import save_model initial_types = [("float_input", FloatTensorType([None, X.shape[1]]))] onnx_model = convert_xgboost(xgboost_model, initial_types=initial_types) onnx_model_filename = "xgboost_onnx_model.onnx" save_model(onnx_model, onnx_model_filename)
验证转换 :转换模型后,使用onnx库验证模型是否按预期运行。
将 scikit-learn
格式转换为 ONNX
格式
请按照以下步骤将 scikit-learn
格式的训练模型转换为 ONNX
格式:
导入库 :首先导入必要的库,例如用于运行模型的
onnxruntime
、用于scikit-learn
功能的sklearn
、用于转换的skl2onnx
以及应用程序所需的其他库。创建或下载
scikit-learn
模型 :您可以使用自己的数据集创建scikit-learn
模型,也可以使用外部开源模型库(如 Hugging Face )提供的模型。将
scikit-learn
模型转换为ONNX格式 :将scikit-learn
模型转换为ONNX
格式:a. 加载
scikit-learn
模型 :您可以加载scikit-learn
通过使用以下库来建模pickle
:sklearn_model = pickle.load(file)
b. 导出模型 :使用
to_onnx
功能将模型转换为ONNX
格式。from skl2onnx import to_onnx onnx_model = to_onnx(sklearn_model, X, target_opset=19) with open("sklearn_model.onnx", "wb") as f: f.write(onnx_model.SerializeToString())
验证转换 :转换模型后,使用
onnx
库验证模型是否按预期运行。
其他注意事项
以下是将您的模型转换为 ONNX
格式的一些额外注意事项:
动态轴 :动态轴可用于模型处理输入形状的变化,如动态批量大小或序列长度,这对在输入尺寸可能变化的应用中部署模型非常有用。 如果模型要处理可变的输入大小,如动态批量大小或序列长度,则使用动态轴。
动态轴还可以减少内存开销,因为它们可以与多个输入和输出一起使用,动态地进行调整,而无需重新导出模型。 您可以在
PyTorch
或TensorFlow
中指定模型导出时的动态轴。操作版本:
ONNX
中的操作版本决定了该模型支持的操作集及其规格。 这是模型转换和部署过程中的一个关键因素。不同的
ONNX
运行时间和框架支持特定的操作版本。 旧版本的 opset 可能缺少新版本中的功能或优化。 模型的偏移版本与ONNX
运行环境不兼容,可能会导致推理错误。 您必须确保所选的ONNX
操作版本受目标运行时支持。
将模型转换为 ONNX
格式
使用 onnxruntime_opset_19
软件规范部署转换为 ONNX
格式的机器学习模型。 当您将模型存储到 watsonx.ai 运行时库时,必须指定软件规格和型号类型。 更多信息,请参阅支持的软件规格。
要从用户界面部署转换为 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 模型 | PyTorch, ONNX | 使用数据集创建 PyTorch 模型。 将 PyTorch 模型转换为 ONNX 格式 将转换后的模型保存在 Watson Machine Learning资源库中。 使用客户端库部署在线评分模型。 使用客户机库对样本记录进行评分。 |
使用从 TensorFlow 转换而来的 ONNX 模型,用 watsonx 识别手写数字 | Tensorflow ,ONNX | 下载外部训练的 TensorFlow 模型和数据集。 将 TensorFlow 模型转换为 ONNX 格式 将转换后的模型保存在 Watson Machine Learning资源库中。 使用客户端库部署在线评分模型。 使用客户机库对样本记录进行评分。 |
使用从 CatBoost | CatBoost, ONNX | 训练有素的 CatBoost 模特。 将 模型转换为ONNX格式。 CatBoost Watson Machine Learning 资料库中已转换的模型。 使用客户端库部署在线评分模型。 使用客户机库对样本记录进行评分。 |
使用从 LightGBM | LightGBM, ONNX | 训练一个 LightGBM 模型 将 LightGBM 模型转换为ONNX格式 将转换后的模型保存在 watsonx.ai 运行时库中 使用客户端库部署模型以进行在线评分 使用客户端库对样本记录进行评分 |
使用ibm- watsonx -ai转换自XGBoost的ONNX模型 | XGBoost、ONNX | 训练XGBoost模型。 将XGBoost模型转换为ONNX格式。 将转换后的模型保存在 库中。 watsonx.ai 使用APIClient实例部署在线评分模型。 使用APIClient实例对样本记录进行评分。 |
使用ibm- watsonx -ai转换自scikit-learn的ONNX模型 | Scikit-learn、ONNX | 训练一个scikit-learn模型 将原生scikit-learn模型转换为ONNX格式 对sklearn管道中封装的自定义scikit-learn模型进行转换 将转换后的模型保存在 watsonx.ai 运行时库中 使用客户端库部署模型以进行在线评分 使用客户端库对样本记录进行评分 |
父主题: 部署机器学习资产