全部产品

自定义算法包组件上架

AICS组件根据来源分为平台组件和自定义组件。平台组件为系统内置的组件,用户不可编辑;自定义组件是用户自己编辑上架的组件。目前AICS支持Python脚本、Python组件、算法包组件三种自定义组件。本文介绍自定义算法包组件的模板及上架流程。

算法包模板

以样例算法包algo_package_sample.zip为例,介绍算法包的模板。

算法包解压后结构如下:

图片 1
  • common放工具包

  • lib放第三方包

    # 导入第三方包的方式
    third_path = env_util.get_workspace() + "/lib"
    
    os.system('pip3 install simpy==3.0.11 -i https://pypi.tuna.tsinghua.edu.cn/simple -t '+str(third_path))
    os.system('pip3 install ortools==8.0.8283 -i https://pypi.tuna.tsinghua.edu.cn/simple -t '+str(third_path))
    
    # 使用第三方包
    import simpy
    import ortools
  • 固定有一个main.py文件,是算法调用入口文件。

    # -*- coding: utf-8 -*-
    # @author: xxx 
    # @E-mail: xxx@alibaba-inc.com
    # @Date  : 2021/1/5 5:50 下午
    # @File  : main.py
    ### Framework imports do not need to be modified
    # framework import start  
    from flask import Blueprint, g, request
    from algo_sdk import logger_util, env_util, storage
    import json
    import traceback
    # framework import end
    
    ###   
    # User import package start
    # from src.sample_code import sample
    # User import end
    ###
    
    ### 
    logger = logger_util.get_logger(env_util.get_app_logs(), 'biz')
    package_blueprint = Blueprint('package', __name__, template_folder='package')
    
    package_blueprint.context = dict()
    context = package_blueprint.context
    
    
    @package_blueprint.route("/invoke", methods=['POST'])
    def invoke():
        try:
            logger.info('Before invoke, Context: {}'.format(context))
            context['log'] = logger
            data = request.json
            response = main(data, context)
            response = {'code': 0, 'data': response, 'msg': ''}
            logger.info('After invoke, Context: {}'.format(context))
        except Exception as e:
            logger.error(e)
            logger.error(traceback.format_exc())
            response = {'code': 500, 'msg': '未知错误', 'data': {}}
        return json.dumps(response, ensure_ascii=False)
    
    
    # User code start
    def main(input_data, context):
        # 通过context拿到日志对象
        context['log'].info("data log info!")
        context['log'].info('算法主流程input: {}'.format(input_data))
        # input_data 是输入的参数 
        # IN1是端口1的参数标识在搭建组件的时候填写的
        # key1是这个控件的参数key 如果是批量参数则是在组件上架的时候填写的,如果是动态参数则是在搭建画布的时候需要填写的
        # 使用sdk读写外部缓存    
        storage.external_save("key", "value")
        storage.external_read("key") //这里的key为igate测点
        value = input_data["IN1"]["key1"]["value"]
        response = {'code': 0, 'data': value}
        context['log'].info('算法主流程output: {}'.format(response))
        return response
  • src放用户业务代码

压缩算法包时,需要在选择以上四项进行压缩。

算法包组件上架

  1. 登录工业大脑智能制造平台AICS

  2. 左侧导航栏单击组件管理 > 自定义组件

  3. 自定义组件页面,单击右上角的新增组件

    p267940
  4. 新增组件面板,正确填入参数,单击左下角确定

    截屏2021-04-26 下午2

    参数

    说明

    控制场景

    实时算法编排工业分析建模

    如选择实时算法编排,该自定义组件只能在实时算法编排的画布中使用;选择工业分析建模,该自定义组件只能在工业分析建模的画布中使用。

    组件名称

    自定义组件的名称。

    标识

    自定义组件的唯一标识。

    类型

    • Python脚本:画布通过Python编译器编写脚本。

    • Python组件:上架组件前编写好脚本,画布通过控件运行脚本。

    • 算法包组件:上传算法包方式运行组件。

    此处选择算法包组件

    分组

    目前选择默认分组。

    运行方式

    • service实时调用:画布可实时调用组件,组件超时一分钟运行失败。此调用为常驻服务。

    • service异步回调:组件运行超过一分钟,服务挂起状态,走异步逻辑。此调用为常驻服务。

    • job:只有算法包组件类型可使用。调用一次启动一次pod,运行完成自动销毁。

    图标

    为自定义组件选择一个图标。

    描述

    选填,自定义组件的描述信息。

    Python脚本

    根据用户的业务来书写的Python代码。

  5. 组件控件添加。

    算法组件控件

    序号

    操作

    1

    新增输入端口。

    2

    新增输出端口。

    3

    从左侧控件栏拖入需要配置的控件。

    4

    分别选中各个控件,在右侧控件配置栏进行配置。其中,参数标识和算法包参数对应。

    5

    保存编辑。

  6. 回到自定义组件页面,选中刚刚新建的Python脚本组件,在操作栏中单击发布,填写版本号,选择发布类型,即可上架该组件。