Я новый пользователь dask.jobqueue и благодаря этому пытаюсь планировать задачи.
Количество запускаемых задач может варьироваться (от нескольких десятков до нескольких сотен) и График зависимостей между этими задачами может быть довольно сложным. Кроме того, потребности в ресурсах для каждой из этих задач могут сильно различаться, поскольку некоторые из них будут сильно многопоточными, а другие - нет. Однако у меня нет впечатления, что в данный момент возможно динамическое изменение ресурсов «работника».
, например, фрагмент кода:
@dask.delayed()
def first_task(...)
"""mono thread task
"""
...
@dask.delayed()
def second_task(...)
"""higly multithreaded task
"""
...
cluster = PBSCluster(...)
cluster.scale(...) # or cluster.adapt(...)
client = Client(cluster)
first_return = first_task()# mono thread
second_return = second_task(first_return) # threaded
third_task(second_return) # highly multitraded
# launch tasks
third_task.compute()
Процедуры срабатывает благодаря .compute (), который может принимать именованный параметр 'resources', но, насколько я понимаю (https://distributed.dask.org/en/latest/resources.html), соответствует ресурсам, ранее сообщенным каждому работнику при создании кластера, что не соответствуют динамическому c управлению ресурсами на одного работника, которого я ищу.
По сути, возможно ли переключиться с:
third_task.compute(resources={...})
на что-то более связанное с каждым из задачи для обработки? Приложить как-нибудь ресурсы, необходимые для каждого dask.delayed?
@dask.delayed(resources={"cpu":1, "ram": "5GB"})
def first_task(...)
...
@dask.delayed(resources={"cpu":24, "ram": "120GB"})
def third_task(...)
...
third_task.compute()
Спасибо,