作为一名气象科研工作者,我们经常需要在超算平台上运行大规模的数值计算任务(例如数据量巨大的模式数据处理或者历史气象数据处理)。
如此庞大的数据量当然是无法直接在前台运行的,你用前台跑的话,管理员想必嘴里万马奔腾,超算的负载也大大增加啦。这时候就需要slurm。
SLURM(Simple Linux Utility for Resource Management)是目前最流行的超算作业调度系统之一。
本文将详细介绍如何在SLURM环境中提交Python任务,让你的气象数据处理更加高效。
SLURM是一个开源的作业调度系统,负责管理超算集群的计算资源分配。它就像一个智能的"任务管家",根据你的需求合理分配CPU、内存、存储等资源。
让我们先来看一个典型的SLURM Python任务提交脚本:
#!/bin/bash
# 配置SLURM作业参数
#SBATCH --job-name=python_job # 作业名称
#SBATCH --output=job_%j.out # 标准输出文件 (%j是作业ID)
#SBATCH --error=job_%j.err # 错误输出文件
#SBATCH --ntasks=1 # 任务数
#SBATCH --cpus-per-task=4 # 每个任务的CPU核心数
#SBATCH --mem=8G # 内存需求
#SBATCH --time=01:00:00 # 最大运行时间 (HH:MM:SS)
#SBATCH --partition=normal # 分区名称
# 激活Python环境(如果需要)
# module load python/3.8
# 或者使用conda环境
# source ~/anaconda3/etc/profile.d/conda.sh
# conda activate myenv
# 运行Python脚本
python your_script.py
#SBATCH --job-name=python_job # 给你的任务起个有意义的名字
#SBATCH --output=job_%j.out # 标准输出保存到文件,%j代表作业ID
#SBATCH --error=job_%j.err # 错误信息单独保存
#SBATCH --ntasks=1 # 通常设置为1,除非是MPI并行程序
#SBATCH --cpus-per-task=4 # 根据你的程序需求调整CPU核心数
#SBATCH --mem=8G # 内存需求,根据数据大小合理设置
#SBATCH --time=01:00:00 # 预估运行时间,格式为HH:MM:SS
#SBATCH --partition=normal # 选择合适的分区(normal/gpu/debug等)
假设我们要运行一个处理气象数据的Python脚本,可以这样配置:
#!/bin/bash
#SBATCH --job-name=wrf_postprocess
#SBATCH --output=wrf_output_%j.log
#SBATCH --error=wrf_error_%j.log
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --mem=16G
#SBATCH --time=06:00:00
#SBATCH --partition=compute
# 加载必要的模块
module load python/3.9
module load netcdf/4.7.4
# 激活Python虚拟环境
source ~/venv/bin/activate
# 设置工作目录
cd /work/your_username/wrf_analysis
# 运行气象数据处理脚本
python process_wrf_data.py --input /data/wrf_output/ --output /results/
如果你的气象深度学习模型需要GPU支持:
#!/bin/bash
#SBATCH --job-name=dl_forecast
#SBATCH --output=dl_output_%j.log
#SBATCH --error=dl_error_%j.log
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=32G
#SBATCH --time=12:00:00
#SBATCH --partition=gpu
#SBATCH --gres=gpu:1 # 请求1个GPU
# 加载CUDA模块
module load cuda/11.2
module load python/3.9
# 激活包含深度学习框架的环境
source ~/miniconda3/etc/profile.d/conda.sh
conda activate torch_env
cd /work/your_username/dl_forecast
# 运行深度学习预报模型
python train_forecast_model.py --epochs 100 --batch-size 64
# 提交脚本
sbatch your_script.sh
# 直接在命令行提交
sbatch --job-name=test_job --time=01:00:00 --mem=4G -- python test.py
# 查看你所有的任务
squeue -u $USER
# 查看特定任务详情
squeue -j JOB_ID
# 查看历史任务信息
sacct -j JOB_ID
# 取消特定任务
scancel JOB_ID
# 取消所有任务
scancel -u $USER
# 建议创建专门的日志目录
#SBATCH --output=logs/job_%j.out
#SBATCH --error=logs/job_%j.err
# 在脚本中创建目录
mkdir -p logs
# 设置Python路径
export PYTHONPATH=/your/project/path:$PYTHONPATH
# 设置临时目录
export TMPDIR=/scratch/$USER/tmp
mkdir -p $TMPDIR
#!/bin/bash
#SBATCH --job-name=climate_analysis
#SBATCH --output=climate_%j.log
#SBATCH --error=climate_%j.err
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=16
#SBATCH --mem=64G
#SBATCH --time=24:00:00
#SBATCH --partition=bigmem
module load python/3.9
# 指定临时文件目录到高速存储
export TMPDIR=/scratch/$USER/temp
mkdir -p $TMPDIR
python climate_data_analysis.py --data-path /large_dataset/climate_data/
--mem参数值掌握SLURM作业提交是高效利用超算资源的关键技能。对于气象科研工作者来说,合理配置计算资源、优化数据处理流程,能够显著提升研究效率。记住要点:
希望这篇文章能帮助你在超算环境中更好地运行Python气象数据处理任务。