工作流-workflow_FireWorks 介绍

计算和工作流介绍

 对代码和数据的版本管理,以及对工作流的管理,家加上计算环境,可以使数据结果复现或者让工作流自动执行
   -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	
posted @ 2024-07-14 17:46  辰令  阅读(145)  评论(0)    收藏  举报