Обучите агентов, используя параллельные вычисления и графические процессоры

Если у вас есть программное обеспечение Parallel Computing Toolbox™, можно запустить параллельные симуляции на многоядерных процессорах или графических процессорах. Если у вас дополнительно есть MATLAB® ПО Parallel Server™ можно запускать параллельные симуляции на компьютерных кластерах или облачных ресурсах.

Независимо от того, на каких устройствах вы используете для моделирования или обучения агента, после обучения агента можно сгенерировать код для развертывания оптимальной политики на центральном процессоре или графическом процессоре. Более подробно это объясняется в разделе Развертывание настроенных политик обучения с подкреплением.

Использование нескольких процессов

Когда вы обучаете агентов с помощью параллельных вычислений, клиент параллельного пула (процесс, который начинает обучение) отправляет копии агента и окружения каждому параллельному рабочему. Каждый рабочий процесс моделирует агента в окружении и отправляет его данные моделирования обратно клиенту. Агент клиента узнает из данных, отправленных работниками, и отправляет обновленные параметры политики обратно работникам.

Чтобы создать параллельный пул N workers, используйте следующий синтаксис.

pool = parpool(N);

Если вы не создаете параллельный пул, используя parpool (Parallel Computing Toolbox), train функция автоматически создает единицу, используя настройки параллельного пула по умолчанию. Дополнительные сведения об указании этих настроек см. в разделе «Задание параллельных настроек» (Parallel Computing Toolbox). Обратите внимание, что использование параллельного пула рабочих потоков, таких как pool = parpool("threads"), не поддерживается.

Чтобы обучить агента с помощью нескольких процессов, вы должны перейти к train функция an rlTrainingOptions объект, в котором UseParallel установлено в true.

Для получения дополнительной информации о настройке обучения для использования параллельных вычислений смотрите UseParallel и ParallelizationOptions опции в rlTrainingOptions.

Обратите внимание, что параллельная симуляция и обучение окружений, содержащих несколько агентов, не поддерживаются.

Для примера, который обучает агента, используя параллельные вычисления в MATLAB, смотрите Обучите Агента AC, чтобы Сбалансировать систему тележки с шестом, Используя параллельные вычисления. Для примера, который обучает агента, используя параллельные вычисления в Simulink®, см. «Train агента DQN для помощи в поддержании маршрута с использованием параллельных вычислений» и «Train робота с двойным соединением для ходьбы с использованием агентов обучения с подкреплением».

Параллельное обучение для конкретного агента Факторов

Для агентов вне политики, таких как DDPG и DQN, не используйте все ваши ядра для параллельного обучения. Например, если ваш центральный процессор имеет шесть ядер, обучитесь с четырьмя рабочими. Это предоставляет клиенту параллельного пула больше ресурсов для вычисления градиентов на основе опыта, отправленного работниками. Ограничение количества работников не обязательно для агентов, основанных на политике, таких как агенты AC и PG, когда градиенты вычисляются для работников.

Основанная на градиентах параллелизация (агенты AC и PG)

Для параллельного обучения агентов AC и PG, DataToSendFromWorkers свойство ParallelTraining для объекта (содержащегося в объекте опций обучения) должно быть задано значение "gradients".

Это конфигурирует обучение так, чтобы как симуляция окружения, так и расчеты выполнялись работниками. В частности, рабочие моделируют агент относительно окружения, вычисляют градиенты от опыта и отправляют градиенты клиенту. Клиент усредняет градиенты, обновляет сетевые параметры и отправляет обновленные параметры обратно работникам, которые могут продолжить симуляцию агента с новыми параметрами.

С основанной на градиенте параллелизацией можно в принципе достичь улучшения скорости, которое является почти линейным по количеству работников. Однако эта опция требует синхронного обучения (то есть Mode свойство rlTrainingOptions объект, который вы передаете в train функция должна быть установлена на "sync"). Это означает, что работники должны приостановить выполнение, пока все работники не закончены, и в результате обучение продвигается только так быстро, как позволяет самый медленный работник.

Основанная на опыте параллелизация (агенты DQN, DDPG, PPO, TD3 и SAC)

Для параллельного обучения агентов DQN, DDPG, PPO, TD3 и SAC, DataToSendFromWorkers свойство ParallelTraining для объекта (содержащегося в объекте опций обучения) должно быть задано значение "experiences". Эта опция не требует синхронного обучения (то есть Mode свойство rlTrainingOptions объект, который вы передаете в train функцию можно задать равной "async").

Это конфигурирует обучение так, чтобы симуляция окружения выполнялась работниками, а обучение - клиентом. В частности, рабочие моделируют агент против окружения и отправляют данные опыта (наблюдение, действие, вознаграждение, следующее наблюдение и сигнал завершения) клиенту. Затем клиент вычисляет градиенты из опыта, обновляет параметры сети и отправляет обновленные параметры обратно работникам, которые продолжают моделировать агента с новыми параметрами.

Основанная на опыте параллелизация может сократить время обучения только тогда, когда вычислительные затраты на симуляцию окружения высоки по сравнению со стоимостью оптимизации параметров сети. В противном случае, когда симуляция окружения происходит достаточно быстро, работники находятся в простое, ожидая, что клиент научится и отправит назад обновленные параметры.

Другими словами, основанная на опыте параллелизация может улучшить эффективность выборки (предназначенная для количества выборок, которые агент может обработать за заданное время) только тогда, когда отношение R между сложностью шага окружения и сложностью обучения велико. Если и симуляция окружения, и обучение являются аналогично вычислительно дорогими, основанная на опыте параллелизация вряд ли улучшит эффективность выборки. Однако в этом случае для агентов, не являющихся политиками, можно уменьшить размер мини-пакета, чтобы R больше, тем самым улучшая эффективность выборки.

Использование графических процессоров

При использовании функциональных аппроксимаций глубокой нейронной сети для представления вашего актёра или критика можно ускорить обучение, выполнив операции представления (такие как расчеты градиента и предсказание), на локальном графическом процессоре, а не на центральном процессоре. Для этого при создании критика или представления актера используйте rlRepresentationOptions объект, в котором UseDevice для опции задано значение "gpu" вместо "cpu".

opt = rlRepresentationOptions('UseDevice',"gpu");

The "gpu" для опции требуется как программное обеспечение Parallel Computing Toolbox, так и CUDA® enabled NVIDIA® ГРАФИЧЕСКИЙ ПРОЦЕССОР. Дополнительные сведения о поддерживаемых графических процессорах см. в разделе Поддержка GPU по версии (Parallel Computing Toolbox).

Можно использовать gpuDevice (Parallel Computing Toolbox), чтобы запросить или выбрать локальное устройство графического процессора, которое будет использоваться с MATLAB.

Использование графические процессоры, вероятно, будет выгодно, когда глубокая нейронная сеть в представлении актёра или критика использует операции, такие как несколько сверточных слоев на входных изображениях или имеет большие размеры пакета.

Использование как нескольких процессов, так и графических процессоров

Можно также обучать агентов как с помощью нескольких процессов, так и с помощью локального графического процессора (ранее выбранного с помощью gpuDevice (Parallel Computing Toolbox)) одновременно. В частности, можно создать критика или актёра с помощью rlRepresentationOptions объект, в котором UseDevice для опции задано значение "gpu". Затем можно использовать критика и актёра, чтобы создать агента, а затем обучить агента с помощью нескольких процессов. Это делается путем создания rlTrainingOptions объект, в котором UseParallel установлено в true и передав его в train функция.

Для основанной на градиентах параллелизации (которая должна выполняться в синхронном режиме) симуляция окружения выполняется работниками, которые используют свой локальный графический процессор, чтобы вычислить градиенты и выполнить шаг предсказания. Затем градиенты отправляются обратно в клиентский процесс параллельного пула, который вычисляет средние значения, обновляет параметры сети и отправляет их обратно работникам, чтобы они продолжали моделировать агента с новыми параметрами относительно окружения.

Для основанной на опыте параллелизации (которая может запускаться в асинхронном режиме) работники моделируют агент относительно окружения и отправляют данные опыта обратно в клиент параллельного пула. Затем клиент использует свой локальный графический процессор, чтобы вычислить градиенты от опыта, затем обновляет параметры сети и отправляет обновленные параметры обратно работникам, которые продолжают моделировать агент с новыми параметрами относительно окружения.

Обратите внимание, что при использовании как параллельной обработки, так и GPU для обучения агентов PPO, работники используют свой локальный графический процессор для вычисления преимуществ, а затем отправляют обработанные траектории опыта (которые включают преимущества, цели и вероятности действия) обратно клиенту.

См. также

| |

Похожие темы