Skip to content

计算节点 cn-long、cn-short 任务提交

快速命令见章节 快速作业命令

案例在 ~/example

cn-long 与 cn-short 分区说明

  • cn-long 分区

    • 适合 大量单核或少核任务(如参数扫描、批量分子对接、轻量计算任务)
    • 特点:任务时间较长,资源按单核分配,强调 多任务并行提交
    • 常见用法:同时提交多个小作业,每个作业占用 1–4 核心
  • cn-short 分区

    • 适合 多节点并行计算任务(如大规模分子动力学模拟、并行数值计算)
    • 特点:作业时长限制较短,但支持跨节点并行,适合快速跑大规模任务
    • 常见用法:通过 -N--ntasks-per-node 跨节点提交,运行数十到上百核并行作业

cn-long 串行任务

基础脚本

以下示例展示如何在 cn-long 分区 提交一个 单节点、单核串行任务。假设用户登录账号为 skl_lcy

基础脚本为~/example/job-cnlong-c.srp

bash
#!/bin/bash
#SBATCH -J sle135926                # 作业名称
#SBATCH -p cn-long                  # 分区
#SBATCH -N 1                        # 节点数
#SBATCH -o sle135926_%j.out         # 标准输出文件(%j为JobID)
#SBATCH -e sle135926_%j.err         # 标准错误文件
#SBATCH --no-requeue                # 中断后不自动重排
#SBATCH -A skl_g1                   # 账号(组名_g1)
#SBATCH --qos=sklcnl                # QOS(组名+分区缩写)
#SBATCH -c 1                        # CPU核心数(单核串行任务)
srun   sleep 11                     # 运行命令(示例)

参数说明

账号与QOS规则:

  • 登录名若为 skl_lcy → 账号:skl_g1QOSsklcnl
  • 登录名若为 pku_hsc → 账号:pku_g1QOSpkucnl

只需根据用户名替换 -A--qos 即可

修改脚本:串行任务附加信息

bash
#!/bin/bash
#SBATCH -J sle135926
#SBATCH -p cn-long
#SBATCH -N 1 
#SBATCH -o sle135926_%j.out
#SBATCH -e sle135926_%j.err
#SBATCH --no-requeue
#SBATCH -A skl_g1
#SBATCH --qos=sklcnl
#SBATCH -c 1

# 运行命令(示例)
srun   sleep 11

# 运行环境信息
pwd
date
hostname

cn-long 并行任务:Intel 编译与单节点提交

1. 进入测试目录

bash
cd ~/lustre1/test

2. 创建源码文件 mpi_test.c

c
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char* argv[])
{
    int rank, size;
    char filename[256], hostname[128];
    FILE *fp;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    gethostname(hostname, sizeof(hostname));

    // 每个 rank 输出单独文件 rank-XX.txt
    sprintf(filename, "rank-%d.txt", rank);
    fp = fopen(filename, "w");
    if (fp != NULL) {
        fprintf(fp, "Hostname: %s\n", hostname);
        fprintf(fp, "Rank: %d out of %d processes\n", rank, size);
        fclose(fp);
    }

    // rank=0 输出汇总说明
    if (rank == 0) {
        fp = fopen("summary.txt", "w");
        if (fp != NULL) {
            fprintf(fp, "MPI test run with %d processes.\n", size);
            fprintf(fp, "Each process writes rank-XX.txt in this directory.\n");
            fclose(fp);
        }
    }

    MPI_Finalize();
    return 0;
}

3. 编译程序

加载 Intel 环境并编译:

bash
source /appsnew/source/intel2025.sh
mpicxx -o mpi_test mpi_test.c

4. 提交脚本示例

~/lustre1/test/ 下创建 job-cnlong-n.srp

bash
#!/bin/bash
#SBATCH -J sle135926            # 作业名称
#SBATCH -p cn-long              # 分区
#SBATCH -N 1                    # 节点数
#SBATCH -o sle135926_%j.out     # 标准输出
#SBATCH -e sle135926_%j.err     # 标准错误
#SBATCH --no-requeue            # 不自动重排
#SBATCH -A skl_g1               # 账号
#SBATCH --qos=sklcnl            # 不自动重排
#SBATCH -n 64                   # 总任务数 (ntasks)

# 加载 Intel MPI 环境
source /appsnew/source/intel2025.sh

# 运行 MPI 程序(从 example 目录调用)
mpirun -n $SLURM_NTASKS ./mpi_test

提交作业:

bash
sbatch job-cnlong-n.srp

5. 查看结果

作业完成后,在 ~/lustre1/test/ 下会生成:

bash
job-cnlong-n.srp  rank-13.txt  rank-1.txt   rank-26.txt  rank-32.txt  rank-39.txt  rank-45.txt  rank-51.txt  rank-58.txt  rank-6.txt
mpi_test          rank-14.txt  rank-20.txt  rank-27.txt  rank-33.txt  rank-3.txt   rank-46.txt  rank-52.txt  rank-59.txt  rank-7.txt
mpi_test.c        rank-15.txt  rank-21.txt  rank-28.txt  rank-34.txt  rank-40.txt  rank-47.txt  rank-53.txt  rank-5.txt   rank-8.txt
rank-0.txt        rank-16.txt  rank-22.txt  rank-29.txt  rank-35.txt  rank-41.txt  rank-48.txt  rank-54.txt  rank-60.txt  rank-9.txt
rank-10.txt       rank-17.txt  rank-23.txt  rank-2.txt   rank-36.txt  rank-42.txt  rank-49.txt  rank-55.txt  rank-61.txt  sle135926_64722.err
rank-11.txt       rank-18.txt  rank-24.txt  rank-30.txt  rank-37.txt  rank-43.txt  rank-4.txt   rank-56.txt  rank-62.txt  sle135926_64722.out
rank-12.txt       rank-19.txt  rank-25.txt  rank-31.txt  rank-38.txt  rank-44.txt  rank-50.txt  rank-57.txt  rank-63.txt  summary.txt

示例rank-42.txt

bash
Hostname: c03b01n02
Rank: 42 out of 64 processes

示例summary.txt

bash
MPI test run with 64 processes.
Each process writes rank-XX.txt in this directory.

cn-long 并行任务:OpenMPI 编译与单节点提交

1. 配置环境

在运行前先加载 OpenMPI 环境:

bash
cd ~/lustre1/test
source /appsnew/source/openmpi-5.0.8.sh

确认 OpenMPI 路径正确:

bash
[skl_lcy@login01 test]$ which mpicxx
/appsnew/opt/openmpi/openmpi-5.0.8/bin/mpicxx

2. 编译程序

假设源码 mpi_test.c (配置同上)已经在 ~/lustre1/test,直接编译:

bash
mpicxx -o mpi_test mpi_test.c

编译后得到可执行文件 mpi_test

3. 提交脚本

~/lustre1/test/ 创建 job-cnlong-n.srp

bash
#!/bin/bash
#SBATCH -J mpitest
#SBATCH -p cn-long
#SBATCH -N 1
#SBATCH -n 64
#SBATCH -o mpitest_%j.out
#SBATCH -e mpitest_%j.err
#SBATCH -A skl_g1
#SBATCH --qos=sklcnl
#SBATCH --no-requeue

# 加载 OpenMPI 环境
source /appsnew/source/openmpi-5.0.8.sh

# 在当前目录运行 OpenMPI 程序
mpirun -np $SLURM_NTASKS ./mpi_test

提交作业:

bash
sbatch job-cnlong-n.srp

4. 查看结果

运行完成后,在 ~/lustre1/test/ 下会生成:

bash
job-cnlong-n.srp   rank-11.txt  rank-18.txt  rank-24.txt  rank-30.txt  rank-37.txt  rank-43.txt  rank-4.txt   rank-56.txt  rank-62.txt
mpi_test           rank-12.txt  rank-19.txt  rank-25.txt  rank-31.txt  rank-38.txt  rank-44.txt  rank-50.txt  rank-57.txt  rank-63.txt
mpitest_64725.err  rank-13.txt  rank-1.txt   rank-26.txt  rank-32.txt  rank-39.txt  rank-45.txt  rank-51.txt  rank-58.txt  rank-6.txt
mpitest_64725.out  rank-14.txt  rank-20.txt  rank-27.txt  rank-33.txt  rank-3.txt   rank-46.txt  rank-52.txt  rank-59.txt  rank-7.txt
mpi_test.c         rank-15.txt  rank-21.txt  rank-28.txt  rank-34.txt  rank-40.txt  rank-47.txt  rank-53.txt  rank-5.txt   rank-8.txt
rank-0.txt         rank-16.txt  rank-22.txt  rank-29.txt  rank-35.txt  rank-41.txt  rank-48.txt  rank-54.txt  rank-60.txt  rank-9.txt
rank-10.txt        rank-17.txt  rank-23.txt  rank-2.txt   rank-36.txt  rank-42.txt  rank-49.txt  rank-55.txt  rank-61.txt  summary.txt

内容与 Intel 版本相同,只是编译/运行环境换成了 OpenMPI

  • Intel MPIOpenMPI 区别只在于:
    • 加载的环境脚本不同 (intel2025.sh vs openmpi-5.0.8.sh)
    • 编译器、运行命令路径不同(但参数用法一致)
  • 其他流程(源码、编译、提交、结果查看)完全一样。

cn-long 跨节点提交

1. 使用 -n

参考脚本 cat job-cnlong-more-n.srp

bash
#!/bin/bash
#SBATCH -J mpitest
#SBATCH -p cn-long
#SBATCH -N 2                   # 节点数
#SBATCH -n 128                 # 总任务数
#SBATCH -o mpitest_%j.out
#SBATCH -e mpitest_%j.err
#SBATCH -A skl_g1
#SBATCH --qos=sklcnl
#SBATCH --no-requeue

# 加载 MPI 环境
source /appsnew/source/intel2025.sh

# 运行程序(此时 $SLURM_NTASKS=128)
mpirun -n $SLURM_NTASKS ./mpi_test

说明

  • -N 2 表示使用 2 个节点
  • -n 128 表示总共运行 128 个 MPI 进程(自动在 2 个节点间分配,每节点 64 个进程)

2. 使用 --ntasks-per-node

参考脚本 job-cnlong-more2-n.srp

bash
#!/bin/bash
#SBATCH -J mpitest
#SBATCH -p cn-long
#SBATCH -N 2                       # 节点数
#SBATCH --ntasks-per-node=64       # 每节点进程数
#SBATCH -o mpitest_%j.out
#SBATCH -e mpitest_%j.err
#SBATCH -A skl_g1
#SBATCH --qos=sklcnl
#SBATCH --no-requeue

# 加载 MPI 环境
source /appsnew/source/intel2025.sh

# 运行程序(此时 $SLURM_NTASKS=128)
mpirun -n $SLURM_NTASKS ./mpi_test

说明

  • --ntasks-per-node=64 表示每个节点启动 64 个 MPI 进程
  • -N 2 → 总进程数 = 2 × 64 = 128
  • 注意:--ntasks-per-node 不能大于单节点最大核心数,否则任务会调度失败。

对比

  • 两种写法效果一致:-n 直接指定总任务数,--ntasks-per-node 指定每节点任务数。
  • $SLURM_NTASKS 会自动等于总进程数,脚本里统一用它调用 mpirun,保证通用性。
  • 推荐在实际科研任务中用 脚本 2,更直观地控制单节点进程数。

cn-short 分区任务脚本与提交

在不同分区提交作业时,脚本内容大体一致,只需要根据分区调整 -p、账号 -AQOS 参数即可。

下面给出 job-cnshort-c.srp 脚本的示例

bash
#!/bin/bash
#SBATCH -J sle135926
#SBATCH -p cn-short
#SBATCH -N 1 
#SBATCH -o sle135926_%j.out
#SBATCH -e sle135926_%j.err
#SBATCH --no-requeue
#SBATCH -A skl_g1
#SBATCH --qos=sklcns
#SBATCH -c 1
srun   sleep 11

脚本逻辑完全相同,仅需修改:

  • -p 分区名:cn-longcn-short
  • --qossklcnlsklcns
  • 其余参数(作业名、节点数、核心数等)保持不变。

由北京大学智慧药物平台提供支持