Amazon Best VPN GoSearch

OnWorks 网站图标

pegasus-mpi-cluster - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 pegasus-mpi-cluster

这是 pegasus-mpi-cluster 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


pegasus-mpi-cluster - 一种用于运行表示为 DAG 的计算工作流的工具
(有向无环图)在使用 MPI 的计算集群上。

概要


飞马-mpi-集群 [选项] 工作流.dag

商品描述


飞马-mpi-集群 是用于运行 HTC(高吞吐量计算)科学的工具
为 HPC(高性能计算)设计的系统上的工作流。 许多 HPC 系统具有
为紧密耦合的并行应用程序优化的定制架构。 这些
系统通常具有异国情调的低延迟网络,这些网络旨在通过短
计算节点之间的消息非常快。 许多这些网络是如此高度
优化计算节点甚至不支持 TCP/IP 堆栈。 这使它
无法使用专为商品设计的软件运行 HTC 应用程序
群集,例如 Condor。

飞马-mpi-集群 开发用于启用松散耦合的 HTC 应用程序,例如
科学工作流程以利用 HPC 系统。 为了绕过网络
上面列出的问题, 飞马-mpi-集群 使用 MPI(消息传递接口),一个
用于编写 SPMD(单进程,多数据)并行应用程序的常用 API。
大多数 HPC 系统都有一个 MPI 实现,可以在任何外来网络上运行
系统使用的架构。

An 飞马-mpi-集群 作业由单个主进程组成(该进程在
MPI 用语)和几个工作进程。 主流程管理工作流和
将工作流任务分配给工作人员执行。 工人执行任务并返回
结果给主人。 任务写入 stdout 或 stderr 的任何输出都会被捕获
(见 TASK 标准输入输出).

飞马-mpi-集群 应用程序表示为 DAG(有向无环图)(参见 DAG
FILES)。 图中的每个节点代表一个任务,边代表依赖关系
限制任务执行顺序的任务之间。 每个任务都是一个
程序和一组需要运行的参数(即一个命令和一些可选的
论据)。 依赖关系通常代表数据流依赖关系
应用程序,其中一项任务产生的输出文件需要作为另一项任务的输入。

如果在执行 DAG 时发生错误导致工作流停止,则可以
使用记录工作流程进度的救援文件重新启动(请参阅 拯救
FILES)。 这使 飞马-mpi-集群 在它停止的地方开始运行工作流。

飞马-mpi-集群 旨在作为独立工具或作为补充
Pegasus 工作流管理系统 (WMS)。 有关使用 PMC 的更多信息
Pegasus 请参阅有关部分 的PMC AND 飞马.

飞马-mpi-集群 允许表示为 DAG 的应用程序在
大量的计算节点。 它的设计简单、轻便且坚固。

配置


-h, - 帮帮我
打印帮助信息

-V, - 版
打印版本信息

-v, --详细
增加日志记录的详细程度。 添加多个 -v 进一步提高水平。 默认的
日志级别是 信息。 (看到 记录)

-q, - 安静的
减少日志记录的详细程度。 添加多个 -q 进一步降低水平。 默认的
日志级别是 信息。 (看到 记录)

-s, --跳过救援
忽略救援文件 工作流.dag 如果它存在。 注意 飞马-mpi-集群
仍会为当前运行创建一个新的救援文件。 默认行为是
如果找到,则使用救援文件。 (看 拯救 FILES)

-o , --标准输出
任务标准输出的文件路径。 (看 TASK 标准输入输出--每个任务-stdio)

-e , --标准错误
任务标准错误的文件路径。 (看 TASK 标准输入输出--每个任务-stdio)

-m M, --最大失败次数 M
之后停止提交新任务 M 任务失败。 一次 M 已经达到,
飞马-mpi-集群 将完成运行任何已启动的任务,但不会
开始更多的任务。 此选项用于防止 飞马-mpi-集群
继续运行存在系统错误的工作流,例如
缺少二进制文件或无效路径。 默认为 M 是 0,表示无限制
允许失败。

-t T, --尝试 T
尝试运行每个任务 T 将任务标记为失败之前的时间。 请注意, T
尝试不算作失败的目的 -m 选项。 一个任务只是
如果尝试则认为失败 T 时间和所有 T 尝试导致非零
退出代码。 的价值 T 必须至少为 1。默认值为 1。

-n, --诺洛克
不要锁定 DAGFILE。 默认情况下, 飞马-mpi-集群 将尝试获得
DAGFILE 上的排他锁以防止多个 MPI 作业在
同时。 如果指定了此选项,则不会获取锁。

-r, - 救援
救援日志的路径。 如果文件存在,并且 -s 没有指定,那么日志将是
用于恢复工作流的状态。 文件在读取后被截断并
在其位置创建一个新的救援日志。 默认是追加 。救援 到 DAG
文档名称。 (看 拯救 FILES)

--主机脚本
要在每个唯一主机上启动的脚本或可执行文件的路径 飞马-mpi-集群
正在运行。 也可以使用 PMC_HOST_SCRIPT 环境设置此路径
多变的。 (看 主办方 脚本)

--主机内存 尺寸
每个主机上可用的内存量(以 MB 为单位)。 默认是确定金额
物理 RAM 自动。 也可以使用 PMC_HOST_MEMORY 设置此值
环境变量。 (看 基于资源的 排程)

--主机-CPU CPU的
每个主机上可用的 CPU 数量。 默认是确定CPU数量
核心自动。 也可以使用 PMC_HOST_CPUS 环境设置该值
多变的。 (看 基于资源的 排程)

--严格限制
这为任务启用了严格的内存使用限制。 当指定此选项时,并且
一个任务尝试分配比 DAG 中请求的更多的内存,内存
分配操作将失败。

--最大墙时间 分钟
这是最大的分钟数 飞马-mpi-集群 将允许工作流程
跑步。 当这个时间到期 飞马-mpi-集群 将中止工作流并合并
工人的所有标准输出/标准错误文件。 该值以分钟为单位,并且
默认为无限挂墙时间。 添加了此选项,以便工作流的输出
即使工作流超过其批处理作业的最大挂起时间,也将被记录。 这个
也可以使用 PMC_MAX_WALL_TIME 环境变量设置值。

--每个任务-stdio
这会导致 PMC 为每个任务生成一个 .out.XXX 和一个 .err.XXX 文件,而不是
将任务 stdout/stderr 写入 --标准输出--标准错误. 文件名是
“TASKNAME.out.XXX”和“TASKNAME.err.XXX”,其中“TASKNAME”是任务的名称
来自 DAG,“XXX”是一个序列号,每次任务执行时都会增加
试过了。 此选项会覆盖以下值 --标准输出--标准错误. 这个论点是
Pegasus 在 PMC-only 模式下计划工作流时使用,以促进调试
和监控。

--jobstate-日志
此选项会导致 PMC 为工作流生成一个 jobstate.log 文件。 该文件是
名为“jobstate.log”并放置在 DAG 文件所在的同一目录中
位于。 如果文件已存在,则 PMC 将新行追加到现有文件中。
在 PMC-only 模式下计划工作流时,Pegasus 使用此选项以
便于监测。

--monitord-hack
此选项会导致 PMC 为工作流生成 .dagman.out 文件。 这个文件
模仿 Condor DAGMan 生成的 .dagman.out 文件的内容。 的点
这个选项是为了欺骗被监控者认为它正在处理 DAGMan,以便
它将生成适当的事件来填充 STAMPEDE 数据库
监测目的。 该文件名为“DAG.dagman.out”,其中“DAG”是
PMC DAG 文件。

--无资源日志
不要生成一个 工作流.dag.resource 工作流的文件。

--接收时不睡眠
不要使用带 sleep() 的轮询来实现消息接收。 (看 已知的 问题: 中央处理器
用法)

--maxfds
设置 master 可以为 I/O 打开的最大文件描述符数
转发。 默认情况下,此值是根据以下值自动设置的
getrlimit(RLIMIT_NOFILE)。 该值必须至少为 1,并且不能大于
RLIMIT_NOFILE。

--保持亲和力
默认情况下,PMC 会尝试重置 CPU 和内存关联。 这是为了确保
所有可用的 CPU 和内存都可以被 PMC 任务使用
配置正确。 此标志告诉 PMC 保留继承自的关联设置
它的父级。 请注意,只有在 PMC 编译时才可以清除内存策略
利努马。 使用清除 CPU 关联性 sched_setaffinity(), 内存策略是
清除与 set_mempolicy().

DAG FILES


飞马-mpi-集群 工作流使用一种简单的基于文本的格式来表达,类似于
Condor DAGMan 使用的那个。 DAG 文件中只允许两种记录类型: TASK
边缘. DAG 中的任何空行(包含所有空白字符的行)都将被忽略,
与任何以 # 开头的行一样(请注意,# 只能出现在一行的开头,
不在中间)。

的格式 TASK 记录是:

“任务” ID [选项...] 可执行文件 [参数...]

其中 id 是任务的ID, 选项 是任务选项列表, 可执行 是路径
到要运行的可执行文件或脚本,以及 争论... 是一个以空格分隔的列表
传递给任务的参数。 一个例子是:

任务 t01 -m 10 -c 2 /bin/program -a -b

这个例子指定了一个任务 t01 需要 10 MB 内存和 2 个 CPU 才能运行
/bin/程序 与论点 -a-b. 可用的任务选项有:

-m M, --请求内存 M
任务所需的内存量(以 MB 为单位)。 默认为0,表示内存
不考虑此任务。 可以通过以下方式为 DAX 中的作业设置此选项
指定 pegasus::pmc_request_memory 配置文件。 (看 基于资源的 排程)

-c N, --请求-CPU N
任务所需的 CPU 数量。 默认值为 1,这意味着
主机上的插槽数应小于或等于物理 CPU 的数量
以便使用所有插槽。 可以通过以下方式为 DAX 中的作业设置此选项
指定 pegasus::pmc_request_cpus 配置文件。 (看 基于资源的 排程)

-t T, --尝试 T
在永久失败之前尝试执行任务的次数。 这是
任务级别的等价物 --尝试 命令行选项。

-p P, - 优先事项 P
任务的优先级。 P 应该是一个整数。 较大的值具有较高的优先级。
默认值为 0。 优先级只是提示,并不严格——如果任务不能
匹配到一个可用的插槽(例如,由于资源可用性),但优先级较低
任务可以,那么任务将被推迟并执行优先级较低的任务。
可以通过指定 pegasus::pmc_priority 为 DAX 中的作业设置此选项
个人资料。

-f VAR=文件, --管道转发 VAR=文件
将 I/O 转发到文件 文件 使用管道与任务通信。 环境
变量 VAR 将被设置为管道的文件描述符的值
任务可以写入以获取数据 文件. 例如,如果任务指定: -f
FOO=/tmp/foo 那么任务的环境变量 FOO 将被设置为一个数字
(例如 3) 表示文件 /tmp/foo。 为了在一个
Pegasus DAX 需要设置 pegasus::pmc_arguments 配置文件(注意
pmc_arguments 必须包含参数的“-f”部分,因此有效值是:
-f A=/tmp/a )。 (看 I / O
转发)

-F 源代码=目标, --文件转发 源代码=目标
将 I/O 转发到文件 目标 从文件 型钢. 任务完成后,工人
将从中读取数据 型钢 并将其发送给 master ,在那里它将被写入
文件 目标。 后 型钢 被读取它被删除。 为了在一个
Pegasus DAX 您需要设置 pegasus::pmc_arguments 配置文件。 (看 I / O 转发)

的格式 边缘 记录是:

“EDGE”父子

其中 是父任务的 ID,并且 孩子 是子任务的ID。 一个
例子 边缘 记录是:

边缘 t01 t02

一个简单的菱形工作流程如下所示:

# 钻石.dag
任务 A /斌/回声 “我是一个”
任务乙 /斌/回声 “我是B”
任务 C /斌/回声 “我是C”
任务 D /斌/回声 “我是D”

边缘AB
边缘交流电
边缘BD
边缘光盘

拯救 FILES


运行 DAG 时可能会发生许多不同类型的错误。 一项或多项任务可能
失败,MPI 作业可能会用完挂墙时间, 飞马-mpi-集群 可能会出现段错误(我们希望
不),系统可能会崩溃等。为了确保 DAG 不需要被
出错后从头重新启动, 飞马-mpi-集群 生成救援文件
对于每个工作流程。

救援文件是一个简单的文本文件,它列出了工作流中的所有任务
已经成功完成。 每次任务完成时都会更新此文件,并刷新
定期,以便如果工作流失败并且用户重新启动它, 飞马-mpi-集群
可以确定哪些任务还需要执行。 因此,救援文件是一种
工作流的事务日志。

救援文件包含零个或多个 DONE 记录。 这些记录的格式是:

“完成”*taskid*

其中 任务编号 是成功完成的任务的 ID。

默认情况下,救援文件被命名为 DAGNAME.救援 哪里 名称 是输入的路径
DAG 文件。 文件名可以通过指定 -r 论据。

的PMC AND 飞马


运用 的PMC 飞马 任务 聚类
PMC 可以用作在 Pegasus 中执行集群作业的包装器。 在这种模式下
Pegasus 将多个任务组合在一起,并将它们作为单个集群作业提交给
远程系统。 然后 PMC 执行集群中的各个任务并返回
结果。

可以通过三种方式将 PMC 指定为 Pegasus 中集群作业的任务管理器:

1.全局在属性文件中

用户可以在属性文件中设置一个属性,导致所有集群
PMC 正在执行的工作流的作业。 在 Pegasus 属性文件中指定:

#PEGASUS 属性文件
pegasus.clusterer.job.aggregator=mpiexec

在上面的例子中,所有远程站点上的所有集群作业都将通过
只要站点目录中的属性值未覆盖 PMC。

2. 通过在站点目录中设置配置文件键“job.aggregator”:


...
执行


在上面的例子中,siteX 上的所有集群作业都将通过
PMC 只要该值在转换目录中未被覆盖。

3. 通过在转换目录中设置配置文件键“job.aggregator”:

tr乙{
站点站点 X {
pfn "/path/to/mytask"
拱形“x86”
操作系统“Linux”
输入“已安装”
配置文件飞马“clusters.size”“3”
配置文件飞马“job.aggregator”“mpiexec”
}
}

在上面的例子中,siteX 上转换 B 的所有集群作业将是
通过 PMC 执行。

通常需要在转换目录中有一个 pegasus::mpiexec 条目
指定 a) 远程站点上 PMC 的路径和 b) 相关的 globus 配置文件
例如 xcount、host_xcount 和 maxwalltime 来控制 MPI 作业的大小。 那个条目
看起来像这样:

tr 飞马::mpiexec {
站点站点 X {
pfn "/path/to/pegasus-mpi-cluster"
拱形“x86”
操作系统“Linux”
输入“已安装”
profile globus“maxwalltime”“240”
profile globus“host_xcount”“1”
profile globus "xcount" "32"
}
}

如果未指定此转换目录条目,Pegasus 将尝试创建一个
基于站点中指定的环境配置文件 PEGASUS_HOME 的默认路径
远程站点的目录。

PMC 可用于 Pegasus 中的水平聚类和基于标签的聚类,但我们
建议使用基于标签的聚类,以便 Pegasus DAX 的整个子图可以
集群为单个 PMC 作业,而不是仅工作流的单个级别。

飞马 简介 的PMC
有几个 Pegasus 配置文件映射到 PMC 任务选项:

pmc_请求内存
此配置文件用于设置 --request-memory 任务选项,通常指定
在 DAX 或转换目录中。

pmc_请求_cpus
该键用于设置 --request-cpus 任务选项,通常在
DAX 或转换目录。

pmc_优先级
此键用于设置 --priority 任务选项,通常在
DAX。

当 PMC 用作 PMC 时,Pegasus 在生成 PMC 的输入 DAG 时使用这些配置文件
Pegasus 中集群作业的任务管理器。

可以在 DAX 中指定配置文件,如下所示:


-a 1 -b 2 -c 3
...
1024
4
10


此示例指定需要 1GB 内存和 4 个内核的 PMC 任务,并且具有
优先级为 10。它在 PMC DAG 中生成一个任务,如下所示:

任务 mytask_ID00000001 -m 1024 -c 4 -p 10 /path/to/mytask -a 1 -b 2 -c 3

运用 的PMC 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 整个 飞马 DAX
Pegasus 还可以配置为将整个工作流程作为单个 PMC 作业运行。 在这
模式 Pegasus 将为整个工作流程生成一个 PMC DAG 以及一个 PBS
可用于提交工作流的脚本。

与使用 PMC 作为任务聚类工具相比,在这种模式下,
在没有 PMC 的情况下执行的工作流。 整个工作流程,包括辅助工作,例如
目录创建和文件传输,由 PMC 管理。 如果 Pegasus 配置在这个
模式,则不需要 DAGMan 和 Condor。

要在 PMC-only 模式下运行,请在 Pegasus 中将属性“pegasus.code.generator”设置为“PMC”
属性文件:

pegasus.code.generator=PMC

为了提交生成的 PBS 作业,您可能需要对 .pbs 文件进行更改
由 Pegasus 生成以使其与您的集群一起使用。 这种模式是实验性的
没有被广泛使用。

记录


默认情况下,所有日志消息都打印到 stderr。 如果您使用以下方法打开日志记录
-v 那么你最终可能会收到很多 stderr 从工人转发到
主。

日志级别按严重性顺序是:FATAL、ERROR、WARN、INFO、DEBUG 和 TRACE。

默认日志记录级别为 INFO。 可以增加日志记录级别 -v
减少 -q.

TASK 标准输入输出


默认情况下,任务的 stdout 和 stderr 将被重定向到 master 的 stdout 和
标准错误。 您可以使用以下命令更改这些文件的路径 -o-e 论据。 你也可以
使用 --每个任务-stdio 争论。 请注意,如果每个任务
不使用 stdio 文件,则所有 worker 的 stdio 将合并为一出一
err 文件最后由 master 执行,因此来自不同 worker 的 I/O 不会交错,
但是每个工作程序的 I/O 将按照它的生成顺序出现。 还要注意的是,
如果作业因任何原因失败,则不会合并输出,而是会有
每个名为 DAGFILE.out.X 和 DAGFILE.err.X 的 worker 对应一个文件,其中 DAGFILE 是路径
到输入 DAG,和 X 是工人的等级。

主办方 脚本


主机脚本是一个 shell 脚本或可执行文件 飞马-mpi-集群 在每个启动
运行它的唯一主机。 它们可用于启动辅助服务,例如
memcached,工作流中的任务需要。

使用以下任一方式指定主机脚本 --主机脚本 论证或 PMC_主机_脚本
环境变量。

主机脚本在以下时间启动 飞马-mpi-集群 启动并且必须以退出代码退出
0 之前可以执行任何任务。 如果主机脚本返回非零退出代码,
然后工作流中止。 主机脚本有 60 秒的时间来执行任何设置
必需的。 如果它在 60 秒内没有退出,那么一个 SIGALRM 信号被传送到
进程,如果不处理,将导致进程终止。

当工作流完成时, 飞马-mpi-集群 将向主机发送 SIGTERM 信号
脚本的进程组。 任何由主机脚本运行的子进程都将收到
这个信号除非他们创建了自己的进程组。 如果还有剩余的进程
收到这个信号,然后他们将有几秒钟的时间退出,然后他们将
发送 SIGKILL。 这是由宿主脚本启动的进程的机制
通知工作流终止。

基于资源的 排程


高性能计算资源通常具有较低的内存与 CPU 之比。 同时
时间,工作流任务通常对内存有很高的要求。 通常,内存要求
工作流任务的数量超过了给定主机上每个 CPU 可用的内存量。 作为一个
结果,可能需要禁用某些 CPU 以释放足够的内存来运行
任务。 同样,许多代码都支持多核主机。 在那种情况下是
确保运行任务所需的内核数量
主机上的内核数不要超过该主机上的可用内核数。

为了让这个过程更有效率, 飞马-mpi-集群 支持基于资源的
调度。 在基于资源的调度中,工作流中的任务可以指定多少
内存以及它们需要多少 CPU,以及 飞马-mpi-集群 将安排他们,以便
在给定主机上运行的任务不超过物理内存和 CPU 的数量
可用的。 这使 飞马-mpi-集群 充分利用所有可用的 CPU
当任务的内存要求较低时,但也会在任务的内存不足时禁用一些 CPU
内存要求更高。 它还支持混合使用单核和
要在异构池上执行的多核任务。

如果没有可用的主机具有足够的内存和 CPU 来执行其中之一
工作流中的任务,则工作流被中止。

内存
用户可以指定每个任务所需的内存量和内存量
每个主机可用。 如果任何任务所需的内存量超过可用
所有主机的内存,然后工作流将被中止。 默认情况下,主机内存为
自动确定,但用户可以指定 --主机内存 “说谎”
飞马-mpi-集群. 每个任务所需的内存量在 DAG 中指定
使用 -m/--请求内存 参数(见 DAG ).

CPU的
用户可以指定每个任务所需的CPU数量,以及总CPU数量
在每个主机上可用。 如果任务所需的 CPU 数量超过可用
所有主机上的 CPU,然后工作流将被中止。 默认情况下,一个 CPU 的数量
主机是自动确定的,但用户可以指定 --主机-CPU 过度或
订阅主机不足。 每个任务所需的 CPU 数量在
DAG 使用 -c/--请求-CPU 参数(见 DAG ).

I / O 转发


在具有大量小任务的工作流中,这些任务编写的 I/O 很常见
非常小。 例如,一个工作流可能有 10,000 个任务,每个任务写入几 KB
数据的。 通常,每个任务都会写入自己的文件,从而产生 10,000 个文件。 这个输入/输出
模式在许多并行文件系统上效率很低,因为它需要文件
系统来处理大量的元数据操作,这是许多系统的瓶颈
并行文件系统。

处理此问题的一种方法是将所有 10,000 个任务写入单个文件。 这
这种方法的问题在于它需要这些任务同步它们对
文件使用 POSIX 锁或其他一些互斥机制。 否则,写
来自不同任务的可能会以任意顺序交错,从而导致无法使用的数据。

为了解决这个用例,PMC 实现了一个我们称之为“I/O 转发”的功能。
I/O 转发使 PMC 作业中的每个任务都可以将数据写入任意数量的
以安全的方式共享文件。 它通过让 PMC 工作进程收集数据来做到这一点
由任务编写并使用 MPI 消息传递通过高速网络发送到
PMC 主进程,它被写入输出文件。 通过一个过程(
PMC 主进程)将许多并行任务的所有 I/O 写入文件
同步并安全地写入文件。

在 PMC 中使用 I/O 转发有两种不同的方式:管道和文件。 管道更多
高效,但文件更易于使用。

I / O 转发 运用 管道
使用管道进行 I/O 转发的工作原理是让 PMC 工作进程从每个任务收集数据
使用 UNIX 管道。 这种方法比基于文件的方法更有效,但它
需要更改任务的代码,以便任务写入管道而不是
一个常规文件。

为了使用 I/O 转发,PMC 任务只需要指定 -f/--管道转发
参数指定要将数据转发到的文件的名称,以及一个
PMC 工作进程可以通过环境变量通知它文件
管道的描述符。

例如,如果有一个任务“mytask”需要将数据转发到两个文件:
“myfile.a”和“myfile.b”,它看起来像这样:

任务 mytask -f A=/tmp/myfile.a -f B=/tmp/myfile.b /bin/mytask

当 /bin/mytask 进程启动时,它的环境中有两个变量:“A=3”
和“B=4”,例如。 这些变量的值是文件描述符编号
对应的文件。 在这种情况下,如果任务想要写入“/tmp/myfile.a”,它会得到
环境变量“A”的值,并对该描述符编号调用 write()。 在 C
代码如下:

char *A = getenv("A");
int fd = atoi(A);
char *message = "你好,世界\n";
写(fd,消息, strlen的(信息));

在某些编程语言中,无法直接写入文件描述符。
例如,Fortran 是通过单元号而不是使用文件描述符来引用文件。 在
这些语言,您可以将 CI/O 函数链接到您的二进制文件中,并从中调用它们
用其他语言编写的例程,或者您可以在 Linux 中打开一个特殊文件 / proc中
文件系统来获取您要访问的管道的另一个句柄。 对于后者,文件
您应该打开的是“/proc/self/fd/NUMBER”,其中 NUMBER 是您的文件描述符编号
从环境变量中获取。 对于上面的示例, myfile.a 的管道
(环境变量 A)是“/proc/self/fd/3”。

如果您在使用 飞马启动,如果您将 PMC 用于
Pegasus 工作流程,那么您可以使用一个技巧来避免修改您的代码。 你用
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 / proc中 文件系统,如上所述,但您让 pegasus-kickstart 处理路径
建造。 例如,如果您的应用程序有一个参数 -o,它允许您
指定输出文件,然后您可以像这样编写任务:

任务 mytask -f A=/tmp/myfile.a /bin/pegasus-kickstart /bin/mytask -o /proc/自我/fd/$A

在这种情况下,pegasus-kickstart 将替换应用程序参数中的 $A
你想要的文件描述符编号。 您的代码可以正常打开该路径,写入它,并且
然后关闭它,就好像它是一个普通文件。

I / O 转发 运用
文件 I/O 转发的工作原理是让任务在本地磁盘上的文件中写出数据。
PMC 工作进程读取这些文件并将数据转发到主进程
写入所需的输出文件。 这种方法可能比使用效率低得多
管道,因为它涉及文件系统,它比管道有更多的开销。

文件转发可以通过给 -F/--文件转发 一个任务的论据。

下面是一个例子:

任务 mytask -F /tmp/foo.0=/scratch/foo /bin/mytask -o /tmp/foo.0

在这种情况下,工作进程将期望在 mytask 退出时找到文件 /tmp/foo.0
成功地。 它从该文件中读取数据并将其发送到要写入的主机
/scratch/foo 的结尾。 /tmp/foo.0 被读取后会被worker删除
的过程。

这种方法最适用于本地磁盘是 RAM 文件系统的系统,例如 Cray
XT机器。 或者,任务可以使用 /开发/shm 在常规 Linux 集群上。 它可能
如果文件系统缓存能够在本地磁盘上相对高效地工作
吸收所有的读取和写入。

I / O 转发 注意事项
使用 I/O 转发时,重要的是要考虑一些注意事项。

首先,如果 PMC 作业因任何原因失败(包括工作流因以下原因中止时)
违反 --最大墙时间),则包含转发 I/O 的文件可能已损坏。 他们
可以包括 部分的 记录,意味着只有来自一个或多个任务的部分 I/O
写的,它们可以包括 复制 记录,意味着 I/O 被写入,但是
PMC 作业在任务被标记为成功之前失败,并且工作流是
稍后重新启动。 在这种情况下,我们不保证数据文件的内容。
这取决于读取文件以 a) 检测和 b) 从此类问题中恢复的代码。
为了消除重复记录应包括唯一标识符,并消除
部分记录应包括校验和。

其次,如果您的任务要写入大量数据,则不应使用 I/O 转发
文件。 因为 PMC 工作者正在从管道/文件读取数据到内存中并发送
它在一个 MPI 消息中,如果你写太多,那么工作进程将运行系统
内存不足。 此外,所有数据都需要适合单个 MPI 消息。 在管道转发
大小没有硬性限制,但在文件转发中限制为 1MB。 我们没有
对大型 I/O 的性能进行了基准测试,但任何大于 1 MB 的数据都可能是
太多了。 无论如何,如果您的数据大于 1MB,那么 I/O 转发可能不会
无论如何都有很大的性能优势。

第三,如果任务返回非零退出代码,则 I/O 不会写入文件。 我们
假设如果任务失败,您不想要它产生的数据。

第四,来自不同任务的数据不交错。 写入的所有数据
给定的任务将依次出现在输出文件中。 请注意,您仍然可以获得
部分记录,但是,如果出现来自任务的任何数据,它将永远不会被拆分
输出文件中的非相邻范围。 如果你有 3 个任务写着:“我是一个任务”你
可以得到:

我是任务我是任务我是任务

和:

我是任务I amI am a task

但不是:

我是任务我是任务

第五,来自不同任务的数据以任意顺序出现在输出文件中。 这取决于
PMC以什么顺序执行任务,如果没有,这可能是任意的
任务之间的依赖关系。 写入的数据应该包含足够的信息
如果您需要,您可以确定哪个任务产生了它。 PMC 不
向数据添加任何标头或尾标。

第六,一个任务只有在它的所有 I/O 都成功时才会被标记为成功
书面。 如果工作流成功完成,则保证 I/O 已
书面。

第七,如果 master 因任何原因无法写入输出文件(例如
master 尝试将 I/O 写入目标文件,但 write() 调用返回一个
错误),那么即使任务产生非零退出代码,任务也会被标记为失败。 在
换句话说,即使 PMC 标记任务失败,您也可能获得非零的 kickstart 记录。

第八,管道是只写的。 如果您需要从文件中读取和写入数据
应该使用文件转发而不是管道转发。

第九,所有文件都由master以append方式打开。 这是这样的,如果工作流
失败并必须重新启动,或者如果任务失败并重试,
以前写的不会丢失。 PMC 从不截断文件。 这是原因之一
为什么在输出文件中可以有部分记录和重复记录。

最后,在文件转发中,当任务退出时输出文件被删除。 你不能
即使您将其写入共享文件,也依赖该文件在下一个任务运行时存在
系统。

MISC


更多相关资源 采用
在工作流运行结束时,master 将报告资源利用率
工作。 这是通过将所有执行的任务(包括
失败的任务)并除以作业的总墙时间 N,其中 N 是
包括主进程在内的进程总数和工人总数。 这两个
提供资源利用率值,以便用户可以了解如何
他们正在有效地利用他们分配的资源。 资源利用率低
值建议用户在以后的运行中应该使用更少的内核和更长的壁挂时间,
而高资源利用率值表明用户可以使用更多内核
未来运行并获得更短的墙壁时间。

问题


叉子() exec()
为了让工作进程在计算节点上启动任务,计算节点
必须支持 叉子()exec() 系统调用。 如果您的目标机器运行
不支持这些系统调用的计算节点上的精简操作系统,然后
飞马-mpi-集群 不管用。

中央处理器 用法
许多 MPI 实现都经过优化,以便消息发送和接收进行忙等待
(即,他们对发送或接收的消息进行旋转/轮询,而不是休眠)。 理由是
睡眠会增加开销,而且由于许多 HPC 系统使用专用空间共享
硬件,没有其他进程竞争,所以旋转而不是睡眠可以
产生更好的性能。 在这些实现中,MPI 进程将以 100% CPU 运行
即使他们只是在等待消息,也可以使用。 这对于多核来说是个大问题
任务在 飞马-mpi-集群 因为空闲插槽会消耗 CPU 资源。 为了解决
这个问题 飞马-mpi-集群 进程在检查之间睡眠一小段时间
等待消息。 这会显着降低负载,但会导致短暂的延迟
接收消息。 如果您使用的是在消息发送时休眠的 MPI 实现,并且
接收而不是忙等待,然后您可以通过指定
--接收时不睡眠 选项。 请注意,如果出现以下情况,主人将始终处于睡眠状态 --最大墙时间 is
指定是因为无法在 MPI 中中断或以其他方式使阻塞调用超时
(例如,SIGALRM 不会导致 MPI_Recv 返回 EINTR)。

环境 变数


下面的环境变量是命令行选项的别名。 如果环境
变量存在,则将其用作关联选项的默认值。 如果两者都是
存在,则使用命令行选项。

PMC_主机_脚本
的别名 --主机脚本 选项。

PMC_主机_内存
的别名 --主机内存 选项。

PMC_主机_CPUS
的别名 --主机-CPU 选项。

PMC_MAX_WALL_TIME
的别名 --最大墙时间 选项。

使用 onworks.net 服务在线使用 pegasus-mpi-cluster


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




×
广告
❤️在这里购物、预订或购买——免费,有助于保持服务免费。