Основная матричная операция в PyTorch / CuPy с использованием графического процессора - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть простой скрипт, в котором я выполняю следующую операцию с большими матрицами (может превышать 10000x10000 со значениями float):

F = (I - Q)^-1 * R

Сначала я использовал тензоры pytorch на CPU (i7-8750H) и он работает в 2 раза быстрее:

tensorQ = torch.from_numpy(Q)
tensorR = torch.from_numpy(R)
sub= torch.eye(a * d, dtype=float) - tensorQ
inv= torch.inverse(sub)
tensorF = torch.mm(inv, tensorR)
F = tensorF.numpy()

Теперь я пытаюсь запустить его на GPU (1050Ti Max-Q), чтобы посмотреть, смогу ли я получить еще одно ускорение, но код работает медленнее, чем просто версия(Я уже установил CUDA и cuDNN).Может быть, pytorch - это даже не лучшая библиотека для подобных вещей, но я изучаю ее сейчас, и я подумал, что это может мне помочь:

dev = torch.device('cuda')

tensorQ = torch.from_numpy(Q).to(dev)
tensorR = torch.from_numpy(R).to(dev)
sub= torch.eye(a * d, dtype=float).to(dev) - tensorQ
inv= torch.inverse(sub).to(dev)
tensorF = torch.mm(inv, tensorR).cpu()
F = tensorF.numpy()

Я что-то упустил?

Редактировать: Я также пытался использовать CuPy, но он все еще медленный:

Q = cp.array(matrixQ)
R = cp.array(matrixR)
sub = cp.identity(attacker * defender) - matrixQ
inv = cp.linalg.inv(sub)
F = cp.matmul(inv, matrixR)
F = cp.asnumpy(matrixF)

Возможно, накладные расходы на выделение памяти слишком велики по сравнению с вычислением нескольких операций.

...