modelbox-ai / modelbox

A high performance, high expansion, easy to use framework for AI application. 为AI应用的开发者提供一套统一的高性能、易用的编程框架,快速基于AI全栈服务、开发跨端边云的AI行业应用,支持GPU,NPU加速。
https://modelbox-ai.com
Apache License 2.0
133 stars 38 forks source link

关于架构图的一些请教 #332

Open luoyangustc opened 1 year ago

luoyangustc commented 1 year ago

https://github.com/modelbox-ai/modelbox/blob/main/docs/Design.md 1、APP Server 业务服务组件,包含IVA,OCR等服务组件,IVA为C++接口,OCR为python接口。 其中IVA业务为异步业务,OCR为同步数据业务。

对于上述说明看起来很模糊, 可以在详细一点么,或者可以贴出对应的代码在哪?

2、Adapter层中Device Adapter 和 inference adapter 在代码库的位置可以贴一下么?

pymumu commented 1 year ago
  1. 这个是对业务的描述,当前代码仓是modelbox框架的代码。 IVA是华为云modelarts上的对接组件,还未开源,这块代码仓在:https://github.com/modelbox-ai/modelbox-modelarts-plugin,代码还在开源整理中。 OCR这部分代码也还没开源,这部分也在开源整理,代码仓:https://github.com/modelbox-ai/modelbox-solutions modelbox框架内置了一个mnist的OCR例子,那个可能更容易理解:https://github.com/modelbox-ai/modelbox/tree/main/examples/project/mnist-mindspore

  2. 这些代码在https://github.com/modelbox-ai/modelbox/tree/main/src/drivers目录中 device: CPU:https://github.com/modelbox-ai/modelbox/tree/main/src/drivers/devices/cpu/core CUDA:https://github.com/modelbox-ai/modelbox/tree/main/src/drivers/devices/cuda/core Ascend:https://github.com/modelbox-ai/modelbox/tree/main/src/drivers/devices/ascend/core

    inference: https://github.com/modelbox-ai/modelbox/tree/main/src/drivers/virtual/inference

luoyangustc commented 1 year ago

OK ,非常感谢!有问题再随时请教!

luoyangustc commented 1 year ago

你好,有资料介绍不同node之间数据如何交互的细节么?

pymumu commented 1 year ago

这个比较细节了,文档没有相关描述。

node之间目前是通过队列传递数据的,每个node的input都有一个队列。 队列有数据就会出发node处理数据。队列满时,就会阻塞上一个node的执行。

队列的执行可以参考这个https://github.com/modelbox-ai/modelbox/blob/main/docs/Design.md#runner

luoyangustc commented 1 year ago

嗯谢谢;对于队列的数据,每次处理如何确定batchsize的大小,即每次是如何获取多少数据处理的,这个是框架有默认值还是有自己的策略;

另外框架对于每个功能单元flowunit 生命周期是如何管理的?(其中我理解node 和 flowunit是1V1的关系,flowunit是node的一个动态概念,不知道这样理解对么),如果一个flowunit 处理数据时崩溃了(可能是数据原因也可能是自身原因),这时框架是怎么处理的?🙏

pymumu commented 1 year ago

batchsize通过1. 图的配置。2. 推理toml文件。 每次处理数据的时候,队列的数据<batcsize的情况,获取实际的数据个数处理(部分推理flowunit会padding到batch处理),队列数据大于batch,只会获取batch个数据。

一个node可能对应多个flowunit,称为flowunitgroup。多个flowunit一般是和设备个数关联的。 一个flowunit处理数据异常,只会影响到对应数据所关联的session。不会对其他数据有影响。

luoyangustc commented 1 year ago

但是一个node在运行时只能对应一个flowunit吧,比如要么是在CPU上运行,要么在Ascend上运行? 如果是对应多个设备,怎么确定执行的时候调度到哪个设备上运行呢?

pymumu commented 1 year ago

有负载均衡算法处理。前提是flowunit支持在这些设备上运行。

luoyangustc commented 1 year ago

node、virtual_node/ driver、virtual_driver的区别是?分别作用是?

pymumu commented 1 year ago

virtual的都是没有直接实体so对应的。input/output这类node就是virtual-node virtual-driver这个是一个抽象层,比如python的flowunit就是通过virtual配合脚本实现多个业务功能单元。对应的还有推理这类的功能单元。

luoyangustc commented 1 year ago

嗨,还有几个问题想请教: 1、driver 和flowunit的区别是啥?我看driver 是对应每一个so文件,flowunit也是, 比如resize,httpserver_sync_receive等等; 2、每个节点上有端口的概念,端口分为EventPort,InputPort、OutputPort、ExternalPort, InputPort 、 OutputPort我理解对应的是一个节点的输入输出,EventPort、ExternalPort 是干嘛的,在什么场景下使用的? 3、每个flowunit是由线程池的线程执行的,对应的线程如果处理数据失败了,会怎么处理,比如说mnist这个案例,mnist_preprocess这个flowunit 处理数据失败了,框架会怎么做; 如过这个线程因为某种原因core dump了,框架又会怎么处理,会重新拉起一个线程么? 4、节点除了分为功能节点,还有输入输出节点(端口,我看文档上叫端口,好容易和节点上端口的概念搞混😂)两类,这两个节点是怎么使用的,一般在什么场景下能用到这两类节点,我看mnist 和 emotion 都没有这两种类型的节点;

pymumu commented 1 year ago
  1. driver是管理so文件的。flowunit是对node提供的功能,由driver承载。flowunit只是driver中的一个类别。其他类别还有device-driver管理内存,input/output broker输入,输出。
  2. event port是自己给自己发送处理消息的。externalport是外部数据输入,eventport比如读取本地文件的时候使用。external的话,是在modelbox作为sdk的时候,外部输入数据使用。
  3. 数据失败只会更改数据归属会话的状态,不会影响线程的执行情况。如果是cordump了,modelbox会打印调用栈后退出。
  4. 端口是归属node的。一个node可以有多个端口。
  5. 除去https外,输入输出的要结合modelbox-plugin使用,或者使用sdk模式使用。
luoyangustc commented 1 year ago

Thanks a lot !

2. event port是自己给自己发送处理消息的。externalport是外部数据输入,eventport比如读取本地文件的时候使用。external的话,是在modelbox作为sdk的时候,外部输入数据使用。 event port 里缓存的是什么消息,作用是什么?什么情况会自己发送给自己处理消息?

WOM89757 commented 1 year ago

您好,我这边想请教一个问题,如果当图结构是这样时: image output_broker_pre node有两个输出端口都有数据push进buffer list时, 下面的两个output_broker object_output_broker node都可以被执行,并获取到传过来的数据. 但是当output_broker_pre节点的out_event_data端口没有数据,out_object_data有数据的时候, 下面两个节点是不被执行的. 只有当这两个端口同时有数据的时候,下面的节点才可以被执行. 请问我这样理解是对的吗?如果我需要解决这个问题,应该具体看一下哪一部分的代码呢?

pymumu commented 1 year ago

https://modelbox-ai.com/modelbox-book/basic-conception/flowunit.html#%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86 看看这里。

默认要求两个output都要有数据。否则的话,应该要改变节点类型。

WOM89757 commented 1 year ago

https://modelbox-ai.com/modelbox-book/basic-conception/flowunit.html#%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86 看看这里。

默认要求两个output都要有数据。否则的话,应该要改变节点类型。

好的 感谢