Main Content

本页采用了机器翻译。点击此处可查看最新英文版本。

并行计算软件如何运行作业

概述

Parallel Computing Toolbox™ 和 MATLAB® Parallel Server™ 软件让您可以使用多核和多处理器计算机上的 MATLAB 和 Simulink® 解决计算和数据密集型问题。并行处理结构(例如并行 for 循环和代码块、分布式数组、并行数值算法和消息传递函数)使您可以在 MATLAB 中以高级别实现任务并行和数据并行算法,而无需针对特定硬件和网络架构进行编程。

作业是您需要在 MATLAB 会话中执行的一些大型操作。一项作业被分解成几个部分,称为任务。您决定如何最佳地将您的作业划分为任务。您可以将您的作业分成相同的任务,但任务不必相同。

定义作业及其任务的 MATLAB 会话称为客户端会话。通常,这是在您编写 MATLAB 的机器上。客户端使用 Parallel Computing Toolbox 软件来执行作业和任务的定义并在您机器的本地集群上运行它们。MATLAB Parallel Server 软件是在机器集群上执行作业的产品。

MATLAB 作业调度器是协调作业执行和任务评估的进程。MATLAB 作业调度器将要评估的任务分配给服务器上称为工作进程的各个 MATLAB 会话。使用 MATLAB 作业调度器访问集群是可选的;将任务分配给集群工作进程程序也可以由第三方调度器执行,例如 Microsoft® Windows® HPC Server(包括 CCS)或 Spectrum LSF®

基本并行计算设置

Schematic showing a MATLAB Client using a scheduler to distribute tasks to MATLAB workers.

工具箱和服务器组件

MATLAB 作业调度器、工作程序和客户端

MATLAB 作业调度器可以在网络上的任何机器上运行。MATLAB 作业调度器按照提交的顺序运行作业,除非队列中的任何作业被提升、降级、取消或删除。

每个工作进程由 MATLAB 作业调度器从正在运行的作业中分配一项任务,执行该任务,将结果返回给 MATLAB 作业调度器,然后再分配另一项任务。当正在运行的作业的所有任务都已分配给工作进程时,MATLAB 作业调度器将开始在下一个可用的工作进程上运行下一项作业。

MATLAB Parallel Server 软件设置通常包括许多可以同时执行任务的工作进程,从而加快大型 MATLAB 作业的执行速度。哪个工作进程执行特定任务通常并不重要。在独立作业中,工作进程每次评估一个可用任务(可能同时进行,也可能不同时进行),然后将结果返回给 MATLAB 作业调度器。在通信作业中,工作进程同时评估任务。然后,MATLAB 作业调度器将作业中所有任务的结果返回给客户端会话。

注意

为了在本地测试您的应用程序或其他目的,您可以将单台计算机配置为客户端、工作进程和 MATLAB 作业调度器主机。您还可以在一台机器上拥有多个工作进程会话或多个 MATLAB 作业调度器会话。

并行计算会话的交互

Schematic showing two MATLAB Clients using one scheduler to distribute tasks to MATLAB workers. The client workers send jobs to the scheduler and retrieve results. The workers retrieve tasks from the scheduler and send their results.

大型网络可能包括多个 MATLAB 作业调度程序以及多个客户端会话。任何客户端会话都可以在任何 MATLAB 作业调度器上创建、运行和访问作业,但一个工作进程会话一次只能注册到一个 MATLAB 作业调度器。下图显示了具有多个 MATLAB 作业调度程序的配置。

具有多个客户端和 MATLAB 作业程序的集群

Schematic showing four MATLAB Clients communicating with two schedules. Each scheduler distributes tasks to three workers.

本地集群

Parallel Computing Toolbox 软件的一个特性是能够在客户端计算机上运行本地工作进程集群,这样您无需远程集群或 MATLAB Parallel Server 软件即可运行作业。在这种情况下,客户端所需的所有处理、调度和任务评估都在同一台计算机上执行。这使您有机会在网络集群上运行并行应用程序之前对其进行开发、测试和调试。

第三方调度器

作为使用 MATLAB 作业调度器的替代方法,您可以使用第三方调度器。这可以是 Microsoft Windows HPC Server(包括 CCS)、Spectrum LSF 调度器、PBS Pro® 调度器、TORQUE 调度器或通用调度器。

在第三方调度器和 MATLAB 作业调度器之间进行选择.  在决定使用第三方调度器或 MATLAB 作业调度器来分配任务时,您应该考虑以下几点:

  • 您的集群是否已经有调度器?

    如果您已经有调度器,则可能需要使用它作为控制集群访问的一种手段。您现有的调度器可能与 MATLAB 作业调度器一样易于使用,因此可能不需要涉及额外的管理。

  • 处理并行计算作业是您唯一需要的集群调度管理吗?

    MATLAB 作业调度器是专为 MathWorks® 并行计算应用程序设计的。如果不需要其他调度任务,第三方调度器可能不会提供任何优势。

  • 您的集群上是否已有文件共享配置?

    MATLAB 作业调度器可以处理并行计算应用程序所需的所有文件和数据共享。这对于共享访问有限的配置可能会有帮助。

  • 您对批处理模式或托管交互式处理感兴趣吗?

    当您使用 MATLAB 作业调度器时,工作进程通常始终保持运行,专用于其 MATLAB 作业调度器。使用第三方调度器,工作进程作为应用程序运行,启动时评估任务,并在任务完成时停止。如果任务很小或者花费的时间很少,那么为每个任务启动一个工作进程可能会花费太多的开销时间。

  • 是否存在安全问题?

    您自己的调度器可能被配置来满足您的特定安全要求。

  • 您的集群上有多少个节点?

    如果您有一个大型集群,那么您可能已经有一个调度器。如果您对集群大小和 MATLAB 作业调度器有任何疑问,请咨询您的 MathWorks 代表。

  • 谁管理您的集群?

    管理集群的人员可能对作业的安排方式有自己的偏好。

  • 您是否需要监控工作进度或访问中间数据?

    MATLAB 作业调度器运行的作业支持事件和回调,以便特定函数可以在每个作业和任务从一个状态进展到另一个状态时运行。

混合平台或异构集群上的组件

Parallel Computing Toolbox 软件和 MATLAB Parallel Server 软件支持 Windows、UNIX®Macintosh 操作系统。支持混合平台,因此客户端、MATLAB 作业调度器和工作进程不必位于同一平台上。其他限制在系统要求中描述。

在混合平台环境中,系统管理员应确保遵循安装软件的本地机器的正确安装说明。

mjs 服务

如果您正在使用 MATLAB 作业调度器,则每台主机工作进程或 MATLAB 作业调度器会话的机器也必须运行 mjs 服务。

mjs 服务控制工作进程和 MATLAB 作业调度器会话,并在机器主机时恢复它们。如果工作进程或 MATLAB 作业调度器机器崩溃,则当 mjs 服务再次启动时(通常配置为在机器启动时启动),它会自动重新启动 MATLAB 作业调度器和工作进程会话,以从系统崩溃之前恢复会话。有关 mjs 服务的更多信息请参阅 MATLAB Parallel Server 文档。

客户端中表示的组件

客户端会话通过调用方法和配置 MATLAB 作业调度器集群对象的属性与 MATLAB 作业调度器进行通信。尽管通常不需要,但客户端会话也可以通过工作进程对象访问有关工作进程会话的信息。

当您在客户端会话中创建作业时,该作业实际上存在于 MATLAB 作业调度器作业存储位置。客户端会话可以通过作业对象访问该作业。同样,您在客户端会话中为作业定义的任务存在于 MATLAB 作业调度器数据位置中,您可以通过任务对象访问它们。

作业的生命周期

当您创建并运行一项作业时,它会经历多个阶段。作业的每个阶段都反映在作业对象的 State 属性的值中,该值可以是 pendingqueuedrunningfinished。本节将简要描述每个阶段。

下图说明了作业生命周期的各个阶段。在 MATLAB 作业调度器(或其他调度器)中,作业按其状态分类显示。用于管理作业的某些函数是 createJobsubmitfetchOutputs

作业阶段

Schematic illustrating the life cycle of a job.

下表描述了作业生命周期的每个阶段。

作业阶段

描述

待处理

您使用 Parallel Computing Toolbox 软件的客户端会话中的 createJob 函数在调度器上创建一个作业。该作业的第一个状态是 pending。这是当您通过添加任务来定义作业时。

排队

当对某个作业执行 submit 函数时,MATLAB 作业调度器或调度器会将该作业放入队列,此时该作业的状态为 queued。调度器按照提交的顺序执行队列中的作业,所有作业都会在之前的作业完成后向上移动队列。您可以使用 promotedemote 函数更改队列中作业的顺序。

运行

当作业到达队列顶部时,调度器会将该作业的任务分发给工作进程会话进行评估。该作业的状态现在是 running。如果可用的工作进程数量多于某项作业所需的数量,那么调度器就会开始执行下一项作业。这样,就可以同时有多个作业运行。

已完成

当一份作业的所有任务都已评估后,该作业将移至 finished 状态。此时,您可以使用函数 fetchOutputs 检索作业中所有任务的结果。

失败

当使用第三方调度器时,如果调度器在尝试执行其命令或访问必要文件时遇到错误,则作业可能会失败。

已删除

当一个作业的数据已经从其数据位置或者从具有 delete 函数的 MATLAB 作业调度器中删除时,客户端中该作业的状态为 deleted。仅当作业对象保留在客户端中时,此状态才可用。

请注意,当一项作业完成时,即使您从客户端会话中清除所有对象,其数据仍保留在 MATLAB 作业计划程序的 JobStorageLocation 文件夹中。MATLAB 作业调度器或调度器会保留其已执行的所有作业,直到您以干净的状态重新启动 MATLAB 作业调度器。因此,只要 MATLAB 作业调度器尚未使用 -clean 选项重新启动,您就可以稍后或在另一个客户端会话中从作业中检索信息。

您可以使用作业监视器 GUI 或 delete 函数从 MATLAB 作业调度器或调度程序的存储位置永久删除已完成的作业。