Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
luoyangustc opened this issue Nov 21, 2022 · 16 comments
Open

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

luoyangustc opened this issue Nov 21, 2022 · 16 comments

Comments

@luoyangustc
Copy link

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
Copy link
Contributor

pymumu commented Nov 24, 2022

  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
Copy link
Author

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

@luoyangustc
Copy link
Author

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

@pymumu
Copy link
Contributor

pymumu commented Nov 29, 2022

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

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

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

@luoyangustc
Copy link
Author

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

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

@pymumu
Copy link
Contributor

pymumu commented Nov 29, 2022

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

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

@luoyangustc
Copy link
Author

luoyangustc commented Nov 29, 2022

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

@pymumu
Copy link
Contributor

pymumu commented Nov 29, 2022

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

@luoyangustc
Copy link
Author

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

@pymumu
Copy link
Contributor

pymumu commented Nov 30, 2022

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

@luoyangustc
Copy link
Author

luoyangustc commented Dec 1, 2022

嗨,还有几个问题想请教:
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
Copy link
Contributor

pymumu commented Dec 2, 2022

  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
Copy link
Author

Thanks a lot !

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

@WOM89757
Copy link

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

@pymumu
Copy link
Contributor

pymumu commented Apr 23, 2023

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

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

@WOM89757
Copy link

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

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

好的 感谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants