onnxmltools
onnxmltools 是一款专为机器学习开发者设计的开源工具,核心功能是将各种主流框架训练的模型统一转换为 ONNX(开放神经网络交换)格式。在人工智能开发中,不同框架(如 TensorFlow、PyTorch、Scikit-learn 等)往往存在生态壁垒,导致模型部署和跨平台迁移困难。onnxmltools 有效解决了这一痛点,它充当了“通用转换器”的角色,支持将来自 Scikit-learn、LightGBM、XGBoost、CatBoost、Apple Core ML 甚至 Spark ML 等多种工具包的模型无缝转化为标准的 ONNX 格式,从而让模型能够在不同的推理引擎和硬件平台上流畅运行。
该工具特别适合需要处理多框架模型整合的算法工程师、后端开发人员以及致力于模型落地的研究人员。其独特亮点在于提供了高度集成的转换接口,例如对 TensorFlow 和 Scikit-learn 的支持分别封装了成熟的 tf2onnx 和 skl2onnx 转换器,同时允许用户通过指定 target_opset 参数来精确控制生成的 ONNX 版本,确保与特定运行环境的兼容性。无论是希望打破框架限制优化部署流程的开发者,还是需要在异构系统中复用模型的研究团队,onnxmltools 都能提供简洁高效的解决方案,助力实现“一次训练,到处运行”的目标。
使用场景
某金融科技公司需要将分散在数据科学团队手中的多个旧版机器学习模型(包括 scikit-learn、XGBoost 和 Core ML)统一集成到新的跨平台实时风控系统中。
没有 onnxmltools 时
- 格式孤岛严重:不同算法框架生成的模型文件格式互不兼容,后端工程团队必须为每种框架单独编写推理引擎,开发成本极高。
- 部署流程割裂:从苹果设备上的 Core ML 模型到服务器端的 XGBoost 模型,缺乏统一的转换标准,导致测试和验证工作重复且繁琐。
- 维护难度巨大:每当更新底层推理库时,需要同时维护多套代码逻辑,任何一处框架升级都可能导致整个系统崩溃。
- 性能优化受限:无法利用 ONNX Runtime 等通用高性能推理加速器,导致高并发场景下的响应延迟难以满足业务需求。
使用 onnxmltools 后
- 统一标准格式:通过 onnxmltools 一键将 scikit-learn、XGBoost 及 Core ML 等异构模型全部转换为标准的 ONNX 格式,消除了格式壁垒。
- 简化集成路径:无论模型源自何种框架,工程团队只需对接单一的 ONNX 推理接口,大幅缩短了从实验到生产环境的部署周期。
- 降低运维复杂度:模型管理变得集中化,后续只需关注 ONNX 版本的兼容性,不再受限于原始训练框架的特定依赖。
- 释放硬件潜能:转换后的模型可直接接入 ONNX Runtime,自动利用多核 CPU 或 GPU 加速,显著提升了风控系统的吞吐量与响应速度。
onnxmltools 通过打破机器学习框架间的“巴别塔”,让异构模型得以在统一的标准下高效流转与部署。
运行环境要求
- 未说明
未说明
未说明

快速开始

简介
ONNXMLTools 可以帮助您将来自不同机器学习工具包的模型转换为 ONNX 格式。目前支持以下工具包:
- TensorFlow(基于 tf2onnx 转换器)
- scikit-learn(基于 skl2onnx 转换器)
- Apple Core ML
- Spark ML(实验性支持)
- LightGBM
- libsvm
- XGBoost
- H2O
- CatBoost
PyTorch 自带 ONNX 导出功能,详情请参阅 这里。
安装
您可以从 PyPi 安装最新版本的 ONNXMLTools:
pip install onnxmltools
或者直接从源代码安装:
pip install git+https://github.com/onnx/onnxmltools
如果您选择从源代码安装 onnxmltools,则必须在安装 onnx 包之前设置环境变量 ONNX_ML=1。
依赖项
本包依赖于 ONNX、NumPy 和 ProtoBuf。如果您要转换 scikit-learn、Core ML、Keras、LightGBM、SparkML、XGBoost、H2O、CatBoost 或 LibSVM 的模型,则需要确保环境中已安装相应的库:
- scikit-learn
- CoreMLTools(版本 3.1 或更低)
- Keras(版本 2.0.8 或更高)及对应的 TensorFlow 版本
- LightGBM
- SparkML
- XGBoost
- libsvm
- H2O
- CatBoost
ONNXMLTools 已在 Python 3.7+ 上进行测试。
示例
如果希望转换后的 ONNX 模型与特定的 ONNX 版本兼容,请在调用转换函数时指定 target_opset 参数。下面的 Keras 模型转换示例展示了这一点。您可以在 版本控制文档 中找到 ONNX 操作集(称为 opsets)与 ONNX 发布版本之间的对应关系。
Keras 到 ONNX 的转换
接下来,我们展示一个将 Keras 模型转换为 ONNX 模型的例子,其中 target_opset=7,对应 ONNX 发布版本 1.2。
import onnxmltools
from keras.layers import Input, Dense, Add
from keras.models import Model
# N:批次大小,C:子模型输入维度,D:最终模型输入维度
N, C, D = 2, 3, 3
# 定义一个子模型,它将成为我们最终模型的一部分
sub_input1 = Input(shape=(C,))
sub_mapped1 = Dense(D)(sub_input1)
sub_model1 = Model(inputs=sub_input1, outputs=sub_mapped1)
# 定义另一个子模型,它将成为我们最终模型的一部分
sub_input2 = Input(shape=(C,))
sub_mapped2 = Dense(D)(sub_input2)
sub_model2 = Model(inputs=sub_input2, outputs=sub_mapped2)
# 定义一个基于前两个子模型的模型
input1 = Input(shape=(D,))
input2 = Input(shape=(D,))
mapped1_2 = sub_model1(input1)
mapped2_2 = sub_model2(input2)
sub_sum = Add()([mapped1_2, mapped2_2])
keras_model = Model(inputs=[input1, input2], outputs=sub_sum)
# 开始转换!`target_opset` 参数是可选的。
onnx_model = onnxmltools.convert_keras(keras_model, target_opset=7)
CoreML 到 ONNX 的转换
以下是一个简单的代码片段,用于将 Core ML 模型转换为 ONNX 模型。
import onnxmltools
import coremltools
# 加载一个 Core ML 模型
coreml_model = coremltools.utils.load_spec('example.mlmodel')
# 将 Core ML 模型转换为 ONNX
onnx_model = onnxmltools.convert_coreml(coreml_model, 'Example Model')
# 保存为 protobuf 格式
onnxmltools.utils.save_model(onnx_model, 'example.onnx')
H2O 到 ONNX 的转换
以下是将 H2O MOJO 模型转换为 ONNX 模型的代码片段。唯一的先决条件是本地文件系统中已保存 MOJO 模型。
import onnxmltools
# 将 Core ML 模型转换为 ONNX
onnx_model = onnxmltools.convert_h2o('/path/to/h2o/gbm_mojo.zip')
# 保存为 protobuf 格式
onnxmltools.utils.save_model(onnx_model, 'h2o_gbm.onnx')
测试模型转换器
onnxmltools 可以将模型转换为 ONNX 格式,随后您便可以使用任意后端来执行预测。
检查转换后 ONNX 模型的操作集版本
您可以通过 Netron,一款神经网络模型查看器,来检查转换后 ONNX 模型的操作集版本。此外,您也可以通过以下代码行确定转换后模型的操作集版本:
opset_version = onnx_model.opset_import[0].version
如果检查结果低于您在 onnxmltools.convert 函数中指定的 target_opset 值,这通常是预期行为。ONNXMLTools 转换器会逐个将操作符转换为 ONNX 格式,并为其找到最近更新的操作集版本。当所有操作符都转换完毕后,生成的 ONNX 模型将采用其包含的所有操作符中的最高操作集版本。
为了更具体地说明这一点,我们考虑一个包含 Abs 和 Add 两个操作符的模型。截至 2018 年 12 月,Abs 最近一次更新是在 opset 6,而 Add 最近一次更新是在 opset 7。因此,即使您请求 target_opset=8,转换后的 ONNX 模型的操作集版本也将始终是 7。这种转换行为是为了确保向后兼容性而设计的。
有关 ONNX 模型格式 的文档以及更多来自不同框架的模型转换示例,可在 ONNX 教程 仓库中找到。
测试所有现有转换器
所有转换器的单元测试都可以自动生成原始模型和转换后的模型,并使用 onnxruntime 或 onnxruntime-gpu 自动进行验证。这些单元测试案例均为标准的 Python 单元测试,您可以通过 pytest 命令行运行,例如:
python -m pytest --ignore .\tests\
大多数模型的测试需要 onnxruntime 和 numpy;与文本特征相关的转换则需要 pandas;稀疏特征则需要 scipy。还有一个测试需要 keras 来测试自定义操作符,这意味着也需要 sklearn 或其他机器学习库。
添加一个新的转换器
一旦转换器实现完毕,就会添加一个单元测试来确认其正常工作。在单元测试的最后,必须调用函数 dump_data_and_model 或任何等效函数,以导出预期的输出和转换后的模型。这些文件生成后,还需在 tests_backend 中添加相应的测试,以便使用运行时计算预测结果。
许可证
版本历史
1.16.02026/01/30v1.15.02026/01/14v1.15.0rc12026/01/071.14.02025/06/10v1.132024/12/171.12.02023/12/16v1.11.22023/03/071.11.12022/06/101.11.02022/04/111.10.02021/10/221.9.12021/08/231.9.02021/08/201.8.02021/02/19v1.7.02020/06/08v1.6.52020/01/30v1.6.02019/11/06v1.5.12019/10/04v1.5.02019/06/11v1.4.12019/04/18v1.4.0-rc12019/04/02相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器