当前位置: 首页 > news >正文

【WDL】8. 实践:本地/集群运行

WDL可以使用本地、集群、云端三种模式来跑流程,本地运行是不需要服务器后台配置文件,而另外两种需要配置文件。

本地运行

下载cromwell和womtool到本地服务器,地址:https://github.com/broadinstitute/cromwell/releases
不建议下载最新版本,我试了下最新的version 78是报错的,好像是java版本的匹配问题。

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/hsqldb/jdbcDriver has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

我这里以version 51为例。

示例一

编写echo.wdl

workflow wf_echo { call echo output { echo.outFile echo.content } } task echo { String out command { echo Hello World! > ${out} } output { File outFile = "${out}" Array[String] content = read_lines(outFile) } }

womtool校验WDL:

java -jar womtool-51.jar validate echo.wdl

显示Success!

生成json:

java -jar womtool-51.jar inputs echo.wdl >echo.json

修改echo.json内容,配置输入文件:

{ "wf_echo.echo.out": "hello_world" }

cromwell运行WDL脚本:

java -jar cromwell-51.jar run echo.wdl --inputs echo.json

注意查看运行状态status是 'Succeeded'还是'Failed'。

流程执行完毕默认会在运行流程的目录下生成两个目录,cromwell-executions和cromwell-workflow-logs分别是执行步骤和log目录。cromwell-executions目录结构如下:

wf_echo/ └── d62e94fe-372d-434c-abcb-144036f26935 └── call-echo ├── execution │ ├── hello_world │ ├── rc │ ├── script │ ├── script.background │ ├── script.submit │ ├── stderr │ ├── stderr.background │ ├── stdout │ └── stdout.background └── tmp.d25a3769

每次运行都会生成一串字符串目录(不会覆盖之前的结果),每个task都有类似的目录结果。私以为执行速度很慢(调用的东西很多),且过程文件太多了!

目标结果:

$ cat hello_world Hello World!

示例二

一个稍微复杂点的例子,并行多输出。看看它的结果目录。
test.wdl:

workflow testwdl { Int? thread = 6 String varwdl String prefix Array[Int] intarray = [1,2,3,4,5] if(thread>5) { call taska { input: vara = varwdl, infile = taskb.outfile, prefix = prefix } } scatter (sample in intarray) { call taskb { input: varb = 'testb', thread = thread, prefix = sample } } } task taska { String vara Array[File] infile String prefix command { cat ${sep=" " infile} >${prefix}_${vara}.txt } } task taskb { String varb Int thread String prefix command { echo ${varb} ${thread} >${prefix}.txt } output { File outfile = '${prefix}.txt' } }

test.json:

{ "testwdl.varwdl": "hellowdl", "testwdl.prefix": "testwdl" }

执行java -jar cromwell-51.jar run test.wdl --inputs test.json

生成的目录结果:

23ab84c5-f219-4f2d-852f-677df6811a0b ├── call-taska │ ├── execution │ │ ├── rc │ │ ├── script │ │ ├── script.background │ │ ├── script.submit │ │ ├── stderr │ │ ├── stderr.background │ │ ├── stdout │ │ ├── stdout.background │ │ └── testwdl_hellowdl.txt │ ├── inputs │ │ ├── -1507720077 │ │ │ └── 3.txt │ │ ├── 2086182641 │ │ │ └── 1.txt │ │ ├── 289231282 │ │ │ └── 2.txt │ │ ├── -806655499 │ │ │ └── 5.txt │ │ └── 990295860 │ │ └── 4.txt │ └── tmp.de320778 └── call-taskb ├── shard-0 │ ├── execution │ │ ├── 1.txt │ │ ├── rc │ │ ├── script │ │ ├── script.background │ │ ├── script.submit │ │ ├── stderr │ │ ├── stderr.background │ │ ├── stdout │ │ └── stdout.background │ └── tmp.eba86162 ├── shard-1 │ ├── execution │ │ ├── 2.txt │ │ ├── rc │ │ ├── script │ │ ├── script.background │ │ ├── script.submit │ │ ├── stderr │ │ ├── stderr.background │ │ ├── stdout │ │ └── stdout.background │ └── tmp.658f2d2f ├── shard-2 │ ├── execution │ │ ├── 3.txt │ │ ├── rc │ │ ├── script │ │ ├── script.background │ │ ├── script.submit │ │ ├── stderr │ │ ├── stderr.background │ │ ├── stdout │ │ └── stdout.background │ └── tmp.ae04eda0 ├── shard-3 │ ├── execution │ │ ├── 4.txt │ │ ├── rc │ │ ├── script │ │ ├── script.background │ │ ├── script.submit │ │ ├── stderr │ │ ├── stderr.background │ │ ├── stdout │ │ └── stdout.background │ └── tmp.bcfe9d45 └── shard-4 ├── execution │ ├── 5.txt │ ├── rc │ ├── script │ ├── script.background │ ├── script.submit │ ├── stderr │ ├── stderr.background │ ├── stdout │ └── stdout.background └── tmp.2e004f34

集群运行

cromwell 不仅支持本地计算机任务调度,同时支持集群/云计算作业管理系统,只需要进行简单配置,就可以实现大规模计算。
官方针对不同的集群/云作业管理系统提供了相关的配置文件(https://github.com/broadinstitute/cromwell/tree/develop/cromwell.example.backends),但是本质都是讲调度命令嵌入其中。

SGE配置:backend.conf

include required(classpath("application")) backend { default = SGE # sge config providers { SGE { actor-factory = "cromwell.backend.impl.sfs.config.ConfigBackendLifecycleActorFactory" config { # Limits the number of concurrent jobs concurrent-job-limit = 50 # Warning: If set, Cromwell will run 'check-alive' for every job at this interval # exit-code-timeout-seconds = 120 runtime-attributes = """ Int cpu = 8 Float? memory_gb String? sge_queue String? sge_project """ submit = """ qsub \ -terse \ -N ${job_name} \ -wd ${cwd} \ -o ${out}.out \ -e ${err}.err \ ${"-pe smp " + cpu} \ ${"-l mem_free=" + memory_gb + "g"} \ ${"-q " + sge_queue} \ ${"-P " + sge_project} \ ${script} """ kill = "qdel ${job_id}" check-alive = "qstat -j ${job_id}" job-id-regex = "(\\d+)" # filesystem config filesystems { local { localization: [ "hard-link","soft-link", "copy" ] caching { duplication-strategy: [ "hard-link","soft-link", "copy" ] # Default: "md5" hashing-strategy: "md5" # Default: 10485760 (10MB). fingerprint-size: 10485760 # Default: false check-sibling-md5: false } } } } } } }

提交命令:
java -Dconfig.file=backend.conf -jar cromwell-51.jar run test.wdl --inputs test.json

若有Docker,也需要配置,示例如下:

dockerRoot=/cromwell-executions backend { default = Docker providers { # Example backend that _only_ runs workflows that specify docker for every command. Docker { actor-factory = "cromwell.backend.impl.sfs.config.ConfigBackendLifecycleActorFactory" config { run-in-background = true runtime-attributes = "String docker" # 嵌入 docker 的运行命令 # docker_cwd 通过 dockerRoot(默认 /cromwell-executions) 设置, 与当前目录(${cwd})下 ./cromwell-executions 相对应 submit-docker = "docker run --rm -v ${cwd}:${docker_cwd} -i ${docker} /bin/bash < ${docker_script}" } } }

关于云端的配置,运营商基本上已经配好了,我们只需要只用它的接口即可,不行就找技术支持。

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

http://www.cnnetsun.cn/news/181131.html

相关文章:

  • 344.【结构化开发方法】系统分析
  • Open-AutoGLM模型调优技巧(性能提升80%的3个关键步骤)
  • 为什么瑞芯微(Rockchip)官方未提供FreeRTOS类os SDK支持
  • 网络安全核心基础百问百答:你的第一本实用安全速查手册
  • 揭秘Open-AutoGLM如何拯救非遗文化:5大核心技术首次公开
  • 揭秘Open-AutoGLM底层架构:如何实现高质量文创内容自动生成
  • 收藏!大模型学习实战指南:从入门到进阶,小白/程序员少走90%弯路
  • 收藏!2025年AI行业风口:应用层人才成企业争抢核心,程序员/小白入门指南
  • 你不知道的Open-AutoGLM黑科技(5个隐藏功能让城市管理效率提升300%)
  • 传奇手游快速挂机 巨 椰 云手机
  • AbMole小课堂:类器官培养中决定成败的抑制剂、细胞因子
  • Vue基础入门08,详解 Vue watch 侦听器:基础用法、深度监听与立即执行场景
  • 怎样选择品牌代工厂?不要只关注价格,这5点才是关键
  • 一键群控多台电脑,狂揽 2.2 万 GitHub Star!
  • Open-AutoGLM模型压缩技术揭秘:在边缘设备上实现毫秒级推理的6种方法
  • Open-AutoGLM部署避坑指南,20年架构师亲授高可用场景适配秘诀
  • 为什么说Open-AutoGLM是首个真正具备自主学习能力的开源框架?
  • 一篇文章熟悉Java打包到部署
  • 数据结构 —— 顺序表
  • 基于springboot的大创管理系统(11549)
  • springboot基于安卓的老年养护与智能服务系统
  • EasyGBS助力智慧医院打造全方位视频监控联网服务体系
  • 【收藏级】全面拆解GraphRAG:从原理到实践,大模型知识库升级必备
  • Java多态——Java的三大特性之一,零基础小白到精通,收藏这篇就够了
  • 【Open-AutoGLM元宇宙适配终极指南】:揭秘三大核心技术突破与落地实践
  • Open-AutoGLM如何实现自主学习?:深度剖析其进化机制与训练闭环设计
  • [驱动之路——GPIO子系统]学习总结,万字长篇,一文彻底搞懂GPIO子系统(含GPIO控制器驱动框架解析)
  • Open-AutoGLM如何重塑城市治理?:3个真实案例揭示AI协同调度的颠覆性力量
  • 智能体式AI实战指南:从零构建IT自动化系统,程序员必学收藏教程
  • 家长用Realme手机,怎样远程管理孩子iPhone的屏幕使用时长?