你的第一个工作流
本指南演示 Celebi 的经典示例:用高斯分布产生一些样本并拟合它(另见 demo-basic-01)。
0. 开始一个项目
celebi init . # 在空目录中
celebi use . # 在已有的 Celebi 项目目录中
celebi # 进入 Celebi shell
celebi projects # 列出项目;celebi workon [name] 切换项目
1. 构建工作流
每个工作流节点都是磁盘上的一个文件夹。创建两个算法和两个任务,然后把它们连起来:
create-algorithm AlgGen
create-algorithm AlgFit
create-task Gen
create-task Fit
cd @/Gen add-algorithm ../AlgGen
cd @/Fit add-algorithm ../AlgFit
cd @/Fit add-input ../Gen gen
add-input ../Gen gen 让 Gen 任务在 Fit 内部以名为 gen 的子文件夹可见 ——
这就是别名系统的工作方式。
2. 写代码并配置
在算法中,写下带参数占位符的命令模板:
# AlgGen/celebi.yaml
environment: script
commands:
- root -l code/gen.C('${events}')
用你习惯的编辑器写实际代码:
cd @/AlgGen
edit-script gen.C
在任务中,设置环境与参数:
cd @/Gen
set-environment env:root6
add-parameters events 1000
运行时,模板会被翻译成 root -l code/gen.C('1000')。
3. 交互式开发
导航到某个任务,运行:
workaround
你会进入一个新建文件夹中的 shell:任务的算法被复制到 code/,依赖以别名的形式
复制进来 —— 它模拟真实的运行环境,因此你可以精确调试将要执行的内容。
4. 提交运行
cd @/Fit
submit # 或:submit [runner_name]
runner 会解析依赖,先运行 Gen、再运行 Fit,输出经由
Yuki 取回。在某个目录中执行 submit,等于在它所有子节点中
执行 —— 一个动作提交整个工作流。
5. 日常操作
- 复制子工作流 ——
cp TasksGroup TaskGroupB复制工作流的一部分,连接自动 接好。做系统误差研究时非常好用。 - 重命名 / 重组 —— 随意
mv;别名系统会保持底层工作流不变。 - 写文档 —— 每个对象都有自己的
README.md,它不会影响结果(impression 不会 封存它),随时可以打磨。