自定义算子


自定义算子是用户灵活定制算子,可以根据实际业务需求编写业务逻辑、定义算子的输入和输出参数,实现算子的逻辑。自定义算子由开发者或用户自己设计和实现,可作为已有算子的扩充。


创建自定义算子的步骤如下:

  1. 设计算子逻辑
  2. 容器化算子程序
  3. 使用自定义算子功能


在新增自定义算子之前需要首先准备好实现算子功能的镜像。镜像可以上传到 EnOS 对应的镜像仓库(harbor)中,或上传到 Docker Hub 上,其路径会作为创建自定义算子时的输入。

设计算子逻辑


以下内容以设计一个计算 sum = a + b 的自定义算子为例,介绍如何设计自定义算子:

  1. 新建一个算子开发项目,并新建一个名称为 add_sum.py 的文件,保存到 C:\Users\username\Documents\EAP\add_sum\src 目录下。
  2. 编写算子逻辑,保存在 add_sum.py 文件中,参考以下示例:
#以下为内置包,无需在 DockerFile 中下载
import argparse
import sys
from pathlib import Path

#主函数:主要控制算子的输入输出。获取输入参数,负责读写等。
def main(args):
    parser = argparse.ArgumentParser(description='Returns sum of two arguments')
    parser.add_argument("--a", type=float, required=True) #入参a,自定义算子类型:number
    parser.add_argument("--b", type=float, required=True) #入参b,自定义算子类型:number
    parser.add_argument("--sum", type=str, required=True) #出参sum,自定义算子类型:string
    .args = parser.parse_args(args)

    Path(args.sum).parent.mkdir(parents=True, exist_ok=True) #输出路径,系统默认
    with open(args.sum, 'w') as sum_path:
        sum_path.write('{}'.format(args.a + args.b))

#入口
if __name__ == '__main__':
    main(sys.argv[1:])

容器化算子程序


使用以下方法编写 Docker File 文件,容器化算子程序:

  • FROM:指定基础镜像
  • WORKDIR:指定工作目录
  • COPY:从上下文目录中复制目录到容器的特定路径
  • RUN:加载依赖
  • ENTRYPOINT:设置启动程序的命令


参考以下示例:

FROM harbor.eniot.io/eap/base/python3-x86
COPY . /src
ENTRYPOINT python3 src/add_sum.py

提交自制镜像


通过以下步骤,将算子镜像上传到 EnOS 对应的镜像仓库(harbor)或 Docker Hub 上。以下内容以上传镜像到 Docker Hub 为例:

  1. 登录 Docker Hub 官网(https://hub.docker.com),注册账号。

  2. 使用 docker login 命令,登录 Docker Hub。

    docker login -u <账号> -p <密码>
    
  3. 在本地 Docker File 所在目录下,使用 docker build 命令打包镜像(“镜像名”可随意命名,不命名则默认为 latest),参考以下示例:

    C:\Users\username\Documents\EAP\add_sum\src>docker build -t username/add_sum_cust:v0.1 .
    
  4. 在本地 Docker File 所在目录下,使用 docker push 命令上传镜像。

    C:\Users\username\Documents\EAP\add_sum\src>docker push username/add_sum_cust:v0.1
    

添加自定义算子


通过以下步骤,在智能任务流的算子编辑画布中新增自定义算子:

  1. 登录 EnOS 管理控制台,从左侧导航栏中选择 智能工作室 > 智能任务流,打开 实验列表 首页。
  2. 选择实验列表中目标实验的 任务流设计,打开设计编辑画布。
  3. 选择算子列表中 自定义算子 旁的 + 图标,选择 添加算子,然后在弹窗中完成算子的配置信息:
    • 名称:输入自定义算子的名称
    • 描述:输入自定义算子简要说明
    • 镜像:输入 Docker Hub 中算子镜像的路径
    • 命令:指定运行的命令行(即镜像的 entrypoint)
  4. 输入参数输出参数 栏中,定义算子的输入输出参数(参数名称、类型、默认值、和是否必填等属性)。输入和输出参数的名称需要和镜像里程序文件中定义的参数保持一致。
  5. 选择 确定,创建自定义算子。将自定义算子拖到编辑画布中,即可将算子编排到任务流中使用。

编辑自定义算子


创建自定义算子后,可根据业务需要,编辑和更新自定义算子:

  1. 在自定义算子列表中,从算子名称旁的菜单中选择 编辑算子
  2. 编辑自定义算子 弹窗中,可更新除算子名称以外的配置信息。
  3. 选择 确定 更新自定义算子。