m2cgen

GitHub
3k 258 非常简单 1 次阅读 昨天MITAgent语言模型音频视频数据工具图像开发框架插件其他
AI 解读 由 AI 自动生成,仅供参考

m2cgen(Model 2 Code Generator)是一款轻量级开源库,旨在将训练好的机器学习模型直接转换为多种编程语言的原生代码。它支持包括 Python、Java、C、Go、JavaScript、Rust 在内的十余种主流语言,且生成的代码完全零依赖,无需安装任何额外的机器学习框架或运行时库即可运行。

在机器学习项目落地时,开发者常面临部署环境复杂、依赖包冲突或需要在资源受限设备(如嵌入式系统、移动端)运行模型的难题。m2cgen 通过将模型逻辑“翻译”为纯数学运算的代码,彻底消除了对重型库(如 scikit-learn、TensorFlow 等)的依赖,让模型能像普通函数一样轻松集成到任何现有系统中,极大降低了部署门槛和维护成本。

这款工具特别适合后端工程师、嵌入式开发者以及数据科学家使用。无论是需要将模型嵌入高性能服务,还是在无法安装 Python 环境的设备上运行预测,m2cgen 都能提供简洁高效的解决方案。其核心亮点在于广泛的模型支持(涵盖线性模型、SVM、决策树、随机森林及梯度提升树等)与跨语言转换能力,只需几行命令即可完成从训练模型到生产代码的无缝衔接,让算法落地变得更加简单纯粹。

使用场景

某金融科技公司需要将训练好的反欺诈评分模型部署到老旧的银行核心系统中,该系统仅支持运行原生 C 代码且严禁安装任何第三方依赖库。

没有 m2cgen 时

  • 环境依赖沉重:传统部署需搭建 Python 运行时并安装 scikit-learn、numpy 等重型库,但目标服务器因安全策略禁止安装新软件。
  • 跨语言重构风险高:开发人员必须手动将复杂的数学公式“翻译”成 C 代码,极易在转录过程中引入计算误差,导致模型效果失真。
  • 维护成本高昂:一旦模型需要迭代更新,整个手动重写代码的过程必须重复进行,严重拖慢业务响应速度。
  • 性能开销大:若强行通过 API 调用外部 Python 服务,网络延迟会增加交易耗时,无法满足毫秒级风控要求。

使用 m2cgen 后

  • 零依赖原生代码:m2cgen 直接将训练好的模型转换为纯原生 C 函数,无需任何外部库即可在老旧系统中编译运行。
  • 自动化精准转换:工具自动完成从 Python 模型到 C 代码的转译,消除了人工重写带来的逻辑错误,确保预测结果完全一致。
  • 敏捷迭代部署:模型更新时只需重新运行 m2cgen 生成新代码文件,几分钟内即可完成上线,大幅缩短开发周期。
  • 极致运行性能:生成的代码直接嵌入核心系统进程,消除了网络通信开销,实现了本地毫秒级实时推理。

m2cgen 的核心价值在于打破了机器学习模型与生产环境之间的语言壁垒,让复杂模型能以零依赖、高性能的原生代码形式无缝嵌入任意系统。

运行环境要求

GPU

未说明

内存

未说明

依赖
notes该工具是一个轻量级库,用于将训练好的统计模型转译为多种语言的本地代码。支持通过 pip 安装。若使用 CLI 加载序列化模型(pickle),需确保模型类定义在可导入模块的顶层。生成代码时若遇到递归深度错误,可减少集成模型中的估计器数量或调整 Python 递归限制。生成的代码主要基于 float64 (double) 数据类型,不同语言浮点运算实现可能导致微小差异。
python>=3.7
scikit-learn
lightning
statsmodels
xgboost
lightgbm
m2cgen hero image

快速开始

m2cgen

GitHub Actions Status Coverage Status License: MIT Python Versions PyPI Version Downloads

m2cgen(模型转代码生成器)—— 是一个轻量级库,提供了一种简便的方法,将训练好的统计模型转换为原生代码(Python、C、Java、Go、JavaScript、Visual Basic、C#、PowerShell、R、PHP、Dart、Haskell、Ruby、F#、Rust、Elixir)。

安装

支持的 Python 版本为 >= 3.7

pip install m2cgen

开发

在提交 PR 之前,请确保以下命令成功运行:

make pre-pr

或者,您也可以运行 Docker 版本的相同命令:

make docker-build docker-pre-pr

支持的语言

  • C
  • C#
  • Dart
  • F#
  • Go
  • Haskell
  • Java
  • JavaScript
  • PHP
  • PowerShell
  • Python
  • R
  • Ruby
  • Rust
  • Visual Basic(与 VBA 兼容)
  • Elixir

支持的模型

分类 回归
线性
  • scikit-learn
    • LogisticRegression
    • LogisticRegressionCV
    • PassiveAggressiveClassifier
    • Perceptron
    • RidgeClassifier
    • RidgeClassifierCV
    • SGDClassifier
  • lightning
    • AdaGradClassifier
    • CDClassifier
    • FistaClassifier
    • SAGAClassifier
    • SAGClassifier
    • SDCAClassifier
    • SGDClassifier
  • scikit-learn
    • ARDRegression
    • BayesianRidge
    • ElasticNet
    • ElasticNetCV
    • GammaRegressor
    • HuberRegressor
    • Lars
    • LarsCV
    • Lasso
    • LassoCV
    • LassoLars
    • LassoLarsCV
    • LassoLarsIC
    • LinearRegression
    • OrthogonalMatchingPursuit
    • OrthogonalMatchingPursuitCV
    • PassiveAggressiveRegressor
    • PoissonRegressor
    • RANSACRegressor(仅支持回归估计器作为基估计器)
    • Ridge
    • RidgeCV
    • SGDRegressor
    • TheilSenRegressor
    • TweedieRegressor
  • StatsModels
    • 广义最小二乘法(GLS)
    • 带有自回归误差的广义最小二乘法(GLSAR)
    • 广义线性模型(GLM)
    • 普通最小二乘法(OLS)
    • [高斯]过程回归,采用最大似然估计法(ProcessMLE)
    • 分位数回归(QuantReg)
    • 加权最小二乘法(WLS)
  • lightning
    • AdaGradRegressor
    • CDRegressor
    • FistaRegressor
    • SAGARegressor
    • SAGRegressor
    • SDCARegressor
    • SGDRegressor
SVM
  • scikit-learn
    • LinearSVC
    • NuSVC
    • OneClassSVM
    • SVC
  • lightning
    • KernelSVC
    • LinearSVC
  • scikit-learn
    • LinearSVR
    • NuSVR
    • SVR
  • lightning
    • LinearSVR
树模型
  • DecisionTreeClassifier
  • ExtraTreeClassifier
  • DecisionTreeRegressor
  • ExtraTreeRegressor
随机森林
  • ExtraTreesClassifier
  • LGBMClassifier(仅限 rf booster)
  • RandomForestClassifier
  • XGBRFClassifier
  • ExtraTreesRegressor
  • LGBMRegressor(仅限 rf booster)
  • RandomForestRegressor
  • XGBRFRegressor
提升算法
  • LGBMClassifier(仅限 gbdt/dart/goss booster)
  • XGBClassifier(仅限 gbtree(包括提升森林)/gblinear booster)
    • LGBMRegressor(仅限 gbdt/dart/goss booster)
    • XGBRegressor(仅限 gbtree(包括提升森林)/gblinear booster)

    您可以在此处找到 CI 测试保证兼容的软件包版本:requirements-test.txt。其他版本也可能受支持,但未经测试。

    分类输出

    线性 / 线性 SVM / 核 SVM

    二分类

    标量值;样本到第二类超平面的有符号距离。

    多分类

    向量值;样本到每个类别的超平面的有符号距离。

    注释

    输出与 LinearClassifierMixin.decision_function 的输出一致。

    SVM

    异常检测

    标量值;样本到分离超平面的有符号距离:对于内点为正,对于异常点为负。

    二分类

    标量值;样本到第二类超平面的有符号距离。

    多分类

    向量值;每对类别的一对一得分,形状为 (n_samples, n_classes * (n_classes-1) / 2)。

    注释

    decision_function_shape 设置为 ovo 时,输出与 BaseSVC.decision_function 的输出一致。

    树模型 / 随机森林 / 提升算法

    二分类

    向量值;各类别的概率。

    多分类

    向量值;各类别的概率。

    注释

    输出与 DecisionTreeClassifier / ExtraTreeClassifier / ExtraTreesClassifier / RandomForestClassifier / XGBRFClassifier / XGBClassifier / LGBMClassifierpredict_proba 方法的输出一致。

    使用方法

    以下是一个简单的示例,展示如何将用 Python 环境训练的线性模型转换为 Java 代码:

    from sklearn.datasets import load_diabetes
    from sklearn import linear_model
    import m2cgen as m2c
    
    X, y = load_diabetes(return_X_y=True)
    
    estimator = linear_model.LinearRegression()
    estimator.fit(X, y)
    
    code = m2c.export_to_java(estimator)
    

    生成的 Java 代码如下:

    public class Model {
        public static double score(double[] input) {
            return ((((((((((152.1334841628965) + ((input[0]) * (-10.012197817470472))) + ((input[1]) * (-239.81908936565458))) + ((input[2]) * (519.8397867901342))) + ((input[3]) * (324.39042768937657))) + ((input[4]) * (-792.1841616283054))) + ((input[5]) * (476.74583782366153))) + ((input[6]) * (101.04457032134408))) + ((input[7]) * (177.06417623225025))) + ((input[8]) * (751.2793210873945))) + ((input[9]) * (67.62538639104406));
        }
    }
    

    您可以在 这里 找到更多不同模型和语言的生成代码示例。

    命令行界面

    m2cgen 可以作为命令行工具使用,通过序列化模型对象(pickle 格式)生成代码:

    $ m2cgen <pickle_file> --language <language> [--indent <indent>] [--function_name <function_name>]
             [--class_name <class_name>] [--module_name <module_name>] [--package_name <package_name>]
             [--namespace <namespace>] [--recursion-limit <recursion_limit>]
    

    请注意,反序列化序列化模型对象时,其类必须在可导入模块的顶层定义,且需位于反序列化环境中。

    也支持管道输入:

    $ cat <pickle_file> | m2cgen --language <language>
    

    常见问题解答

    问:生成过程中出现 RecursionError: maximum recursion depth exceeded 错误。

    答:如果此错误发生在生成集成模型代码时,可以尝试减少该模型中训练的估计器数量。或者,您也可以通过 sys.setrecursionlimit(<new_depth>) 提高递归深度限制。

    问:从序列化模型对象转译模型时,出现 ImportError: No module named <module_name_here> 错误。

    答:此错误表明 pickle 协议无法反序列化模型对象。要成功反序列化序列化模型对象,其类必须在可导入模块的顶层定义,并且需要在反序列化环境中可用。因此,安装提供模型类定义的包通常可以解决此问题。

    问:由 m2cgen 生成的代码对于某些输入与原始 Python 模型的结果存在差异。

    答:一些模型在其原生 Python 库中会强制要求输入数据在预测阶段必须是特定类型。目前,m2cgen 仅支持 float64double)数据类型。您可以尝试手动将输入数据转换为其他类型,然后再次检查结果。此外,由于目标语言中浮点数运算的具体实现方式不同,也可能导致一些细微的差异。

    版本历史

    v0.10.02022/04/25
    v0.9.02020/09/18
    v0.8.02020/06/18
    v0.7.02020/04/07
    v0.6.02020/02/17
    v0.5.02019/12/01
    v0.4.02019/09/28
    v0.3.12019/08/15
    v0.3.02019/05/21
    v0.2.12019/04/17
    v0.2.02019/03/22
    v0.1.12019/03/05
    v0.1.02019/02/12

    常见问题

    相似工具推荐

    openclaw

    OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

    349.3k|★★★☆☆|昨天
    Agent开发框架图像

    stable-diffusion-webui

    stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

    162.1k|★★★☆☆|2天前
    开发框架图像Agent

    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 真正成长为懂上

    143.9k|★★☆☆☆|今天
    开发框架Agent语言模型

    ComfyUI

    ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

    107.9k|★★☆☆☆|昨天
    开发框架图像Agent

    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 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

    93.4k|★★☆☆☆|昨天
    插件开发框架

    LLMs-from-scratch

    LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

    90.1k|★★★☆☆|昨天
    语言模型图像Agent