设置 MATLAB 作业调度器集群以实现自动调整大小
您可以自定义 MATLAB® 作业调度器 (MJS) 集群以自动调整大小。默认情况下,MJS 集群未启用调整大小功能。这意味着 MJS 会立即拒绝您提交给集群的任何需要超过集群中当前工作进程数的工作。自动调整大小(也称为自动缩放)允许您将此类工作提交到集群,并使集群中的工作进程数量随着提交的工作量自动集群变化。当要做的工作较多时,集群就会增大(扩大),而当要做的工作较少时,集群就会缩小(缩小)。这使得您可以更有效地利用计算资源并节省成本。
要将 MJS 集群配置为自动调整大小,您需要:
在
mjs_def
文件中设置最大工作进程数量。启动 MJS 集群。
设置自动调整大小的进程。
设置最大 Worker 数量
要使 MJS 集群可调整大小,您需要通过编辑 mjs_def
文件来定义集群的最大工作进程数量,如下所示:
打开位于
matlabroot/toolbox/parallel/bin
文件mjs_def.sh
(在 Linux® 上)或mjs_def.bat
(在 Windows® 上),其中matlabroot
是 MATLAB 安装目录。取消注释
#MAX_LINUX_WORKERS=
和#MAX_WINDOWS_WORKERS=
行中的一行或两行,并将它们设置为所需的值。这些变量分别定义了可以调整集群的 Linux 和 Windows 工作进程的最大数量。
可调整大小的 MJS 集群允许队列中的作业需要超过集群中当前工作进程的数量,最多可达 MAX_LINUX_WORKERS
和 MAX_WINDOWS_WORKERS
中指定的数量。其它作业立即取消。
提示
在 mjs_def
文件中,您还可以指定与可调整大小的 MJS 集群配合良好的调度算法,例如 standard
调度算法。有关更多详细 SCHEDULING_ALGORITHM
,请参阅定义 MATLAB 作业调度器启动参数。
启动 MJS 集群
要使用 mjs_def
文件中定义的选项创建集群,请在编辑并保存此文件后启动 MJS 集群。有关如何安装、配置和启动 MJS 集群的更多信息,请参阅使用网络许可证管理器安装 MATLAB 作业调度器。
注意
要在启动集群后更改 Linux 和 Windows 工作进程的最大数量,请使用位于 matlabroot/toolbox/parallel/bin
的 resize
脚本运行 resize update
命令。例如:
% cd matlabroot/toolbox/parallel/bin % ./resize update -jobmanager myJobManager -maxlinuxworkers 4 -maxwindowsworkers 8
设置自动调整大小过程
要使可调整大小的 MJS 集群变化大小,必须设置一个后台进程来定期调整集群的大小。该后台进程的具体实现取决于许多因素,但您可以遵循以下一般建议步骤:
确定所需的集群大小。可调整大小的 MJS 集群的所需大小被报告为每个操作系统的工作进程总数,因此包括所有繁忙的工作进程和集群中已有的一些空闲工作进程。所需的大小根据正在运行的作业和队列中的作业而变化。使用位于
matlabroot/toolbox/parallel/bin
的resize
脚本运行resize status
命令:上面的% cd matlab/toolbox/parallel/bin % ./resize status
resize status
命令以 JSON 格式返回有关可调整集群的信息:解析 JSON 输出以提取表示 MJS 集群所需的 Linux 和 Windows 工作进程数量的{ "jobManagers": [ { "name": "myJobManager", "host": "myhostname", "desiredWorkers": { "linux": 1, "windows": 0 }, "maxWorkers": { "linux": 4, "windows": 8, }, "workers": [ { "name": "worker_1", "host": "myhostname", "operatingSystem": "linux", "state": "busy", "secondsIdle": 0 }, { "name": "worker_2", "host": "myhostname", "operatingSystem": "linux", "state": "idle", "secondsIdle": 60 } ] } ] }
desiredWorkers
值。将所需的工作进程数与集群中的工作进程数进行比较,以决定是否需要启动或停止工作进程。使用
resize status
命令输出中的workers
数组来检查集群中的工作进程。为了确保队列中的作业最终运行,必须启动足够的工作进程以匹配或超过所需的工作进程数量。您可以选择性地停止超过所需工作进程数量的空闲工作进程。注意
如果您的环境中工作进程需要很长时间才能启动,您可能需要等待多余的工作进程闲置一段时间后再停止它们。如果过多的空闲工作进程刚一闲置,又需要他们上岗,那么这种方法比立即停工更有效。要检查工作进程空闲了多长时间,请检查工作进程的
secondsIdle
值。根据需要启动或停止工作进程。为此,请使用
startworker
和stopworker
实用程序脚本。为了避免在停止工作进程时中断任何工作,建议您在stopworker
命令中使用-onidle
标志。
另请参阅
startworker
| stopworker
| mjs