Эффективная инверсия/умножение матрицы с несколькими размерами партии в PytorchPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Эффективная инверсия/умножение матрицы с несколькими размерами партии в Pytorch

Сообщение Anonymous »

В моей структуре у меня есть внешняя петля (здесь измеряемое переменной n ), и внутри корпуса цикла я должен выполнять матричные инверсии/умножения для нескольких размеров партии. Я наблюдал, что вручную зацикливаться на партийных размерах и вычисление обратного, измеримо быстрее, чем передача всех партий в Torch.linalg.inv < /code> Функция.
аналогичные операторы могут быть сделаны для умножения вычислительной матрицы с использованием Torch.einsum. function.
Мое ожидание было то, что передача всех партий одновременно работает лучше, чем для петли. Есть идеи/объяснения/рекомендации здесь?
Профилирование вывода функции upverse_batch :
ncalls tottime percall cumtime percall filename:lineno(function)
100 2.112 0.021 2.112 0.021 {built-in method torch._C._linalg.linalg_inv}
1 0.000 0.000 2.112 2.112 mwe.py:5(inverse_batch)
1 0.000 0.000 2.112 2.112 {built-in method builtins.exec}
1 0.000 0.000 2.112 2.112 :1()
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}

Профилирование вывода функции Inverse_loop :
ncalls tottime percall cumtime percall filename:lineno(function)
8000 0.207 0.000 0.207 0.000 {built-in method torch._C._linalg.linalg_inv}
1 0.022 0.022 0.229 0.229 mwe.py:9(inverse_loop)
1 0.000 0.000 0.000 0.000 {method 'view' of 'torch._C.TensorBase' objects}
1 0.000 0.000 0.229 0.229 {built-in method builtins.exec}
1 0.000 0.000 0.229 0.229 :1()
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
< /code>
code: < /p>
import torch
import cProfile
import pstats

def inverse_batch(tensors, n):
for i in range(n):
torch.linalg.inv(tensors)

def inverse_loop(tensors, n):
tensors = tensors.view(-1, 3, 3)
for i in range(n):
for j in range(10 * 8):
torch.linalg.inv(tensors[j])

# Create a batch of tensors
tensors = torch.randn(10, 8, 3, 3, dtype = torch.double) # Shape: (10, 8, 3, 3)

# Profile code
n = 100 # Dummy outer loop variable
cProfile.run('inverse_batch(tensors, n)', 'profile_output')
stats = pstats.Stats('profile_output')
stats.strip_dirs().sort_stats('tottime').print_stats()


Подробнее здесь: https://stackoverflow.com/questions/794 ... ns-in-pyto
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Эффективная инверсия/умножение матрицы с несколькими размерами партии в Pytorch
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Эффективная инверсия/умножение матрицы с несколькими размерами партии в Pytorch
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Эффективная инверсия/умножение матрицы с несколькими размерами партии в Pytorch
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Умножение матрицы Python – размер матрицы результата
    Anonymous » » в форуме Python
    0 Ответы
    109 Просмотры
    Последнее сообщение Anonymous
  • Почему умножение матриц с помощью MathNet.Numerics выполняется медленнее, чем обычное умножение?
    Anonymous » » в форуме C#
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»