У меня есть лучевой актер, который собирает опыт (буфер) и лучевой актер, который оптимизирует их (ученик) + несколько актеров, которые только собирают опыт. Это похоже на алгоритм обучения подкрепления Ape-X.
Моя основная проблема заключается в том, что использование ученика для выборки из буфера занимает много времени, потому что данные могут передаваться только из буфера ученику в формате процессора (даже если ученик и буфер находятся на одной машине) , Следовательно, для того, чтобы выполнить этап оптимизации для учащегося, мне все равно нужно будет отправлять данные в графический процессор после каждого звонка ray.get(buffer.GetSamples.remote())
. Это очень неэффективно и отнимает много времени от оптимизационных расчетов.
В идеальном мире буфер будет непрерывно отправлять случайные выборки в графический процессор, и учащийся может просто выбрать кусок из этих при каждом проходе. Как я могу сделать эту работу?
Кроме того, помещение и ученика, и буфера в один лучевой актер не работает, потому что у луча (и obv python), кажется, есть значительные проблемы с многопоточностью, и выполнение этого последовательным способом наносит ущерб цели (как это будет еще медленнее).
Обратите внимание, что это продолжение моего вопроса здесь .
РЕДАКТИРОВАТЬ: я должен отметить, что это для PyTorch