Как (/ если) использовать dask для транспонирования распределенных 3D-массивов - PullRequest
1 голос
/ 24 июня 2019

Моя задача состоит в том, чтобы выполнить 3 умножения матриц на трехмерном массиве с цифрами. Слишком большой, чтобы поместиться в одном процессоре. В тензорной форме я хочу, чтобы A_ijk B_km C_jn D_ip (B, C и D все могут поместиться в памяти). Я хочу знать, подходит ли dask для этой задачи (или может ли подойти другой инструмент).

Я считаю, что лучший подход - разделить эту операцию на каждое умножение и убедиться, что все они локальны. Эта ссылка имеет действительно полезную диаграмму, которая обобщает то, о чем я говорю http://www.2decomp.org/1d_mode.html.

Более подробно: во-первых, чтобы выполнить A_ijk B_km, я должен распределить A по первым двум осям и выполнить умножение матрицы для каждого карандаша локально (первый шаг на диаграмме).

Затем мне нужно переставить массив, сделав ось j локальной для каждого процессора (и разделив ее по оси k (теперь m)), чтобы затем выполнить следующее умножение. (Итак, переходя от первого ко второму шагу на диаграмме). Вот где мне интересно, может ли Даск помочь.

Я знаю, что в принципе это можно сделать с помощью mpi4py, но шаги довольно нетривиальны, в то время как массивы dask имеют полезные методы rechunk и транспонирования, которые кажутся актуальными для этого приложения.

Кажется ли это чем-то хорошо подходящим для темных?

Если нет, кто-нибудь знает какие-либо библиотеки Python, которые могут выполнять эти шаги? Я знаю, что fftw имеет подпрограммы для выполнения именно этого, но я не знаю, как написать необходимый C-код или как заставить его взаимодействовать с python и numpy.

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Для всех остальных в будущем у mpi4py есть метод транспонирования. Но это называется Alltoall / Alltoallv. Это не объяснено в документации или учебнике по mpi4py. Я узнал об этом в другом уроке: https://info.gwdg.de/wiki/doku.php?id=wiki:hpc:mpi4py.

0 голосов
/ 25 июня 2019

Dask реализует einsum , что может быть тем, что вам нужно, и, конечно, есть matmul , если вы хотите выписать операцию.До тех пор, пока ваша большая матрица A является массивом Dask с разумными размерами порций, Dask будет распределять вашу работу без нехватки памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...