восстановление значений из ipyparallel map при сбое одной оценки

#python #jupyter #ipython-parallel

#python #jupyter #ipython-параллельный

Вопрос:

Я запускаю довольно трудоемкое (> 3 дней) моделирование с использованием функции ipyparallel map, подобной той, что в Jupyter Notebook

 from ipyparallel import Client
rc = Client()
lview = rc.load_balanced_view()
ar = lview.map(runsimulation, parameter)
 

и мне действительно нужны эти результаты. Но, к сожалению, один экземпляр умер из-за нехватки памяти. Теперь я больше не могу получить доступ к результату с помощью ar [i] . Есть ли шанс восстановить все остальные результаты, которые, безусловно, вычисляются (я вижу характерное потребление памяти и процессорного времени в мониторе узлов кластера).

У меня все еще есть объект ar в записной книжке Jupyter.

Ответ №1:

Вы можете получить частичные результаты для отдельных идентификаторов msg_id. С map каждое сообщение соответствует фрагменту карты (списку):

 import ipyparallel as ipp

results = []
for msg_id in ar.msg_ids:
    chunk_ar = rc.get_result(msg_id)
    try:
        chunk = chunk_ar.get()
    except ipp.RemoteError as e:
        print('ignoring error: %s' % e)
    results.extend(chunk)
 

Ответ №2:

Для меня ответ, данный minrk, не сработал, потому что он уже не get_result сработал.

Я немного изменил его, и это сработало для меня:

 results = []
for msg_id in ar.msg_ids:
    try:
        chunk_ar = rc.get_result(msg_id)
        chunk = chunk_ar.get()
    except:
        chunk = None
    results.append(chunk)
 

Обратите внимание, что я добавляю None , так что я получаю список равной длины в качестве входных данных.