Как выбрать между использованием `jax.lax.scan` против` forPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как выбрать между использованием `jax.lax.scan` против` for

Сообщение Anonymous »

Я новичок JAX, и кто -то, кто пережил Джекс цикл (например, когда они сами по себе обернуты другим для цикла), может быть лучше оставить цикл в качестве для вместо преобразования его в сканирование , потому что для цикл не поднимается полностью, и лишь 1-кратная огромная стоимость компиляции, хотя сканирование не подключен к невыполнению, если это не так, что это не так, что это не так, что это не так, что это не так, что это не так, что его затрат будет. То, что стоимость неоднократного запуска этого цикла в конечном итоге сделает сканирование более дорогим, чем для . Это не поразило меня сразу, когда я начал писать свой код, но имело смысл, думая об этом.

Код: Выделить всё

for i in range(num_train_steps):  # Currently fixed to be a for loop
for j in range(num_env_steps):  # Currently fixed to be a for loop
act()

def act():
for k in range(num_algo_iters):  # Currently playing around with making this one either a scan or a for loop
jax.lax.scan(rollout_func)  # Currently fixed to be a scan

Единственный цикл в приведенном выше коде, который я проверил переключение между сканированием и для , был цикл k , а затем я варьировал переменную num_env_steps - 1, 100, 1000 и 10000, чтобы увидеть, увеличение числа времени () (и, следовательно, в Code, создавая разницу), создавая разницу). (Тестирование было проведено с 5 итерациями для K для цикла и 2 итераций для внутреннего сканирования, хотя они являются переменными в целом, если это важно.)
Times Times для act () для различных повторений составило 1,5, 11,3, 99,0, 956.2 для Scan версии и 5,1, 14,5, 63,6, 97. версия Таким образом, версия для никогда не оказалась быстрее для количества повторений, которые я пробовал. Может быть, увеличение повторений еще больше, установив num_env_steps на 100 тыс. или 1 миллион, сделайте его быстрее, или мы всегда можем просто заменить A для на сканирование ? I have this question because I wonder if I am trying to over-optimise my code by converting every for to a scan.
[*]If I set unroll = True for the scan, would it then always be fine to replace all fors with scans and expect speed-ups?
[*]Is there a Правило, которое может помочь мне решить, когда использовать для и когда использовать сканирование , если меня заинтересованы только в таких ускорениях?
, кстати, был соединен.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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