您的位置:首页 >SLURM并行运行脚本,多文件处理技巧
发布于2025-10-06 阅读(0)
扫一扫,手机访问

本文旨在指导用户如何使用 SLURM(Simple Linux Utility for Resource Management)在多个输入文件上并行运行同一个 Python 脚本。文章详细解释了 SLURM 脚本的编写,包括资源申请、任务分配以及如何利用 srun 命令实现并行处理。同时,还介绍了 SLURM 任务数组的概念,并提供代码示例,帮助读者高效地利用集群资源完成任务。
在科学研究和数据处理中,经常需要对大量文件执行相同的操作。如果每个文件处理时间较长,串行执行效率低下。SLURM 提供了强大的并行计算能力,可以有效地解决这个问题。本文将介绍如何使用 SLURM 在多个文件上并行运行同一个 Python 脚本。
在使用 SLURM 之前,需要理解其资源分配机制。以下是一些关键参数:
为了避免节点资源超额分配,建议使用 --ntasks 和 --cpus-per-task 参数,根据实际情况合理分配资源。
srun 命令用于在 SLURM 集群上启动并行任务。与 sbatch 不同,srun 会立即执行任务,而 sbatch 只是提交任务到队列。
以下是一个示例 SLURM 脚本,演示如何使用 srun 在多个文件上并行运行 Python 脚本:
#!/bin/bash
#SBATCH --nodes=8
#SBATCH --ntasks-per-node=128
INPUT_DIR='path/to/input/dir'
OUTPUT_DIR='/path/to/output/dir'
# 读取文件名到数组
INPUT_STEMS_FILE='/some/path/to/list/of/inputs.txt'
INPUT_STEMS=()
while IFS= read -r line; do
INPUT_STEMS+=("$line")
done < <(tr -d '\r' < INPUT_STEMS_FILE)
for j in $(seq 0 $((${#INPUT_STEMS[@]} - 1))); do
# 循环处理每个文件
# 轮询分配到节点 (0, 1, ..., 8, 0, 1, ...)
NODE_NUMBER=$((j % SLURM_NNODES))
# 动态生成文件名
INPUT_FILE_NAME="$INPUT_DIR/${INPUT_STEMS[$j]}.txt"
OUTPUT_FILE_NAME="$OUTPUT_DIR/$j.txt"
# 在一个节点上运行一个任务,使用轮询分配
srun -N1 -n1 -w ${SLURM_NODELIST: $NODE_NUMBER:1} python_script.py --input "$INPUT_FILE_NAME" > "$OUTPUT_FILE_NAME" &
done
wait代码解释:
注意事项:
SLURM 任务数组是另一种并行处理多个文件的有效方法。任务数组允许你创建一组相关的任务,每个任务处理不同的输入文件。
以下是一个使用任务数组的示例 SLURM 脚本:
#!/bin/bash
#SBATCH --array=0-99
INPUT_DIR='path/to/input/dir'
OUTPUT_DIR='/path/to/output/dir'
# Read the file names into an array
INPUT_STEMS_FILE='/some/path/to/list/of/inputs.txt'
INPUT_STEMS=()
while IFS= read -r line; do
INPUT_STEMS+=("$line")
done < <(tr -d '\r' < INPUT_STEMS_FILE)
# Get the task ID from the SLURM_ARRAY_TASK_ID environment variable
TASK_ID=$SLURM_ARRAY_TASK_ID
# Dynamically generate filename
INPUT_FILE_NAME="$INPUT_DIR/${INPUT_STEMS[$TASK_ID]}.txt"
OUTPUT_FILE_NAME="$OUTPUT_DIR/$TASK_ID.txt"
# Run the python script
python_script.py --input "$INPUT_FILE_NAME" > "$OUTPUT_FILE_NAME"代码解释:
注意事项:
本文介绍了两种使用 SLURM 并行处理多个文件的方法:使用 srun 命令和使用 SLURM 任务数组。选择哪种方法取决于具体的应用场景和资源需求。通过合理配置 SLURM 脚本,可以充分利用集群资源,高效地完成并行计算任务。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9