ArkFlow+ Python : 轻松实现实时 AI - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
chenquan
V2EX    程序员

ArkFlow+ Python : 轻松实现实时 AI

  •  
  •   chenquan
    chenquan 123 天前 2080 次点击
    这是一个创建于 123 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天,我们怀着激动的心情,向您隆重介绍 ArkFlow 流处理引擎的一项革命性更新:全面支持 Python 处理器! 这不仅仅是一次简单的功能迭代,它标志着我们向着更智能、更易用、更强大的实时数据处理迈出了坚实的一步。我们深知 Python 在人工智能和机器学习领域的巨大影响力及其庞大的生态系统。现在,通过 ArkFlow ,您可以将这一切无缝融入到高性能的实时流处理管道中。

    当今数据环境的显著特征是持续不断、高速涌现的数据流,这些数据流源自物联网设备、用户交互行为、金融交易系统、传感器网络等多种渠道。传统的批处理方法虽然适用于历史数据分析,但在需要即时洞察和快速响应的场景下则显得力不从心。人工智能 (AI) 和机器学习 (ML) 模型本身具有强大的分析能力,同时,我们坚信,只有当它们应用于实时流动的数据时,其商业价值可以达到最大程度的释放。在数据抵达的瞬间即能完成推理、侦测异常或理解语言,这已逐渐成为各行各业建立竞争优势的关键能力。

    尽管一些讨论指出,并非所有历史应用场景都严格要求真正的实时处理,但当前的趋势和特定需求明确指向了实时 AI 能力的重要性。正如我们所认同的,“流动的数据能够产生更大的价值” 。特别是在欺诈检测等领域,传统的批处理方法已“不再有效”,而流处理平台(如 Kafka )在赋能实时分析方面扮演着核心角色。

    我们追求的实时性,其核心不仅仅在于速度,更在于洞察的 时效性。在诸如欺诈侦测、算法交易或关键系统监控这类动态变化的操作环境中,一个哪怕仅仅延迟数秒的洞察,其价值也可能完全丧失。AI 模型产生的预测、分类或其他形式的可操作洞察,其价值在许多关键业务和运营场景中会随着时间的推移而急剧衰减。因此,我们致力于让您能够在数据流入的同时即刻处理并应用 AI 算法,这对于最大化这些洞察的效用和影响力至关重要。这就对底层技术平台提出了严苛要求,也正是我们打造 ArkFlow 的初衷提供能够无缝融合高性能流处理与复杂 AI 模型执行的解决方案。

    Python 处理器

    Python 处理器它显著降低了主要使用 Python 的广大数据科学家和机器学习工程师群体部署其模型和算法于高吞吐、低延迟流处理应用中的门槛。以往,这通常需要开发者在 Rust 、Java/Scala 等用于构建流处理器的系统语言方面拥有深厚专业知识,或者需要处理复杂的集成层。我们相信,这种新获得的可访问性,有望加速实时 AI 解决方案在各行各业的采纳和创新。其中,PyArrow 的运用是我们实现这一目标的关键技术支撑,它确保了 Rust 核心与 Python 处理器之间数据交换的高效性,从而维持了整体性能。在传统上,AI 模型开发和实时流处理部署往往是复杂的,需要 AI 和流处理系统(如 Flink/Spark 内部机制)两方面的专业技能。Python 作为 AI/ML 开发的主导语言,拥有庞大的人才储备和丰富的库。通过允许在高性能流处理器内部直接使用 Python ,ArkFlow 减少了开发者为实现其 AI 逻辑而学习新语言(如 Rust )或复杂集成模式的需求,从而使更广泛的开发者能够更容易地构建实时 AI 应用。PyArrow 在此过程中扮演了至关重要的角色,它提供了在 ArkFlow 的 Rust 核心和 Python 处理器之间高效、标准化地迁移数据的方式,最大限度地减少了在多语言系统中通常会导致性能下降的序列化开销。

    ArkFlow 中 Python 处理器的运作机制

    此项集成的一个关键方面是我们利用 PyArrow 库进行数据交换 。Apache Arrow 及其 Python 绑定 PyArrow ,提供了一种与语言无关的列式内存格式。这种格式专为不同进程和系统之间的高效数据共享而设计,通常能够实现数据的零拷贝(或近乎零拷贝)访问。在 ArkFlow (一个 Rust 应用程序)及其 Python 处理器的上下文中,Arrow 格式将允许结构化数据(例如记录批次或数据帧)以最小的序列化和反序列化开销从 Rust 环境传递到 Python 进程(反之亦然)。这对于在跨越语言边界时保持性能至关重要。

    ArkFlow 的 Rust 核心与其 Python 处理器之间的数据交换选择 PyArrow ,有力地表明了我们项目即便在引入外部语言运行时的情况下,依然致力于保持高性能。如果没有像 Apache Arrow 这样高效的数据交换机制,在 Rust 和 Python 之间传递数据(例如,通过序列化为 JSON 或 pickle ,然后再反序列化)所产生的开销,很容易抵消基于 Rust 的快速核心引擎所带来的性能优势,尤其是在处理高容量、低延迟的数据流时。不同编程语言(如 Rust 和 Python )之间的进程间通信 (IPC) 或外部函数接口 (FFI) 如果需要数据在每种语言原生的不同内存布局或数据格式之间进行反复复制和转换,可能会引入显著的性能开销。Apache Arrow 定义了一种标准化的、与语言无关的列式内存格式,该格式针对分析数据处理和高效数据移动进行了优化。当生产方( ArkFlow 的 Rust 核心)和消费方( Python 处理器)都能以 Arrow 格式读写数据时,数据通常可以在零拷贝或最小拷贝的情况下共享或传输,从而显著降低跨语言边界的开销。这种数据交换效率对于实时 AI 应用至关重要,因为在这些应用中,每一毫秒的延迟都很关键。因此,采用 Arrow 使得 Python 不仅仅适用于流内那些不重要的脚本任务;它为以可接受的性能特征执行复杂的 AI 模型推理和其他计算密集的 Python 代码打开了大门。

    在流处理上下文中释放 Python 的 AI 生态潜力

    我们在 ArkFlow 中引入 Python 支持的明确战略意图是,使用户能够直接在其流处理管道中“调用任何 Python 机器学习/深度学习库( TensorFlow, PyTorch 等)和大型模型。这凸显了 Python 集成的巨大战略价值。这意味着开发者、数据科学家和机器学习工程师现在可以直接在 ArkFlow 的高性能流处理环境中利用他们现有的 Python 技能、熟悉的工具、预训练模型以及庞大且成熟的 Python AI 生态系统。我们相信,这种能力有望极大地加速复杂实时 AI 应用的开发周期和部署。

    Python 在高性能流处理器(如 ArkFlow )中的深度集成,可能会催生一类新型的“流原生”AI 应用。在这种模式下,AI 模型不再仅仅是应用于从流中批量导出的数据的外部组件,而是被设计和部署为数据流本身内部不可或缺的、活跃的组成部分。传统上,AI 模型开发(主要在 Python 中进行)和实时流处理(通常在 Java/Scala 中进行)的世界在某种程度上是分离的。在高性能流中部署 Python AI 模型通常涉及数据批处理、使用效率较低的 IPC ,或需要大量的自定义集成工作。ArkFlow 的原生 Python 处理器支持允许用 Python 编写的 AI 逻辑成为流处理管道内的一等公民一个“处理器”,直接与数据流交互。这种紧密的集成有助于构建这样的系统:AI 不仅仅是流数据的被动消费者,而且是流内部处理、决策甚至实时修改流行为的积极参与者。

    ArkFlow:基于 Python 的实时 AI 应用场景

    我们注意到在数据流中直接运行机器学习模型(如 TensorFlow, ONNX ),以实现毫秒级预测与分析的需求。在 ArkFlow 中,实例化于管道内的 Python 处理器被配置为加载预训练的机器学习模型。这些模型可以采用多种标准格式,例如 TensorFlow SavedModel 、ONNX 图或 PyTorch (.pt 或 .pth) 文件。来自数据流的输入数据记录,在可能经过上游 ArkFlow 原生处理器(例如,用于数据清洗、特征提取或格式转换)的预处理后,通过 PyArrow 高效地传递给 Python 进程。Python 处理器内的脚本利用相应 AI 框架的运行时(例如 TensorFlow 的 predict 方法、ONNX Runtime 会话的 run 、PyTorch 的 forward 前向传播)对接收到的数据执行推理。推理结果例如预测值、分类结果、嵌入向量或其他模型输出随后再次使用 PyArrow 从 Python 进程传递回 ArkFlow 管道,用于后续的下游处理、路由到输出端或触发进一步的动作。

    这种能力使得在实时数据上实现真正的毫秒级延迟预测和分析成为可能。这对于需要即时响应的广泛应用至关重要,例如,在实时视频帧中识别物体或事件,在潜在欺诈性金融交易 完成之前 将其标记出来,做出超快速的算法交易决策,或即时个性化用户体验。ArkFlow 支持这些框架的意图在我们多个信息源中均有明确说明。为了详细说明这些框架通常如何针对推理进行优化( ArkFlow 现在已能在流内实现这一点),可以参考一些通用概念,例如 TensorFlow 的图冻结、推理优化、量化、JIT/AOT 编译,以及 ONNX Runtime 的跨平台执行、模型导出和硬件加速能力。AWS Elastic Inference 支持 TensorFlow 和 ONNX 也从侧面印证了这些技术在加速推理方面的行业应用。

    以一个制造质量控制系统为例:来自装配线上产品的图像流被馈送到 ArkFlow 。每张图像都被传递给一个 Python 处理器。该处理器加载一个预训练的 ONNX 或 TensorFlow 计算机视觉模型(例如,YOLO 变体或 ResNet 分类器)以检测缺陷。如果识别出缺陷,模型输出(例如,缺陷类型、位置、置信度得分)将被传回。然后,ArkFlow 可以在图像捕获后的毫秒内立即触发警报、转移有缺陷的产品或记录问题。

    然而,我们必须指出,实现用户查询中所期望的持续“毫秒级”推理延迟,是一项重大的技术挑战。它在很大程度上取决于 AI 模型的复杂性、输入数据的大小、Rust-Python 互操作层的效率以及整体管道设计等多种因素。虽然 ArkFlow 的 Rust 核心和 PyArrow 的使用为低延迟奠定了必要的基础,但用户仍需严格优化其 AI 模型以提高推理速度。毫秒级延迟对数据传输、预处理、模型推理和后处理的整个过程都设定了非常紧张的时间预算。尽管 ArkFlow 的核心引擎为速度而设计,但 Python 执行(尤其是对于复杂模型)可能会较慢。因此,需要采用模型量化(降低数值精度,例如降至 INT8 3 )、图剪枝或融合等技术,并选择轻量级模型架构。PyArrow 在最小化 Rust-Python 边界数据传输开销方面也至关重要。因此,实现一致的毫秒级预测需要一个整体方法,包括用户的模型工程和优化。

    github:https://github.com/arkflow-rs/arkflow/releases/tag/v0.4.0-rc1

    docs: https://arkflow-rs.com/docs/next/components/processors/python

    12 条回复    2025-06-16 18:08:44 +08:00
    xgdgsc
        1
    xgdgsc  
       122 天前 via Android
    考虑支持下 Julia 不
    chenquan
        2
    chenquan  
    OP
       121 天前
    @xgdgsc 暂时没有这个计划哈。能说一下想支持 Julia 的原因吗?
    dododada
        3
    dododada  
       121 天前
    工作流节点直接调用本地模型?
    chenquan
        4
    chenquan  
    OP
       121 天前
    @dododada 是的通过 Python 直接调用本地模型
    dododada
        5
    dododada  
       121 天前
    海康的 vision-master 就是这么个模式,不同的是那套软件是直接对接硬件的;

    有个问题,你们的数据是直接吐给模型,还是要转换?如果要转换的话,还是有损失的;

    另外从业务上来看,几乎所有的工作流工具的节点都是使用通信的模式调用模型服务,也许是从运维方面考虑的?从互联网业务运维上划分来看的话,通信利于管理,至少扩容方便;如果你这套东西用在互联网应用,是做单体?

    看了你的制造质检的例子,也许你们就是搞工业的?
    specture
        6
    specture  
       121 天前
    https://github.com/windmill-labs/windmill 有什么区别吗?有没有生产落地案例?
    chenquan
        7
    chenquan  
    OP
       121 天前
    @dododada
    Q: 有个问题,你们的数据是直接吐给模型,还是要转换?如果要转换的话,还是有损失的;
    A: 调用算法模型,还是需要转换的,但是少了网络和一部分序列化开销

    Q: 看了你的制造质检的例子,也许你们就是搞工业的?
    A: 大差不差,我本人主要是做物联网这块

    目前我认为这种方式适合轻量级的算法应用(单个节点就能快速完成计算)。如果是用在互联网应用中可以部署多个节点,就跟 kafka 消费者类似。
    但是如果一个数据进来后需要调用一个集群的资源来计算结果,那肯定就不适用于这个了。不过真遇到这种情况也可以考虑使用 python 调用外部模型服务器来解决。
    chenquan
        8
    chenquan  
    OP
       121 天前
    @specture
    1. arkflow 更强调流式计算。windmill 我不太了解,初步看了它更专注于业务流程编排
    2. 目前还没有正在的生产落地,不过已经有国外的公司在测试环境使用了。
    dododada
        9
    dododada  
       121 天前
    @chenquan 那有计划集成各家光机电的 sdk 么?或者是插件的入口?
    chenquan
        10
    chenquan  
    OP
       121 天前
    @dododada
    哈喽,不太了解你这里说的 [各家光机电的 sdk] 具体是什么内容哈。
    不过已经规划了 arkflow 插件机制 [https://github.com/arkflow-rs/arkflow/tree/main/crates/arkflow-core/src] ,通过插件可以自己定义任何的输入、处理、输出、缓存层等的内容。目前插件机制的对外签名,还未稳定,后期可能随着版本变动,不过变动不会太大,修改起来也不会太麻烦。

    插件参考: https://github.com/arkflow-rs/arkflow-plugin-examples
    xgdgsc
        11
    xgdgsc  
       121 天前 via Android
    chenquan
        12
    chenquan  
    OP
       121 天前 via Android
    @xgdgsc 方便的话,帮忙提个 issue 呗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5512 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 06:34 PVG 14:34 LAX 23:34 JFK 02:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86