Какой код python будет включен в график Даска - PullRequest
0 голосов
/ 06 августа 2020

Какой код python, написанный на стороне клиента #dask, действительно добавляется к графу задачи?

В этом скрипте, например, я читаю набор данных hdf5 из 4 dim, используя al oop для четвертого измерения. Я вычисляю сумму для каждого тусклого света, называемого здесь g для генерации, и вычитаю результат этого поколения и предыдущий. Затем я вызываю производную .visualize (), чтобы посмотреть, как она генерирует график.

alive = []
derivate = []
board = []

deriv = 0 
rest_1 = 0

hf5 = h5py.File('Datata.h5', 'r')
hds5 = hf5.get('dataset')
list(hf5.keys())
last_gen = hds5.attrs.get('last_gen')

for g in range(0,generations):

    board = hds5[g]
    arr = da.asarray(board, chunks=(4,5,4))
    res = arr.sum()
    if g!=0 :
        deriv = res - rest_1
    rest_1 = res
    
deriv.visualize() 

Вот график, который я получаю

  • Здесь без вызова .compute () оператор вычитания добавляется к графу dask, по-видимому, как мы это объясним?
  • Если я добавлю .compute () в «res = arr.sum (). compute ( ) ", а остальное оставить как есть, где будет выполняться вычитание? на стороне клиента или в одном из рабочих?
  • Другой вопрос, более общий: хочу ли я сохранить частичные суммы в рабочих и выполнить вычитание (на частичной сумме текущего и последнего поколения ) в рабочих, есть ли способ сказать, что я хочу, чтобы эти операции выполнялись над одними и теми же фрагментами в разных поколениях? (например, worker 0 всегда будет работать с 3 первыми строками каждого поколения, как в mpi, даже если это совсем не одно и то же)?

1 Ответ

0 голосов
/ 08 августа 2020

Dask не смотрит на ваш Python код и поэтому не видит ничего, кроме того, что вы ему даете. В данном случае это две строки:

    arr = da.asarray(x, chunks=(4,5,4))
    res = arr.sum().compute()   
...