文档首页> AI开发平台ModelArts> 开发环境> ML Studio> 算子操作> 自定义算子代码模板和规范
更新时间:2023-05-05 GMT+08:00
分享

自定义算子代码模板和规范

自定义算子代码模板

新建自定义算子时,MLS Editor提供了代码模板,方便用户高效开发算子

class MLSClassName:
    # init parameters
    def __init__(self,
                 inputs,
                 param_1,
                 param_2):
        self.inputs = inputs
        self.param_1 = param_1
        self.param_2 = param_2
        self.upper_output = None
        self._outputs = {}

    # core code for customized algorithm
    def run(self):
        # get upper output of workflow
        self.upper_output = self.inputs["upper_output"]

        # ...core code...

        # output format
        self._outputs = {
            "output_port_1": "output_result"
        }

    # user called method for getting algorithm result
    def get_outputs(self):
        return self._outputs


# call form for algorithm
inputs = {
    "upper_output": None  #@input {"type":"DataFrame"}
}
params = {
    "inputs": inputs,
    "param_1": "param_value_1",  #@param {"label":"param_1","type":"string","required":"false","helpTip":""}
    "param_2": "param_value_2",  #@param {"label":"param_1","type":"enum","options":"one,two,three","required":"true","helpTip":""}
    "param_3": "param_value_3",  #@param {"label":"param_1","type":"integer","range":"(0,none)","required":"true","helpTip":""}
    "param_4": "param_value_4"  #@param {"label":"param_1","type":"number","range":"(0,1)","required":"true","helpTip":""}
}
mls_instance_#id# = MLSClassName(**params)
mls_instance_#id#.run()
#@output {"label":"dataframe","name":"mls_instance_#id#.get_outputs()['output_port_1']","type":"DataFrame"}

输入设置编写指引

如代码模板所示,上游算子的输出作为该算子的输入,通过字典inputs的形式传给类对象,从而实现算链上游算子和当前算子的数据传递。

#@input标记,能够触发前端的界面响应,实现该算子的输入端口的定义,从而和上游算子相同类型的输出端口相连。

参数设置编写指引

如代码模板所示,算子的各种参数封装在类的__init__函数里面,通过将字典params传给类对象来实现参数输入

#@param标记,能够触发前端的界面响应,通过定义参数的名字、类型、参数提示灯选项,前端能够展示参数模板,供自定义输入。

输出设置编写指引

如代码模板所示,算子用于下游算子输入的输出数据封装在类的__output字典里,通过对外函数get_outputs暴露出去,下游算子可以通过调用上游算子类对象的get_outputs函数得到上游算子的输出数据。

#id#标记,是为了防止用户拖拽多个相同算子导致类实例的重名,前端会自动将#id#替换为唯一的id。

#@output标记,能够触发前端的界面响应,通过定义端口的名字、输出值、端口类型等,前端能够定义该算子的端口输出类型,从而和下游算子相同类型的输入端口相连。

分享:

    相关文档

    相关产品