计算和工作流介绍
对代码和数据的版本管理,以及对工作流的管理,家加上计算环境,可以使数据结果复现或者让工作流自动执行
-source+ workflow +env -->sink
1.软件开发体验和数据代码管理
Git Git-LFS (Git Large File Storage) DVC (Data Version Control)
2.工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。
有适用于个人,小团队以及大集团的,选择最适合自己的。
工作流
1.科学计算和工作流-开发过程和运行过程
01.基础款: invoke
02.轻量级框架
FireWorks 是由Materials Project团队开发的工具,用于管理科学计算和工作流。它建立在MongoDB数据库和Python编程语言的基础上--材料科学中常用
Dagster 数据编排器:Dagster
03.商用版本:
Airflow :编写、安排和监控工作流程-工作流是使用有向无环图 (DAG) 定义
Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度系统
关键词:
任务调度系统,任务编排 任务办理
流程部署、流程执行、流程监控 工作流管理 权限工作流系统
FireWorks
在材料科学中,也是有一些出众的工具可以使用的。关注科研界给工商界带来的技术启发。
1.安装和使用--安装可以参考官网,主要是要安装MongoDB,需要稍微了解一下数据库
2.基本框架和概念
调度器:LaunchPad (manages workflows and metadata) 主要是处理json和mongodb
执行器:FireWorkers workflows
Workflow Model
三个概念: Workflow Firework Firetask
Firetask : 最小的工作单元
Firework: 一组计算单元Firetask
Workflow :一组Firework
task类型和自定义task :Firetask的类型 type of Firetask:
ScriptTask TemplateWriterTask FileTransferTask PyTask AddFilesTask CommandLineTask ForeachTask JoinDictTask JoinListTask ImportDataTask
Task的定义方式--1.Class定义的方式--用户自定义task: 继承FiretaskBase 并实现run_task()
依赖关系的配置
workflow = Workflow([fw1, fw2, fw3, fw4], {fw1: [fw2, fw3], fw2: [fw4], fw3: [fw4]})
任务流的一些概念
get_fws
pause_wflows defuse_wflows rerun_fws reignite_wflows reignite_fws archive_wflows delete_wflows
火箭-发射面板-发射-Rocket Launcher
3.执行方式:
01.立即执行:launch Rockets directly rapid-fire mode
02.根据调度器执行:submit Rockets through an existing queueing system: Queue Launcher qlaunch
python
fireworks.core.rocket_launcher.rapidfire
fireworks.core.queue_launcher.rapidfire
4.特色-- Firework spec 以及 FWAction objects
动态工作流 dynamic workflows
dynamic workflows — workflows that modify themselves or create new ones based on what happens during execution
失败检测 failure-detection routines
代码示例
from fireworks import Firework, LaunchPad, ScriptTask
from fireworks.core.rocket_launcher import launch_rocket
from fireworks.core.rocket_launcher import rapidfire
# set up the LaunchPad and reset it
launchpad = LaunchPad()
#launchpad = LaunchPad(host="myhost", port=12345, name="fireworks_testing_db", username="my_user", password="my_pass")
##launchpad.reset('', require_password=False)
# create the Firework consisting of a single task
firetask = ScriptTask.from_str('echo "howdy, your job launched successfully!"')
firework = Firework(firetask,name="hello")
### fw = firework.from_file("my_firework.yaml")
firework2 = Firework(ScriptTask.from_str('echo "hello 2" '),name="good", parents=[firework])
wf = Workflow(["firework","firework2"],name="test")
# store workflow and launch it locally
launchpad.add_wf(firework)
launch_rocket(launchpad)
##rapidfire(launchpad,m_dir="~/2024_launcher")
##launch_rocket(launchpad, FWorker(), strm_lvl='WARNING')
说明
AI将带来很多变换,对于个人开发者和公司来说,关注计算产业带来的三大范式转换:计算范式、开发范式、交互范式。
工作流既属于开发范式也是交互范式--后续这些会隐藏到AI的背后去,即大家关注要做什么,而怎么做可以交给AI,这一天什么时候到来,虽不确定,但终究会来的。
参考
https://materialsproject.github.io/fireworks/
https://materialsproject.github.io/fireworks/index.html#the-built-in-firetasks