как запустить программу python на Condor?

Я новичок в Condor и пытаюсь запустить свою программу на Python в Condor, но мне трудно это сделать. Все учебники, которые я нашел, предполагают программу Python с одним файлом, но моя программа Python состоит из нескольких пакетов и файлов, а также использует другие библиотеки, такие как numpy и scipy. В таком случае, как я могу заставить Condor запустить мою программу? Должен ли я преобразовать программу в какой-то исполняемый файл? Или есть ли способ перенести исходные коды Python на машину Condor и заставить Python на Condor запускать исходные коды?

Спасибо,


person DSKim    schedule 04.04.2017    source источник
comment
Не поделитесь тем, что у вас получилось? Я думал установить виртуальную среду для всех узлов, а затем активировать виртуальную среду, а не сжимать всю виртуальную среду вместе с каждым заданием.   -  person pangyuteng    schedule 07.02.2018


Ответы (3)


Ваши рабочие места должны будут принести с собой полную установку Python (включая SciPy и NumPy). Это включает в себя сборку установки python в локальном каталоге (возможно, в интерактивном задании HTCondor), установку любых библиотек, которые вам нужны, в рамках этой локальной установки python, а затем создание tar-архива установки, который вы включаете как transfer_input_files. Вам нужно будет использовать сценарий-оболочку в своей работе, которая распаковывает вашу установку python и указывает вашу работу на правильный исполняемый файл python перед запуском ваших сценариев python.

Вот объяснение одного из кластеров, как это сделать: http://chtc.cs.wisc.edu/python-jobs.shtml

person jpatton    schedule 09.05.2017
comment
Я не понимаю, у меня уже все установлено в conda. Почему кондор просто не использует это? - person Charlie Parker; 22.10.2020

кстати. Теперь задания можно выполнять в контейнерах Docker через HTCondor!

https://research.cs.wisc.edu/htcondor/HTCondorWeek2015/presentations/ThainG_Docker.pdf

Альтернативой использованию Docker (который я не буду рекомендовать, но пришлось это сделать, потому что несколько лет назад condor не поддерживал Docker) является использование виртуальной среды. Я бы создал виртуальную среду Anaconda, указав папку, к которой могут получить доступ все узлы кондора. Задания, работающие в кондоре, затем должны активировать виртуальную среду для каждого задания, сначала активировав среду.

person pangyuteng    schedule 17.07.2020

тлдр; Импортируйте правильный путь кондора в ваш скрипт отправки Python вверху.

Я действительно не понимаю, как работает кондор, но кажется, что как только я указал правильный путь к python вверху для текущей среды, он начал работать. Итак, проверьте, где находится ваша команда Python:

(automl-meta-learning) miranda9~/automl-meta-learning $ which python
~/miniconda3/envs/automl-meta-learning/bin/python

затем скопируйте и вставьте это в начало вашего скрипта отправки Python:

#!/home/miranda9/miniconda3/envs/automl-meta-learning/bin/python

Я хотел бы включить все это в файл job.sub. Если вы знаете, как, пожалуйста, дайте мне знать.


Если мой скрипт отправки вам полезен:

####################
#
# Experiments script
# Simple HTCondor submit description file
#
# reference: https://gitlab.engr.illinois.edu/Vision/vision-gpu-servers/-/wikis/HTCondor-user-guide#submit-jobs
#
# chmod a+x test_condor.py
# chmod a+x experiments_meta_model_optimization.py
# chmod a+x meta_learning_experiments_submission.py
# chmod a+x download_miniImagenet.py
#
# condor_submit -i
# condor_submit job.sub
#
####################

# Executable   = meta_learning_experiments_submission.py
# Executable = automl-proj/experiments/meta_learning/meta_learning_experiments_submission.py
# Executable = ~/automl-meta-learning/automl-proj/experiments/meta_learning/meta_learning_experiments_submission.py
Executable = /home/miranda9/automl-meta-learning/automl-proj/experiments/meta_learning/meta_learning_experiments_submission.py

## Output Files
Log          = condor_job.$(CLUSTER).log.out
Output       = condor_job.$(CLUSTER).stdout.out
Error        = condor_job.$(CLUSTER).err.out

# Use this to make sure 1 gpu is available. The key words are case insensitive.
REquest_gpus = 1
# requirements = ((CUDADeviceName = "Tesla K40m")) && (TARGET.Arch == "X86_64") && (TARGET.OpSys == "LINUX") && (TARGET.Disk >= RequestDisk) && (TARGET.Memory >= RequestMemory) && (TARGET.Cpus >= RequestCpus) && (TARGET.gpus >= Requestgpus) && ((TARGET.FileSystemDomain == MY.FileSystemDomain) || (TARGET.HasFileTransfer))
# requirements = (CUDADeviceName == "Tesla K40m")
# requirements = (CUDADeviceName == "Quadro RTX 6000")
requirements = (CUDADeviceName != "Tesla K40m")

# Note: to use multiple CPUs instead of the default (one CPU), use request_cpus as well
Request_cpus = 8

# E-mail option
Notify_user = [email protected]
Notification = always

Environment = MY_CONDOR_JOB_ID= $(CLUSTER)

# "Queue" means add the setup until this line to the queue (needs to be at the end of script).
Queue

Я сказал, что использую скрипт отправки Python, поэтому позвольте мне скопировать его верхнюю часть:

#!/home/miranda9/miniconda3/envs/automl-meta-learning/bin/python

import torch
import torch.nn as nn
import torch.optim as optim
# import torch.functional as F
from torch.utils.tensorboard import SummaryWriter 

Я не отправляю скрипт bash с аргументами, аргументы находятся внутри моего скрипта python. Я не знаю, как использовать bash, так что это работает лучше для меня.


Эталонное решение: https://stackoverflow.com/a/64484025/1601580

person Charlie Parker    schedule 22.10.2020