Большие накладные расходы на вызов кода python в режиме ожидания тензорного потока - PullRequest
0 голосов
/ 21 апреля 2020

Я обучаю глубокого агента RL с использованием tenorflow в пользовательской среде и заметил, что вызов метода environment.step в моем обучении l oop намного медленнее, чем просто вызов его снаружи. Вот код psuedo, который объясняет это

class agent():
    ........
    def train(): 
        for i in batch_size: 
            start = time.time()
            nextstate, reward, done = env.step()
            agent.timecounter += time.time - start

Для агента я обнаружу, что вызов env.step занимает ~ 0,5 секунды из времени стены ~ 0,8 секунды для одного пакета. Вместо того, чтобы вызывать внутри агента обучения l oop, если я просто вызываю код нормально, я не вижу этих издержек.

start = time.time()
for i in batch_size: 
    out = env.step()
print(time.time() - start)

Я обнаружу, что для запуска environment.step эквивалентное количество раз требуется всего ~ 0,01 секунды. Что вызывает эти дополнительные накладные расходы? Это делает обучение для меня очень медленным.

Я пробовал с карполом в спортзале, и у него нет этой проблемы. Моя пользовательская среда имеет несколько атрибутов словаря. Возможно ли это, что вызывает проблему? Я не вижу никаких других отличий между моим кодом и карполом для спортзала.

Полный код для воспроизведения на вашем компьютере доступен по адресу https://github.com/ronan-keane/havsim/tree/DL3 в сценариях / назначениях Мэн / control 1 / traintest.py

1 Ответ

0 голосов
/ 22 апреля 2020

Мне удалось ответить на мой собственный вопрос. Проблема заключалась в том, что входные данные из нейронного net в пользовательский код python преобразовывались в tf.float32. Это тогда заставит код python преобразовать все в тензор, и тогда все математические операции в чистом коде python будут действовать на недавно преобразованные тензоры. Это добавило огромные накладные расходы в 50 раз. Проблема была исправлена ​​путем простого преобразования выходных данных NN в обычный python float.

...