python - 如何使用许多工作人员发送 slurm 作业,而不仅仅是在本地模式下运行?
问题描述
我想使用命令 srun 和 sbatch 在 slurm 集群上使用命令 spark-submit 运行 python 脚本。当我运行当前脚本时,它会一直运行到结束,并且结束状态为 COMPLETED。但是,查看 spark 的历史服务器,我可以看到所有作业 id 都被命名为“local ...”。当我检查环境变量时,“spark.master”总是设置为 local[*]。我尝试了很多东西并阅读了很多文档,但我找不到如何使用多个工人。
这是我的配置:
#SBATCH --time=00:05:00
#SBATCH --nodes=4
#SBATCH --ntasks=4
#SBATCH --mem=4G
#SBATCH --cpus-per-task=8
#SBATCH --ntasks-per-node=1
module load spark/2.3.0
module load python/3.7
source ~/acc_env/bin/activate
export MKL_NUM_THREADS=1
export SPARK_IDENT_STRING=$SLURM_JOBID
export SPARK_WORKER_DIR=$SLURM_TMPDIR
export SLURM_SPARK_MEM=$(printf "%.0f" $((${SLURM_MEM_PER_NODE} *95/100)))
#start master
start-master.sh
sleep 20
MASTER_URL_STRING=$(grep -Po '(?=spark://).*' $SPARK_LOG_DIR/spark-${SPARK_IDENT_STRING}-org.apache.spark.deploy.master*.out)
IFS=' '
read -ra MASTER_URL <<< "$MASTER_URL_STRING"
echo "master url :" ${MASTER_URL}
NWORKERS=$((SLURM_NTASKS - 1))
以下是我用来启动工作人员和脚本的命令:
SPARK_NO_DAEMONIZE=1 srun -n ${NWORKERS} -N ${NWORKERS} --label --output=$SPARK_LOG_DIR/spark-%j-workers.out start-slave.sh -m 4g -c ${SLURM_CPUS_PER_TASK} ${MASTER_URL} &
slaves_pid=$!
srun -n 1 -N 1 spark-submit main.py --master ${MASTER_URL} --executor-memory 4g
解决方案
我找到了答案。如果将来有人遇到同样的问题,我会在那里发布。问题是我将参数放入 srun spark-submit 命令的顺序。您必须将入口点程序(此处为 main.py)放在选项之后,因为我不知道为什么,但似乎参数在入口点参数之后被丢弃了。
推荐阅读
- python - 导入 wordnet 和停用词时出现 chaquopy 错误
- swift - Nike Hybrid 表盘的复杂功能系列(环形文字)
- reactjs - 在 useEffect 中调用 useState setter 时不更新状态
- javascript - NetSuite https.post() 方法响应给出错误“解析值时遇到意外字符:S. Path '', line 0, position 0”
- python - 如何从仅包含该字典的列表中提取字典?
- python - 如何计算列表中列表中元素的数量?
- reactjs - 在 React 中单击按钮时删除 cookie 弹出窗口不起作用
- android - 调整布局以占据屏幕的百分比
- flutter - 使用 Stream Builder 创建列表视图
- android - 离子/电容器 - PushNotiifcations - Android - “通知” + “数据” 消息