首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将SLURM作为输入参数传递给python?

如何将SLURM作为输入参数传递给python?
EN

Stack Overflow用户
提问于 2019-08-10 11:51:17
回答 1查看 2.6K关注 0票数 2

我是用SLURM训练一批卷积神经网络的新手。为了跟踪所有训练好的CNN,我想把SLURM jobID作为输入参数传递给python。将其他变量作为参数传递很好。但是,我无法访问SLURM作业人员的身份。

我已经试过使用${SLURM_JOBID}${SLURM_JOB_ID}%j%J了。在传递到python之前,我还尝试将这些slurm变量写入变量中。

以下是我的最新代码:

代码语言:javascript
复制
#!/bin/bash

# --- info to user
echo "script started ... "

# --- setup environment
module purge            # clean up
module load python/3.6
module load nvidia/10.0
module load cudnn/10.0-v7 

# --- display information
HOST=`hostname`
echo "This script runs the CNN. Slurm scheduled it on node $HOST"
echo "I am interested of all environment variables Slurm adds:"
env | grep -i slurm

# --- start running ... 
echo " --- run --- "

# --- define some varibles
dc="dice"
sm="softmax"

# --- run a job using a slurm batch script
for layer in {3..15..2}
  do
    sbatch -N 1 -n 1 --mem=20G --mail-type=END --gres=gpu:V100:3 --wrap="singularity --noslurm tensorflow_19.03-py3.simg python run_CNN_dynlayer.py ${SLURM_JOBID} ${layer} ${dc}"
    sleep 1 # pause 1s to be kind to the scheduler...
    echo "jobid: "+${SLURM_JOBID}
    echo " --- next --- "
  done    

cmd看起来是这样的:

代码语言:javascript
复制
femonk@rarp1 [CNN] ./run_CNN_test.slurm
script started ... 
This script runs the CNN. Slurm scheduled it on node rarp1
I am interested of all environment variables Slurm adds:
SLURM_ACCOUNT=AI
PYTHONPATH=/cluster/slurm/lib64/python3.6/site-packages:/cluster/slurm/lib64/python3.6/site-packages:/cluster/slurm/lib64/python3.6/site-packages:
 --- run --- 
Submitted batch job 3182711
jobid: 
 --- next --- 
femonk@rarp1 [CNN] 

有人知道我的代码出了什么问题吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-26 14:46:12

SLURM_JOBID环境变量仅用于作业流程,而不是提交作业的流程。作业id是从sbatch命令返回的,因此如果您希望它在变量中,则需要分配它。

代码语言:javascript
复制
  do
    SLURM_JOBID=$(sbatch --parsable -N 1 -n 1 --mem=20G --mail-type=END --gres=gpu:V100:3 --wrap="singularity --noslurm tensorflow_19.03-py3.simg python run_CNN_dynlayer.py ${SLURM_JOBID} ${layer} ${dc}")
    sleep 1 # pause 1s to be kind to the scheduler...
    echo "jobid: "+${SLURM_JOBID}
    echo " --- next --- "
  done   

注意命令替换$()sbatch--parsable参数的结合使用。

还请注意,当前输出的行Submitted batch job 3182711将消失,因为它用于填充SLURM_JOBID变量。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57441887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档