You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部分Slurm输出环境变量为空,分布式训练脚本报错求助

问题:Slurm环境变量SLURM_NTASKS_PER_NODE为空导致torchrun报错

我的SBATCH脚本

#!/bin/bash

## Job Misc
#SBATCH --job-name=dummy_job    # Job name
#SBATCH --output=dummy_run.out  # name of output file
#SBATCH --error=dummy_run.err   # name of error file
#SBATCH --partition=GPU         # Partition to run on

## Node config
#SBATCH --nodes=1 # node count
#SBATCH --ntasks-per-node=2 # total number of tasks per node

## Job Config
#SBATCH --cpus-per-task=4 #  cpu cores to use per task


export NCCL_DEBUG=INFO

# Cleans out the modules loaded in interactive and inherited by default 
module purge

# Load software
module load CUDA/11.8.0

# prints the date and time
date

##### Number of total processes ##### 
echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "
echo "Nodelist:= " $SLURM_JOB_NODELIST
echo "Number of nodes:= " $SLURM_JOB_NUM_NODES
echo "Ntasks:= "  $SLURM_NTASKS
echo "Ntasks-per-node:= " $SLURM_NTASKS_PER_NODE
echo "cpus := " $SLURM_TRES_PER_TASK
echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "

nodes=( $( scontrol show hostnames $SLURM_JOB_NODELIST ) )
nodes_array=($nodes)
head_node=${nodes_array[0]}
head_node_ip=$(srun --nodes=1 --ntasks=1 -w "$head_node" hostname --ip-address)

echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "
echo "Nodes:= " $nodes
echo "nodes_array:= " $nodes_array
echo "head_node:= "  $head_node
echo "head_node_ip:= "  $head_node_ip
echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "

echo "Running  training session..."

# Run python script
srun torchrun \
--nnodes=$SLURM_NNODES \
--nproc_per_node=$SLURM_NTASKS_PER_NODE \
--rdzv_id=$RANDOM \
--rdzv_backend=c10d \
--rdzv_endpoint=$head_node_ip:12345 \
/PATH/TO/PYTHON_SCRIPT/train_distributed.py

echo "Training session completed."

报错情况

提交作业后出现以下错误:

return int(nproc_per_node) ValueError: invalid literal for int() with base 10: ''

我添加echo语句检查环境变量,发现SLURM_NTASKS_PER_NODE和SLURM_TRES_PER_TASK是空值,但其他Slurm变量能正常返回正确值。尝试了多种方法,这两个变量依然为空。请问是否可能是HPC管理员未启用这些变量的导出?


回答

确实有可能是HPC管理员没有配置Slurm导出SLURM_NTASKS_PER_NODE和SLURM_TRES_PER_TASK这两个环境变量。Slurm的环境变量导出权限由管理员通过配置文件控制,比如调整slurm.conf参数或PAM设置,可能会限制部分变量的导出。

你可以用以下方案临时解决问题:

  • 对于SLURM_NTASKS_PER_NODE,可以通过已有变量计算得到:单节点场景下,直接用总任务数SLURM_NTASKS即可;多节点场景则用总任务数除以节点数,即$((SLURM_NTASKS / SLURM_JOB_NUM_NODES))。修改torchrun命令如下:
    srun torchrun \
    --nnodes=$SLURM_NNODES \
    --nproc_per_node=$((SLURM_NTASKS / SLURM_JOB_NUM_NODES)) \
    --rdzv_id=$RANDOM \
    --rdzv_backend=c10d \
    --rdzv_endpoint=$head_node_ip:12345 \
    /PATH/TO/PYTHON_SCRIPT/train_distributed.py
    
  • 对于SLURM_TRES_PER_TASK,你已经在脚本中指定了--cpus-per-task=4,可以直接用SLURM_CPUS_PER_TASK变量替代,或者直接使用硬编码值4。

如果需要彻底解决,建议联系HPC管理员确认是否有意限制了这两个变量的导出,或者是否存在Slurm版本配置问题。


内容的提问来源于stack exchange,提问作者Marios Constantinou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:17:03