"令人尴尬的并行"(Embarrassingly Parallel)是指一类特殊的并行计算问题,其中各个计算任务之间完全独立,不需要相互通信或共享数据。这类问题特别适合在分布式计算环境中高效执行。
PBS是一个作业调度系统,用于管理计算资源和工作负载。它包含三个主要组件:
#!/usr/bin/env python
import sys
import time
def process_task(task_id):
"""模拟一个独立计算任务"""
print(f"Processing task {task_id}")
time.sleep(5) # 模拟计算耗时
return f"Result for task {task_id}"
if __name__ == "__main__":
task_id = sys.argv[1] # 从命令行参数获取任务ID
result = process_task(task_id)
print(result)
#!/bin/bash
#PBS -N parallel_job
#PBS -l nodes=4:ppn=8 # 请求4个节点,每个节点8个核心
#PBS -l walltime=01:00:00
#PBS -j oe
#PBS -o output.log
# 加载Python环境
module load python/3.8
# 进入工作目录
cd $PBS_O_WORKDIR
# 创建任务列表
TASKS=$(seq 1 32) # 32个独立任务
# 使用GNU parallel并行执行
parallel -j $PBS_NP python worker.py {} ::: $TASKS
qsub submit_job.pbs
原因:
解决方案:
# 确保脚本有执行权限
chmod +x worker.py
# 在PBS脚本中明确指定Python路径
which python3 > python_path.txt
原因:
解决方案:
# 检查集群资源
qstat -Q
qstat -a
# 调整PBS资源请求
#PBS -l nodes=2:ppn=4 # 减少资源请求
#PBS -l walltime=02:00:00 # 增加运行时间
原因:
解决方案:
# 在Python脚本中为每个任务创建独立日志文件
import os
log_file = f"task_{task_id}.log"
with open(log_file, 'w') as f:
f.write(f"Processing task {task_id}\n")
f.write(f"Result: {result}\n")
通过这种Python+PBS的组合,可以高效地解决各类"令人尴尬的并行"问题,充分利用集群计算资源。
没有搜到相关的文章