С потрясающей версией 1.0.0
, с которой я играл с параллельным интерфейсом iPython
. Я пытаюсь создать асинхронную стохастическую систему спуска градиента. Как я вижу это, я хочу отправить функцию ко всем узлам и получить результаты по мере их выхода. Из того, что я смог реализовать и взглянуть на документацию, стандартные реализованные представления не поддерживают это. Метод get(timeout)
сделает это, но вы не можете пропустить каждую запись в объекте <ASync_result>
с использованием тайм-аута. Как мне удалось получить это работает была следующаяАсинхронная оценка в параллельном ipython
c = Client()
calls = []
for i,j in enumerate(args):
calls.append(c[ i % len(c.ids) ].apply(f, j))
while condition:
dels = []
for i,j in enumerate(calls):
try:
print j.get(0.01) #or some other timeout
dels.append(i) #I keep track of the calls that have been called
#do something with the last result, throw a new call
calls.append(c[ i % len(c.ids) ].apply(f, argument)
except:
pass
for i,d in enumerate(dels):
del calls[ d - i ] #delete gotten calls
#evaluate stopping condition
Теперь, прежде чем вы идете кричать, что это ужасный код и глупый способ сделать это, я это знаю. Я мог бы сделать этот особый способ сделать это лучше, но мне просто интересно, есть ли встроенный способ сделать что-то подобное в IPython.parallel.
Заранее благодарю всех, кто принимает время.
Best, Al.
Какой смысл делать это асинхронно, когда у вас есть цикл while, который ждет выполнения всех задач? Вы просто внедрили выполнение синхронизации поверх асинхронного API :) –
Правда, но в итоге я хотел бы реализовать цикл, который продолжает бросать новые вызовы и получать их по мере их выхода. Я обновлю это в примере. –
Моя цель - реализовать асинхронный sgd для нейронной сети. Таким образом, вызовы могут быть несколько не синхронизированы с текущими параметрами. И я буду называть их до тех пор, пока ошибка не изменится меньше определенной суммы как скользящей средней или чего-то подобного. И, черт возьми, Виктор, ты уверен, что быстро на ярлыке ipython! Большое спасибо! –