ctcdflow代码框架流程框架12

ctcdflow代码框架

流程框架

1
2
3
4
5
6
st1=>start: ctcdflow framework
e=>end: category implement
op1=>operation: opreation dict
op2=>operation: category factory
st1->op1
op1->op2

framework概述

framework基于python的argparse的子命令方式,将各个step的任务处理进行了解耦

以下是framework下的目录架构除tools目录外其他每个目录代表ctcd流程中的某一步step,与该操作相关的所有代码文件都聚合到该目录下,每一个step作为一个插件接入到framework里。

├── engine_deploy
├── model_deploy
├── model_evaluate
├── model_predict
├── model_prepare
├── model_recycle
├── model_train
├── serving_check
└── tools
如果需要新增子命令时,只需要遵循相关的插件定义方式即可

1
2
3
4
5
6
7
8
9
10
OP_DICT = {
'model_train': ModelTrainOp(),
'model_prepare': ModelPrepareOp(),
'model_predict': ModelPredictOp(),
'model_evaluate': ModelEvaluateOp(),
'model_deploy': ModelDeployOp(),
'model_recycle': ModelRecycleOp(),
'serving_check': ServingCheckOp(),
'engine_deploy':EngineDeployOp()
}

然后具体到每个Step内部,代码结构如下:

├── factory.py
├── op.py
├── base
├── fm
├── lr

op.py:
其中op.py中定义了step接入framework的方式,其中包括

  • 定义framwork中与该step相关的输入参数
  • 定义framwork调用该step时的入口操作函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class ():

    def set_argument(subparser):
    subparser.add_argument('--model_name',help = "model name")
    subparser.add_argument('--model_version',help= "model version")
    subparser.set_defaults(func = ModelPrepareOp.run)

    def run(args):
    module_logger.info("args:%s" % args)
    instance = ModelPrepareFactory.create(args.model_source)
    instance.init(args)
    instance.process()

factory.py:
因为每个step执行时,根据某些类型不一致,具体的执行流程也不一致,以上述例子为例,不同的算法对应不同的执行流程。所以在这里定义了定义了工厂类,根据入参来反射查找对应的执行类
base:
base目录下存储了通用的操作定义,所有具体执行类的基础类接口interface也在此定义;具体执行类必须继承自interface接口进行重载实现。在上述例子中fm与lr目录下即存放了具体执行子类的代码逻辑

step 操作说明

model_prepare

模型准备,在weips模式下,内部流程包括模型保存、模型转化、模型库注册等

model_evaluate

模型评估

model_deploy

模型部署

engine_deploy