Как постепенно распечатать или построить изнутри все oop в Jupyter при использовании кластера MPI? - PullRequest
0 голосов
/ 02 марта 2020

Как сделать так, чтобы операторы печати и печати постоянно сбрасывались / отображались в блокноте Jupyter при использовании кластера MPI (mpi4py)? Использование mpi4py довольно просто при запуске скриптов в терминале (MWE, но без первых двух строк и магии).

Но при работе в Jupyter по какой-то причине циклы накапливают все выходные данные во время работы, а затем помещают все на экране сразу, когда закончите. Насколько я понимаю, выходные данные хранятся в экземпляре клиента, но я не смог принудительно заставить его грипп sh постепенно. Я не хочу, чтобы пользователи моего пакета обрабатывали его (возможно, через l oop, который ткнул клиенту, чтобы дать ему вновь прибывшие результаты), так как они обычно не программируют так много. Также я хочу сохранить поведение пакета при работе в терминале (используя mpirun), потому что некоторые пользователи являются программистами, и они могут предпочесть использовать его таким образом.

Я совершенно новичок в Jupyter и не уверен что делать, я много гуглил, застрял.

Мне очень нравится, как это может сделать использование MPI интерактивным.

Вопрос:

Есть ли какой-нибудь способ постепенно выводить на экран stdouts и графики во время вычисления?

Буду признателен за любые предложения или идеи.

Спасибо!

Пожалуйста, рассмотрите это MWE для Jupyter:

import ipyparallel as ipp
c = ipp.Client(profile='mpi')

%autopx
from mpi4py import MPI
rank = MPI.COMM_WORLD.rank
size = MPI.COMM_WORLD.size
import matplotlib.pyplot as plt
%matplotlib inline
import time

def master_report():
    if rank == 0:
        for i in range(10):
            time.sleep(0.1) # work to be done
            print(f"rank: {rank}, size: {size} progress: {i}")

def master_plot():
    if rank == 0:
        for i in range(3):
            time.sleep(0.1) # work to be done
            plt.plot([0,1],[0,i]) # plot new data
            plt.axis([0, 1, 0, 2])
            plt.show()

master_report() #this creates all plots at once not incrementally

[стандартный вывод: 0]
рейтинг: 0, размер: 5 прогресс: 0
ранг: 0, размер: 5 прогресс: 1
ранг: 0, размер: 5 прогресс: 2
ранг: 0, размер: 5 прогресс: 3
ранг: 0, размер: 5 прогресс: 4
ранг: 0, размер: 5 прогресс: 5
ранг: 0, размер: 5 прогресс: 6
ранг: 0, размер: 5 прогресс: 7
ранг: 0, с из: 5 прогресс: 8
ранг: 0, размер: 5 прогресс: 9

master_plot() #this creates all plots at once not incrementally

[вывод: 0]
enter image description here

enter image description here

enter image description here

...