Как использовать факел для ускорения некоторых распространенных вычислений? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь сделать некоторые общие вычисления, такие как умножение матриц, но без вычисления градиента.Пример моих вычислений:

import numpy as np
from scipy.special import logsumexp

var = 1e-8
a = np.random.randint(0,10,(128,20))
result = np.logsumexp(a, axis=1) / 2. + np.log(np.pi * var)

Я хочу использовать torch (gpu) для ускорения вычислений.Вот код

import numpy as np
import torch

var = 1e-8
a = np.random.randint(0,10,(128,20))
a = torch.numpy_from(a).cuda()

result = torch.logsumexp(a, dim=1)/ 2. + np.log(np.pi*var)

, но у меня есть несколько вопросов:

  1. Может ли приведенный выше код ускорить вычисления?Я не знаю, работает ли он.

  2. Нужно ли преобразовывать все значения в torch.tensor, например, из var в torch.tensor(var).cuda() и из np.log(np.pi*var) в факел?.tensor?

  3. Нужно ли мне преобразовывать все тензоры в gpu самостоятельно, особенно для некоторой промежуточной переменной?

  4. Если приведенный выше код нене работает, как я могу ускорить вычисления с GPU?

1 Ответ

0 голосов
/ 18 мая 2019

Вы можете использовать факел только для вычислений.

   import torch
   # optimization by passing device argument, tensor is created on gpu and hence move operation is saved
   # convert to float to use with logsumexp
   a = torch.randint(0,10, (128,20), device="cuda").float()
   result = torch.logsumexp(a, dim=1)/ 2.  

Ответы на некоторые ваши вопросы:

Может ли приведенный выше код ускорить вычисления?

Это зависит.Если у вас слишком много умножения матриц, использование gpu может ускорить процесс.

Нужно ли преобразовывать все значения в torch.tensor, например, из var в torch.tensor (var) .cuda () и из np.log (np.pi * var) в torch.tensor?

Да

Нужно ли мне преобразовывать все тензоры в gpu самостоятельно, особенно для некоторой промежуточной переменной?

ТолькоКонечные переменные необходимо преобразовать, промежуточная переменная будет размещена на устройстве, на котором выполняются операции.Например: если a и b на gpu, то в результате операции c=a+b, c также будет на gpu.

...