Как отправить slurm job, используя много воркеров, а не просто работая в локальном режиме?

Я хочу запустить скрипт Python с помощью команды spark-submit в кластере slurm с помощью команд srun и sbatch. Когда я запускаю свой текущий скрипт, он работает до конца, и конечный статус ЗАВЕРШЕН. Однако, глядя на сервер истории spark, я вижу, что все идентификаторы заданий называются «локальными ...». Когда я проверяю переменные среды, для «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
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
279
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел ответ. Я размещаю его там, если у кого-то будет такая же проблема в будущем. Проблема заключалась в том, в каком порядке я помещал аргументы в команду srun spark-submit. Вы должны поместить программу точки входа (здесь main.py) после параметров, потому что я не знаю почему, но кажется, что аргументы отбрасываются после аргумента точки входа.

Другие вопросы по теме