QuickStart

应用编辑主要涉及三部分功能:

  1. 定义 执行过程 ,即作业运行需要调用的命令、脚本

  2. 创建动态交互 应用表单 来引导 “应用使用者” 选择数据文件和应用参数,为 执行过程 提供输入数据

  3. 定义 运行资源镜像访问入口 等,合理匹配计算需求和资源类型,方便用户使用并提高系统资源的利用率

本章将通过两个简单示例向您展示如何通过 应用编辑 创建普通的星光应用。

示例1 单文件编译(高性能类应用)

应用目标:用户提供一份 C 语言代码文件作为输入,运行 gcc 进行编译,得到编译后的可执行程序。

gcc <source> -o <target>

很明显,在此场景下,需要 2 个输入 :

  • source : 输入文件,必需项

  • target : 指定产生的 “可执行程序” 文件名

编译过程执行结束后,我们希望关心以下结果文件 :

  • bin : 正常编译产生的名为 “target” 的可执行程序

  • logerr : 从 STDERR 获取到的出错信息

创建高性能类应用

在星光平台 “应用中心” \(\rightarrow\) “我的应用” 页面,点击 + 添加新应用 按钮 ,可以选择不同的应用模版来创建新的 星光应用。 您可以选择默认的 普通应用(新建) 从零开始创建,也可以选择已有的应用作为模版进行编辑。 自建的应用提交后,可以在 我的应用 页面列表中找到它并进行继续编辑。

备注

本章中的 星光应用 均指 普通应用 (非 工作流应用 )。

应用的 基本信息 用于在应用列表中展示应用,并与其他应用进行区分。

点击 基本信息,对必填项进行设置:

  • 应用图标:展示用图标,建议 采用 120x120 像素的图片(jpg 或 png 格式)

  • 应用名称:应用的唯一性标识,不允许重复(即使应用删除了也不能复用)

  • 应用标题:展示给用户的标题

  • 应用类型:定义应用的类型

    • 容器云作业:一次性运行的容器作业

    • 容器云服务:作为服务持续运行的作业,结束/失败后自动重启

    • 高性能应用:直接向 slurm 提交作业

对于此例,我们设置 应用类型高性能应用

../../../_images/1.png

备注

设置完 基本信息 后,您随时可以 提交应用 进行保存

编排高性能类应用表单

应用表单 决定用户在使用此应用进行作业创建时所能看到的内容。在编辑页面,您可以拖动各种控件来直观地创建 应用表单

  1. 从左侧的控件栏中,拖动 基础控件 中的 提示文本 到页面中下区域的表单区;在拖动产生的富文本编辑器中,填写对使用本应用的简要说明。

  2. 拖动 高级控件 中的 文件选择提示文本 下方。在右侧的 控件属性 编辑栏中,设置 变量名称source控件标签源文件

  3. 拖动 基础控件 中的 单行文本 到表单下方;设置 变量名称target控件标签目标文件

../../../_images/2.jpg

设置高性能类应用执行过程

作业启动后要运行的程序及其他过程,需要通过 执行命令 来进行设置。在页面中上方的 应用执行命令 栏,可以预览当前的设置。

../../../_images/3.png

添加命令

点击页面中间的 配置信息 按钮,在 执行过程 页,确认 执行方式命令运行命令 栏输入 “gcc” 后点击 添加 (或摁回车键)并 确定

../../../_images/4.jpg

输入绑定

输入绑定,即绑定 表单参数命令行参数,绑定后用户在表单页输入的数据则会影响到应用执行的命令:

  1. 点击 应用表单 中的 source(源文件) 项,在右侧的编辑栏中点击切换到 行为属性 栏;打开 绑定到命令行参数

  2. 点击 应用表单 中的 target(源文件) 项,在右侧的编辑栏中点击切换到 行为属性 栏;打开 绑定到命令行参数,并设置参数前缀为 -o

../../../_images/5.jpg

备注

更详细的表单和命令编辑的信息可以参考 添加控件,关联到命令

设置高性能类应用运行资源

如果应用需要在特定的集群分区下运行,可以在 配置信息/资源需求 中进行 设置,此例的设置如下图:

../../../_images/6.jpg

小心

由于示例应用需要用到 gcc 对 .c 文件进行编译,所以此处需要指定安装有 gcc 的集群分区进行运行,此处选择 tianhe2c。

其它设置

至此,已经完成了此应用运行需要的必要设置。但为了更好的使用,以及将此应用用于 工作流 的示例,还有些设置需要补充:

结果参数

应用在 工作流 中作为流程步骤被使用时,后续步骤的输入参数可以关联应用的 结果参数 (若不需用于 工作流,则无需设置 结果参数)。

配置信息/结果参数 页,点击 添加 以下结果变量:

  1. 变量名 : bin , 类型 : 文件(File) , 匹配文件 : $(inputs.target)

  2. 变量名 : logerr , 类型 : 标准错误输出(stderr)

备注

  • 结果参数-匹配文件 用于描述运行结果产生的文件中,哪些文件是对应这一项 结果参数; 匹配文件 支持 POSIX 的 glob 匹配,例如 *.txt 可以匹配到当前 工作目录 下的所有 txt 文件。

  • $(expr) 是应用编辑中支持的一种表达式语法,允许在括号内使用单个 JS 表达式(ES5 规范),此例表达式 $(inputs.target) 表示输入参数列表中的 target 参数用户提交的值。更多说明请参考 输入表达式

提交与测试

点击 提交应用 按钮后,可以在 我的应用 列表中看到此应用。

../../../_images/7.png

点击应用图标,可进入对应的 应用表单

../../../_images/8.png

此页核心部分为用户编辑产生的表单(红色框);其他部分为根据应用的 基本信息 产生的说明等内容(绿色框),以及根据 应用类型 以及 资源需求 设置产生的通用应用表单项(蓝色框)

设置输入并提交,测试结果表明应用运行正常

../../../_images/9.png

示例2 Quantum ESPRESSO GPU(容器云作业类应用)

Linux 容器 是一种操作系统虚拟化技术,基于此技术产生的 镜像 常用于分发应用的运行环境。通过镜像和容器对应用环境进行管理和运行能够免去软件安装的难题,并且避免不同的软件运行环境之间的相互干扰。

本例将演示如何通过 星光应用 使用基于 镜像 发布的软件 quantum_espresso GPU版本

../../../_images/qe-docker-cmd.png

上图为通过 docker run 命令运行镜像的调用方式,各项参数简要说明如下:

  • --gpus all --pic=host 声明 GPU 硬件的使用

  • -v ${PWD}:/host_pwd -w /host_pwd 指定宿主机目录映射到容器中,以及容器中运行程序的工作目录

  • nvcr.io/hpc/quantum_espresso:${QE_TAG} 需要运行的镜像

  • ./run_qe.sh 用户提供的运行脚本

可以看出,通过 docker run 运行镜像需要合理进行参数设置,按需将一些宿主机资源映射到容器中使用。另外 docker run 命令一般需要特权身份执行,对于多租户的集群使用场景,让用户直接使用 docker run 命令存在一定安全风险。

星光平台针对以上问题,对容器运行环境进行了一些行为预设,为用户提供更便利、安全的容器运行环境:

  • 自动将用户家目录映射到容器中的同名目录

  • 每次运行都会创建一个新的随机目录作为 工作目录,以避免不同的运行作业相互干扰

    • 若希望在特定的路径下运行,在执行过程中进行切换( cd targetDir )即可

  • 自动在容器内配置、使用宿主系统上的用户信息

  • 根据所选择的集群、分区、套餐 ,进行 GPU 等硬件资源的分配,保障应用性能

在此基础上,我们可以如下创建对应的星光应用

应用目标:用户提供一个 作业脚本 文件(例如 run_qe.sh )为输入,容器启动后切换到脚本所在目录,然后执行此脚本。

创建容器云作业类应用

设置 基本信息,应用类型需要为 容器云作业,设置如下:

../../../_images/10.png

编排容器云作业类应用表单

  1. 从左侧的控件栏中,拖动 基础控件 中的 提示文本 到页面中下区域的表单区,并在其中编写应用的使用说明

  2. 拖动 高级控件 中的 文件选择提示文本 下方。在右侧的 控件属性 编辑栏中,设置 变量名称jobfile控件标签作业脚本变量类型 改为 string。属性编辑切换到 行为属性,打开 绑定到命令行参数

../../../_images/11.png

文件选择 控件的变量类型:string 和 File 的区别

应用表单 的控件种类影响前端交互效果,而控件的 变量类型 则会影响后端处理逻辑。

  • 使用变量类型为 File文件选择 控件

    星光平台具备 文件自动迁移 机制。当使用变量类型为 File文件选择 控件时,其选择的文件会链接或拷贝(跨文件系统时)至 :工作目录。这种隐式的文件迁移可以保证,即使作业提交时选择的计算资源没有挂载所选文件所在的存储系统,计算仍可正常运行。

    注意:为保障计算逻辑的正确运行,需要保证计算所需的所有输入文件均通过 File 类型的 文件选择 控件进行了设置。

  • 使用变量类型为 string文件选择 控件

    此时平台的文件迁移机制不生效,应用编辑者需要考虑数据在计算集群上的可访问性,自行控制运行逻辑。

    参考下文中 设置容器云作业类应用执行过程,通过编写 脚本内容,使用 cd 命令主动切换工作目录至作业脚本($jobfile)所在文件夹,保证了后续的命令 bash $1 的正确执行。

  • 若有多文件选择需求,推荐使用 文件列表 控件。

设置容器云作业类应用执行过程

配置信息/执行过程 页,切换 执行方式脚本,确认脚本类型为 bash 后,编写 脚本内容 如下:

cd `dirname $1`
bash $1
../../../_images/12.png

$1 为此脚本的第一项参数,即前面通过 行为属性 启用 绑定到命令行参数jobfile,可以在 应用执行命令 提示栏中进行确认:

../../../_images/13.png

设置容器云作业类应用镜像

对于容器类应用,需设置镜像,这里已经提前上传好了应用的镜像:(镜像上传请参考 镜像构建

配置信息/结果参数 页的 容器镜像设置 栏,点击 添加 按钮,选择提前上传好的该应用的镜像

../../../_images/14.png

进阶使用(访问运行中的容器)

至此,已经完成了此应用运行需要的必要设置。而实际场景中,往往还需要进行一些额外设置。

为实现对作业运行状况进行检查等交互式使用的功能,容器云应用可以预留一个交互操作的入口。因此,我们对此应用的目标进行扩展:

  • 我们期望提供一个可以交互的 访问入口,以供用户连入观察运行过程中的资源使用情况(例如通过 top 命令查看)

  • 允许缺省 作业脚本 文件进行提交(在此场景下,用户可通过上面的 访问入口 进行交互使用,测试自己的 作业脚本

为实现以上目标,对此应用作以下变更:

  • 选中已创建的 文件选择 控件 jobfile,修改控件属性中 是否必填非必填

  • 配置信息/执行过程 的脚本内容改为:

    #!/bin/bash
    export > lxc_export
    if [ $# -eq 0 ] || [ "s$1" = s ]; then
    echo "No jobfile, just run ttyd "
    /app/common/.black/ttyd /bin/bash
    else
    echo "Have jobfile, run ttyd in background."
    /app/common/.black/ttyd /bin/bash &
    cd `dirname $1`
    bash $1
    fi
    
  • 配置信息/运行环境 中的 访问入口设置 添加访问入口, 名称 设置为 ttyd, 目的端口 设置为 7681

    ../../../_images/15.png

备注

  • ttyd 是一个轻量级交互工具,通过网页提供一个图形终端

  • 如果需要更多其他的访问入口,请参考 容器访问工具

保存提交后,可以对此例应用进行测试;下图是在缺省提交(不指定 jobfile )时,在其访问入口中进行 qe 的使用:

../../../_images/16.png