做调度作业提交过程简单介绍一下
✅作业提交与执行流程
前文提到在 Linux 的 HPC 或超算环境中,可以只在共享存储上安装一次应用程序,然后所有计算节点通过挂载共享目录来访问和执行这些程序,那么作业提交及执行过程是怎么样的流程呢?
结构说明:
- 第一行是用户提交作业的入口;
- 第二行是调度系统客户端,用户通过它与调度系统交互;
- 第三行是调度系统管理端,负责调度和资源分配;
- 第四行是两个计算节点,由调度系统分配作业;
- 最后一行是共享存储系统,位于计算节点之间,统一提供程序和存储结果。
流程图的前两个,提交作业的机器和调度系统客户端的机器可以是同一台,也可以是不同的机器。
- 如果是同一台机器:最简单,用户直接在这台机器上运行
sbatch
等命令; - 如果是不同的机器:提交作业的机器必须能通过某种方式调用调度系统客户端(比如通过 SSH、API、远程命令等);
如果是两台机器,且提交作业的机器是 Windows 系统:
不能直接运行 Slurm 客户端命令,因为 Slurm 客户端工具(如
sbatch
,squeue
)是为 Linux/Unix 系统设计的;解决方案包括:
方案 A:通过 SSH 登录到 Linux 客户端机器
方案 B:通过 Web 界面(如 Slurm-web)或 REST API 提交
- Windows 用户使用 SSH 工具(如 PuTTY、MobaXterm、WSL)登录到一台安装了 Slurm 客户端的 Linux 机器;
- 在那台 Linux 机器上运行
sbatch
提交作业; - Windows 用户通过浏览器访问 Slurm-web;
- Slurm-web 后端部署在 Linux 上,负责调用 Slurm 客户端或 REST API;
- 用户无需直接接触 Linux 命令行;
Slurm-web登录页面如下所示:
提交方式 | 提交端系统要求 | 是否需要 Slurm 客户端 | 说明 |
---|---|---|---|
本地命令行提交 | Linux | ✅ 是 | 用户直接运行 sbatch |
远程 SSH 提交 | 任意(含 Windows) | ✅ 是 | 登录到 Linux 客户端机器 |
Web 页面提交(如 Slurm-web) | 任意(含 Windows) | ❌ 否(用户端) ✅ 是(服务端) | 服务端调用 Slurm 客户端或 API |
REST API 提交 | 任意 | ❌ 否 | 直接通过 HTTP 请求与调度系统交互 |
✅ Slurm Web 界面(如 slurm-web)的作业提交机制
1. Slurm-web 是一个 Web 服务端程序
它通常部署在一台服务器上,提供一个 Web 页面供用户提交作业、查看队列、监控状态等。
2. 它如何提交作业?
方式一:调用 Slurm 命令行客户端(如
sbatch
,squeue
)- Slurm-web 的后端服务通常会在服务器上执行这些命令行工具。
- 本质上,它是通过系统调用或 Python 的
subprocess
模块等方式,间接使用 Slurm 的客户端工具。 - 所以,这种方式 依赖于调度系统客户端的存在。
这种方式的前提是:
- Slurm 客户端工具必须已经安装在运行 Slurm-web 的服务器上;
- 该服务器必须有权限访问调度系统管理端(比如通过网络或本地 socket);
- 用户身份可能通过 Web 登录系统映射到实际提交作业的 Linux 用户,或者使用统一的身份认证机制。
方式二:调用 Slurm 的 API(如 Slurm REST API)
- Slurm 提供了 REST API(如 Slurmrestd),允许通过 HTTP 请求提交作业、查询状态等。
- 如果 Slurm-web 使用的是 REST API,那么它可以不依赖本地命令行客户端,而是通过网络直接与调度系统管理端通信。
- 在这种情况下,REST API 本身就相当于一个“客户端接口”,只是以 HTTP 的形式存在。
提交方式 | 是否依赖调度系统客户端 | 说明 |
---|---|---|
调用 sbatch 等命令 | ✅ 是 | 需要本地安装 Slurm 客户端工具 |
调用 Slurm REST API | ❌ 否(但需要 API 服务) | 通过 HTTP 与 Slurm 管理端通信 |