我们正在使用 GridEngine 运行计算作业。每个作业返回 3 个不同的时间:
这三者之间有什么区别?这三个中哪一个最适合比较两个应用程序/脚本的性能
到现在为止,我有 10 台 HPC 服务器,面向功率计算。我的用户需要使用 qmake 启动多个进程。用户习惯于使用 ubuntu 9.10,并且存储库中的软件对他们来说是可切换的。
我已将 ubuntu 9.10 部署到所有 10 个服务器(pxe 岩石)。
现在我们使用并行 ssh 和集群 ssh,它们允许向所有服务器启动相同的进程。使用这个工具这个工具服务器保持独立,但具有相同的软件和相同的启动命令。
现在我们想进入下一步,将所有服务器视为一个服务器,其他 9 个服务器的所有资源都被视为它的资源。
在处理时间和设计启动命令的时间上,差异将是巨大的。
关于使用哪些软件的任何建议都会非常有用?
谢谢
当我输入时qstat -h
,我得到以下选项
[-s {p|r|s|z|hu|ho|hs|hd|hj|ha|h|a}] show pending, running, suspended, zombie jobs,
jobs with a user/operator/system/array-dependency hold,
jobs with a start time in future or any combination only.
h is an abbreviation for huhohshdhjha
a is an abbreviation for prsh
Run Code Online (Sandbox Code Playgroud)
世界是什么huhohshdhjha
????
我们正在使用 SGE(Sun Grid Manager)。我们对所有用户的并发作业总数有一些限制。
我想知道是否可以对特定用户的并发运行作业数量设置一个临时的、自愿的限制。
例如,用户dave
将要提交 500 个作业,但他不希望同时运行 100 个作业,例如,因为他知道这些作业执行了大量 I/O,从而卡住了文件系统(不幸的是,这是真实的故事)。
那可能吗?
有没有办法让我的用户可以终止自己卡在dr状态的作业?
qstat -f <jobid>
Run Code Online (Sandbox Code Playgroud)
作为用户,返回
job <jobid> is already in deletion
Run Code Online (Sandbox Code Playgroud)
但是当以 root 运行时,它确实被删除了
我正在寻找有关如何精确计算我的工作在我的集群上使用了多少 RAM 的一些指导。我的工作不是多线程的,而是在单个 CPU 上运行。
当我运行我的工作并运行“top”时,我可以看到它使用了这么多内存......
VIRT: 45.6g
RES: 38g
SHR: 9600
Run Code Online (Sandbox Code Playgroud)
这(纠正我错误的地方)对我来说意味着我正在使用 38 Gigs 的真实 RAM,以及 7.6 Gigs 的可能已被转移到交换的东西。大约 40 Gig 的数字是我正在测试的工具的作者所说的我的工作应该使用的数字。
当我从 SGE(使用 qstat 或 qacct)获得这些数字时,困惑就来了。
qacct -j 7270916
在这里我看到
mem 2768.453
maxvmem 4.078G
Run Code Online (Sandbox Code Playgroud)
然而,这些都没有接近我知道我正在使用的 45.6 gig 的 RAM(尽管 maxvmem 听起来确实应该代表 45.6 gig)。
在作业运行时,我尝试使用此命令
qstat -j 7270916
,其中看到了以下行:
usage 1: cpu=00:01:37, mem=168.12988 GBs, io=38.64676, vmem=1.665G, maxvmem=4.078G
Run Code Online (Sandbox Code Playgroud)
我想 mem 是运行中使用/释放/使用/释放的所有 RAM 的总和(它刚刚完成),但 maxvmem 仍然很低(远低于我预期的 45.6 gigs)。
所以我对 qcct 和 qstat 的使用都生成了与预期数字不一致的数字(我在顶部看到)。
有没有人有关于如何在运行完成后使用 SGE 命令获取有意义的 RAM 使用量的建议?
编辑:我使用的是 SGE 6.2u5
如何使用 SGE 在集群上预留完整节点?
我不希望一台机器有 2 个处理器,另一台机器有 3 个处理器,依此类推。我有一个四核集群,我想保留 4 台完整的机器,每台机器有 4 个插槽。我不能只指定我想要 16 个插槽,因为它不能保证我将在 4 台机器上每台都有 4 个插槽。
将分配规则更改为 FILL_UP 是不够的,因为如果没有完全空闲的机器,SGE 将尽可能地“填满”负载最少的机器,而不是等待 4 台空闲机器然后调度任务。
有什么办法可以做到这一点吗?有没有更好的地方来问这个问题?
我们想要一个基于 SGE 的计算集群,其中有一个队列可以让计算人员访问所有节点,另一个集群队列可以让其他人员偶尔(但大量)使用一半的节点.
我们希望限制第二个队列的资源,以便计算人员可以继续做一些工作,即使非计算人员偶尔(但大量)使用。职员。
有没有办法为一个节点集合设置两个(或多个)SGE 队列,这样一个队列可以包含所有节点,第二个队列包含相同节点的子集,并且两个队列同时运行?
我会研究哪些特定的 SGE 配置参数来设置这样的东西?
我目前面临将 GPU 服务器集成到现有 SGE 环境中的问题。使用谷歌我找到了一些集群的例子,其中已经设置了这个,但没有关于如何完成的信息。
是否有某种形式的方法或教程?它不必非常冗长,但它应该包含足够的信息来启动和运行“cuda 队列”......
提前致谢...
编辑:要设置一个负载传感器,了解一个节点中有多少 GPU 是空闲的,我已经完成了以下操作:
#!/bin/sh 主机名=`uname -n` 而 [1]; 做 读取输入 结果=$? 如果 [ $result != 0 ]; 然后 出口 1 菲 if [ "$input" == "quit" ]; 然后 退出 0 菲 smitool=`which nvidia-smi` 结果=$? 如果 [ $result != 0 ]; 然后 gpusav=0 gpu=0 别的 gpustotal=`nvidia-smi -L|wc -l` gpusused=`nvidia-smi |grep "进程名称" -A 6|grep -v +-|grep -v \|=|grep -v 用法|grep -v "没有运行"|wc -l` gpusavail=`echo $gpustotal-$gpusused|bc` …
在我们的一个计算集群中,我们拥有具有独特硬件资源的系统,对这些资源的访问由设备文件权限控制。每个节点有两个或四个,以及多个 CPU 内核。我们希望能够在同一节点上安排不同用户的作业,并限制对正确分配资源的访问。(某些队列甚至可能仅占用 CPU,无法访问。)
有一段时间,我们一直遵循“嘿,注意,玩得开心”的政策,但即使有最好的意图,每个人也很难保持直率。因此,我们只是一次为给定用户调度整个节点。这对于单线程、单进程的任务来说是浪费的。
使用 Torque,您可以在作业开始之前以 root 身份运行序言脚本。这可以用来适当地设置设备权限。但是我们正在运行(née Sun)网格引擎。它具有每个队列的prolog
脚本,但它们以作业所属的用户身份运行(如 Torque 的prologue.user
),这在这里没有帮助。
是否有明显的我遗漏的东西(我希望),或者解决这个问题的替代方法?我意识到我有源代码,因此可以做任何事情,但我希望有一种标准的方式我只是想念。
谢谢!
背景:
我在工作中使用计算集群(4 个从节点和 1 个头节点),它使用 SGE 作业调度程序。最近我们一直在运行一些执行大量 IO 的作业,它一直在减慢 shell/vim 的使用(小 IO,但我们需要它 24/7 平稳运行)。我找到了 ionice,它似乎是一台计算机的完美解决方案,但我不确定它对集群是否有帮助......
题:
如果我通过带有 ionice 设置(-c2 -n0)的头节点运行一个进程(比如 vim),它是否仍然比其他计算机上的进程(从属设备上的高 IO -c2 -n4)上的进程优先于共享 HD ?
谢谢你的时间!