Logotipo de Zephyrnet

Escale su serpiente de batalla con tecnología de IA con aprendizaje de refuerzo distribuido en Amazon SageMaker

Fecha:

Serpiente de batalla es una competencia de IA en la que construyes serpientes con IA. Las reglas de Battlesnake son similares a las juego tradicional de serpientes. Tu objetivo es ser la última serpiente sobreviviente cuando compites contra otras serpientes. Los desarrolladores de todos los niveles construyen serpientes utilizando técnicas que van desde estrategias únicas basadas en heurística hasta algoritmos de aprendizaje de refuerzo profundo (RL) de última generación.

Puede utilizar el Paquete de inicio de SageMaker Battlesnake para construir tu propia serpiente y competir en el Arena de serpiente de batalla. Para más información, consulte la Construyendo una Serpiente de Batalla con IA con aprendizaje de refuerzo en Amazon SageMaker. El Starter Pack contiene un entorno de desarrollo para que desarrolle múltiples estrategias en Amazon SageMaker. Las estrategias incluyen capacitación en políticas basadas en RL y heurística basada en árboles de decisión. El paquete inicial de SageMaker Battlesnake Starter proporcionó un script de entrenamiento basado en Apache MXNet para desarrollar una política de serpiente basada en Q-networks (DQN) [1]. La implementación del algoritmo es fácil de seguir y modificar, y proporciona una experiencia educativa para desarrolladores novatos.

Esta publicación describe una actualización del Starter Pack que usa Amazon SageMaker para RL totalmente administrado y proporciona una recompensa 10 veces mayor con el mismo tiempo de capacitación. Starter Pack utiliza las capacidades integradas de Amazon SageMaker para la capacitación distribuida de RL, en la cual la política del agente se actualiza mientras los pasos de simulación se recopilan simultáneamente con múltiples nodos disponibles en la instancia. Esta publicación también lo guía a través de los conceptos básicos de RL distribuido y cómo usar RL distribuido en Amazon SageMaker para entrenar a su serpiente.

Amazon SageMaker es un servicio totalmente administrado que le permite construir e implementar modelos más rápido y con menos trabajo pesado. Amazon SageMaker tiene funciones integradas para ayudar con el etiquetado y la preparación de datos; modelos de entrenamiento, ajuste y depuración; e implementación y monitoreo de modelos en producción. Además, Amazon SageMaker tiene mecanismos de ahorro de costos integrados, como Verdad fundamental de Amazon SageMaker para reducir los costos en el etiquetado de datos hasta en un 70%, Entrenamiento Spot Administrado para reducir los costos de capacitación hasta en un 90%, y Amazon SageMaker admite Inferencia elástica de Amazon para reducir los costos de inferencia de aprendizaje automático hasta en un 75%.

Esta publicación analiza las capacidades de RL totalmente administradas en Amazon SageMaker, que incluyen kits de herramientas de RL preempaquetados y capacitación e implementación de modelos completamente administrados. Puede usar marcos de aprendizaje profundo integrados como MXNet y TensorFlow, usar varios algoritmos RL integrados de Entrenador Intel y RLlib bibliotecas para entrenar sus políticas de RL e iniciar fácilmente sus experimentos de RL en los experimentos de Amazon SageMaker. Para más información, ver Experimentos de Amazon SageMaker: organice, realice un seguimiento y compare sus capacitaciones de aprendizaje automático. Para obtener más información sobre cómo aplicar RL a dominios como sistemas de recomendación, robótica, gestión financiera y más, consulte el Repositorio GitHub.

Aprendizaje de refuerzo distribuido

Un agente de RL generalmente desarrolla su política al interactuar con el entorno de manera de prueba y error. Durante el proceso de capacitación, el agente recopila y aprende de los pasos de simulación para refinar su política. Los pasos de simulación también se conocen como superiores or despliegues. Esta publicación usa DQN como ilustración. DQN se basa en la comunicación entre un búfer de reproducción y una política para optimizaciones basadas en gradiente en redes Q locales y de destino. Para más información, ver Construyendo una Serpiente de Batalla con IA con aprendizaje de refuerzo en Amazon SageMaker.

El siguiente diagrama ilustra los diferentes componentes y el flujo de datos de DQN.

El algoritmo DQN consta de múltiples componentes, y el RL distribuido explota la naturaleza separable de estos componentes para ampliar la capacitación. Específicamente, RL distribuido utiliza múltiples trabajadores de implementación para crear una copia del simulador y recopilar experiencias con la política del agente, y usted usa estas experiencias para la actualización de la política. En DQN, el optimizador de políticas extrae sincrónicamente muestras de trabajadores de implementación y las concatena. Después de actualizar los pesos de la red, los pesos se transmiten de nuevo a todos los trabajadores de despliegue. Este proceso puede ser asíncrono, dependiendo del tipo de algoritmo. Por ejemplo, el optimizador en APEX-DQN [2] extrae y aplica asincrónicamente los gradientes de los trabajadores de despliegue, y envía pesos actualizados de nuevo según sea necesario. El siguiente diagrama ilustra un modelo RL distribuido con varios trabajadores en una sola instancia de Amazon SageMaker con 4 CPU. Se asigna 1 CPU al controlador y el resto se usa para la simulación del entorno.

Amazon SageMaker admite RL distribuido en un solo Instancia de Amazon SageMaker ML con solo unas pocas líneas de configuración utilizando la biblioteca Ray RLlib [3]. De manera predeterminada, Amazon SageMaker asigna una CPU para el controlador, que ejecuta el proceso de capacitación, gestiona la coordinación entre los trabajadores y se encarga de actualizar los parámetros de política global. Puede utilizar los recursos restantes como trabajadores dedicados a la recopilación de experiencias paralelas.

Amazon SageMaker le permite ir un paso más allá al escalar sus trabajos RL a varias instancias de Amazon SageMaker ML, lo que aumenta los recursos disponibles para la capacitación. Puede distribuir su trabajo de capacitación de dos maneras: homogéneo y heterogéneo escalada.

En el escalado homogéneo, utiliza varias instancias con el mismo tipo (generalmente, instancias de CPU) para un solo trabajo de Amazon SageMaker. De manera similar a la configuración mostrada anteriormente, un solo núcleo de CPU está reservado para el controlador, y puede usar todo el resto como trabajadores de implementación que generan experiencias a través de simulaciones ambientales. El número de núcleos de CPU disponibles aumenta con varias instancias. El escalado homogéneo es beneficioso cuando la recopilación de experiencias es el cuello de botella del flujo de trabajo de capacitación; por ejemplo, cuando su entorno es computacionalmente pesado.

El siguiente diagrama ilustra la arquitectura de escalamiento homogéneo con múltiples instancias, cada una con 4 CPU. Una de las CPU en la instancia primaria se usa como controlador y las CPU restantes, tanto en la instancia primaria como en la secundaria, se usan para la simulación del entorno.

Con más trabajadores de implementación, las actualizaciones de redes neuronales a menudo pueden convertirse en el cuello de botella. En este caso, puede usar una escala heterogénea, en la que usa diferentes tipos de instancia juntos. Una opción típica sería usar instancias de GPU para realizar la optimización de red y las instancias de CPU para recopilar experiencias para una capacitación más rápida a costos optimizados. Amazon SageMaker le permite lograr esto haciendo girar dos trabajos dentro de la misma VPC de Amazon, y las comunicaciones entre las instancias se ocupan automáticamente.

El siguiente diagrama ilustra la arquitectura en la que el trabajo principal consume una instancia de GPU y el trabajo secundario consume tres instancias de CPU.

Puede configurar el número específico de instancias y tipos para adaptarse a su caso de uso. Para obtener más información sobre la capacitación RL distribuida en varios nodos, consulte el siguiente cuaderno en el Repositorio GitHub.

Entrenando a tu serpiente con una sola instancia

Para ejecutar un trabajo de entrenamiento de RL, puede seguir un flujo de trabajo similar al de otros trabajos de entrenamiento de Amazon SageMaker, que consiste en utilizar estimadores para ejecutar scripts de entrenamiento. En el siguiente ejemplo, el punto de entrada es un script de entrenamiento (tren-mabs.py) que interactúa entre el entorno y la política. Para iniciar un trabajo de capacitación RL de instancia única, primero debe crear un RLEstimator() con sus parámetros deseados y llame fit() en el objeto estimador. Ver el siguiente código:

NUM_ITERATION = 5000
NUM_AGENT = 5 instance_type = 'ml.m5.xlarge'
num_cpus = 4 # ml.m5.xlarge has 4 cpus metric_definitions = RLEstimator.default_metric_definitions(RLToolkit.RAY) estimator = RLEstimator(entry_point="train-mabs.py", source_dir="rllib_src", dependencies=["rllib_common/sagemaker_rl", "battlesnake_gym/"], image_name=image_name, role=role, train_instance_type=instance_type, train_instance_count=1, output_path=s3_output_path, base_job_name=job_name_prefix, metric_definitions=metric_definitions, hyperparameters={ # See train-mabs.py to add additional hyperparameters # Also see ray_launcher.py for the rl.training.* hyperparameters # # number of training iterations "num_iters": NUM_ITERATION, # number of snakes in the gym "num_agents": NUM_AGENT, "rl.training.config.num_gpus": 0, # reserve 1 for driver node "rl.training.config.num_cpus": num_cpus - 1, } ) estimator.fit()

Para escalar automáticamente la capacitación RL a varios trabajadores, puede ajustar el rl.training.config.num_cpus y rl.training.config.num_gpus parámetros Debe reservar 1 CPU (la 1 in num_cpus - 1) para actuar como conductor. Por ejemplo, para configurar un trabajo de capacitación con varios trabajadores en una sola instancia de Amazon SageMaker, establezca 'rl.training.config.num_cpus' = 3 y 'num_gpus' = 0 y seleccione un tipo de instancia de entrenamiento con al menos 4 CPU (por ejemplo ml.c5.xlarge).

Entrenamiento distribuido de tu serpiente con múltiples instancias

Puede realizar su experimento RL distribuido con múltiples instancias del mismo tipo (escala homogénea). Necesitas configurar train_instance_count a la cantidad de instancias para entrenar. Similar al caso de uso de instancia única, debe configurar la cantidad de trabajadores en función de los recursos totales disponibles. Puedes calcular esto por el train_instance_count multiplicado por el número de núcleos por instancia restados por 1. Nuevamente, restando por 1 cuentas para el controlador. Ver el siguiente código:

train_instance_count = 3 estimator = RLEstimator(entry_point="train-mabs.py", source_dir='rllib_src', dependencies=["rllib_common/sagemaker_rl", "battlesnake_gym/"], image_name=image_name, role=role, train_instance_type=instance_type, train_instance_count=train_instance_count, output_path=s3_output_path, base_job_name=job_name_prefix, metric_definitions=metric_definitions, hyperparameters={ # See train-mabs.py to add additional hyperparameters # Also see ray_launcher.py for the rl.training.* hyperparameters # # number of training iterations "num_iters": NUM_ITERATION, # number of snakes in the gym "num_agents": NUM_AGENT, # 3 m5.xl with 4 cores each. We have to leave 1 core for ray the scheduler. # Don't forget to change this on the basis of instance type. "rl.training.config.num_workers": (num_cpus * train_instance_count) - 1, "rl.training.config.num_gpus": 0, } )
estimator.fit()

Cuando aumenta el número de trabajadores de implementación, las actualizaciones de políticas a menudo pueden convertirse en el cuello de botella. Para solucionar esto, puede usar una instancia con una o más GPU para actualizaciones de políticas y varias instancias de CPU para despliegues (escalado heterogéneo).

Específicamente, puede activar dos trabajos de Amazon SageMaker, y SageMaker RL se encarga de la comunicación entre los dos trabajos. Esta publicación usa Primary instance para referirse a una o más instancias de GPU y Secondary instance para referirse al clúster de instancias de CPU. Antes de definir los estimadores, debe definir varios parámetros. Ver el siguiente código:

s3_prefix = "<s3 identifier>" # Used for syncing between the primary and secondary jobs # Parameters for the primary instance
primary_instance_type = "ml.p2.xlarge"
primary_instance_count = 1 # More instances could be used to collect replay experiences
primary_cpus_count = num_cpus - 1 # p2.xlarge has 4 cores. 1 core is reserved for the driver
primary_gpu_count = 1 # Parameters for the secondary instance
secondary_instance_type = "ml.m5.xlarge"
secondary_instance_count = 2

Puedes definir el primario y el secundario RLEstimator con el siguiente código:

primary_estimator = RLEstimator(entry_point="train-mabs.py", source_dir="rllib_src", dependencies=["rllib_common/sagemaker_rl", "battlesnake_gym/"], image_name=gpu_image_name, role=role, train_instance_type=primary_instance_type, train_instance_count=primary_instance_count, output_path=s3_output_path, base_job_name=job_name_prefix, metric_definitions=metric_definitions, train_max_run=primary_max_run_time, hyperparameters={ "s3_prefix": s3_prefix, "s3_bucket": sage_session.default_bucket(), "aws_region": boto3.Session().region_name, "rl_cluster_type": "primary", "rl_num_instances_secondary": secondary_cluster_instance_count, "rl.training.config.num_workers": primary_cpus_count, "rl.training.config.num_gpus": primary_gpu_count, "num_iters": NUM_ITERATION, "num_agents": NUM_AGENT, }, subnets=default_subnets, security_group_ids=default_security_groups ) primary_estimator.fit()
secondary_estimator = RLEstimator(entry_point="train-mabs.py", source_dir="rllib_src", dependencies=["rllib_common/sagemaker_rl", "battlesnake_gym/"], image_name=cpu_image_name, role=role, train_instance_type=secondary_instance_type, train_instance_count=secondary_instance_count, output_path=s3_output_path, base_job_name=job_name_prefix, metric_definitions=metric_definitions, train_max_run=secondary_max_run_tim, hyperparameters={ "s3_prefix": s3_prefix, "s3_bucket": sage_session.default_bucket(), "aws_region": boto3.Session().region_name, # Important for S3 connection "rl_cluster_type": "secondary", "num_iters": NUM_ITERATION, "num_agents": NUM_AGENT, }, subnets=default_subnets, security_group_ids=default_security_groups ) secondary_estimator.fit()

Experimentación

En esta sección, las serpientes están entrenadas tanto con la implementación previa de RL como con la nueva implementación utilizando algoritmos RL integrados en Amazon SageMaker. La implementación anterior de RL se basa en MXNet y se ejecuta en una sola instancia con un solo núcleo. Los experimentos de Amazon SageMaker RL consisten en lo siguiente:

  1. Una sola instancia con un solo núcleo
  2. Una sola instancia con múltiples núcleos
  3. Múltiples instancias idénticas con múltiples núcleos
  4. Múltiples instancias heterogéneas con múltiples núcleos

DQN se utilizó para los experimentos de instancia única para mantener similares las condiciones de experimentación entre las dos implementaciones. En los experimentos con múltiples instancias, mantuvimos el tamaño del lote de capacitación igual y habilitamos la actualización asincrónica de políticas para utilizar mejor las experiencias recopiladas. Mejoramos aún más la eficiencia de los datos mediante el uso de la reproducción distribuida de experiencias priorizadas y el algoritmo modificado se conoce como APEX [2]. Esta publicación ejecuta todos los experimentos durante 210 minutos y utiliza una función de recompensa idéntica, representación del entorno e hiperparámetros.

En términos de capacitación, los trabajos MXNet, de instancia única y de escala homogénea se ejecutan utilizando el mismo tipo de instancia (ml.m5.xlarge). El tipo de instancia principal para el trabajo de escalado heterogéneo es una instancia de GPU (ml.p2.xlarge) y las instancias secundarias son ml.m5.xlarge. El siguiente gráfico muestra el rendimiento evaluado en términos de recompensas de episodios medios.

El siguiente gráfico muestra el rendimiento evaluado en términos de la duración media del episodio (cuánto tiempo sobrevivieron las serpientes).

La política anterior se entrenó durante más de 20 horas, lo que se refleja en ambos gráficos, en los que las recompensas y la duración del episodio solo han aumentado ligeramente después de 3 horas de entrenamiento (codificado a mano: 1 m5.xlarge; 1 núcleo). Los gráficos muestran un aumento de al menos 7.5 veces en la recompensa obtenida y el doble de la duración del episodio entre las políticas anteriores y actuales. Cuando compara entre los trabajos de instancia única (Amazon SageMaker RL: 1 m5.xlarge, 1 núcleo frente a Amazon SageMaker RL: 1 m5.xlarge y 4 núcleos), la instancia única con múltiples núcleos supera al trabajo de núcleo único. Esto se enfatiza aún más cuando utiliza varias instancias, donde el escalado heterogéneo (Amazon SageMaker RL: 1 p2.xlarge, 2 m5.xlarge; 12 núcleos) supera a los trabajos de escalado homogéneo y de instancia única (Amazon SageMaker RL: 3 m5.xlarge; 12 núcleos). El trabajo de escalado heterogéneo logró un aumento de al menos 10 veces más en la recompensa y un aumento en la duración del episodio de 3 veces más en comparación con la implementación anterior.

Conclusión

Esta publicación le muestra cómo usar el Paquete de inicio de SageMaker Battlesnake para entrenar a una serpiente con RL distribuido. Las serpientes construidas con Amazon SageMaker lograron una recompensa 10 veces mayor en comparación con las serpientes construidas sin esta opción cuando se entrenaron durante la misma cantidad de tiempo con las capacidades de entrenamiento distribuido para RL en Amazon SageMaker.

Pruebe la capacitación distribuida con Amazon SageMaker RL y vea si puede ascender de rango en el Arena global de Battlesnake. Para más información, vea el siguiente video Taller Amazon SageMaker Battlesnake con Xavier Raffin de AWS (20 de abril) en Twitch como parte de la Battlesnake: Stay Home y Code evento para recaudar dinero para Food Banks Canada.

Referencias

[1] Mnih, V., Kavukcuoglu, K., Silver, D., Graves, A., Antonoglou, I., Wierstra, D. y Riedmiller, M. (2013). Jugar atari con aprendizaje de refuerzo profundo. preimpresión arXiv arXiv: 1312.5602.

[2] Horgan, D., Quan, J., Budden, D., Barth-Maron, G., Hessel, M., Van Hasselt, H. y Silver, D. (2018). Repetición de experiencia distribuida priorizada. preimpresión arXiv arXiv: 1803.00933.

[3] Liang, E., Liaw, R., Moritz, P., Nishihara, R., Fox, R., Goldberg, K.,… y Stoica, I. (2017). RLlib: abstracciones para el aprendizaje de refuerzo distribuido. preimpresión arXiv arXiv: 1712.09381.


Acerca de los autores

Jonathan Chung es un científico aplicado en AWS. Trabaja en aplicar el aprendizaje profundo a diversas aplicaciones, incluidos juegos y análisis de documentos. Le gusta cocinar y visitar ciudades históricas de todo el mundo.

Anna Luo es científica aplicada en AWS. Ella trabaja en la utilización de técnicas de aprendizaje de refuerzo para diferentes dominios, incluida la cadena de suministro y el sistema de recomendación. Su objetivo personal actual es dominar el snowboard.

Scott Perry es un arquitecto especialista en soluciones con AWS. Con sede en Calgary, Alberta, ayuda a los clientes a aplicar soluciones basadas en AI / ML a problemas comerciales significativos. Sus intereses incluyen Deep Reinforcement Learning y Genomics. Fuera del trabajo, le gusta tocar la guitarra eléctrica y pasar tiempo en las montañas.

Bharathan Balaji es un investigador científico en AWS y sus intereses de investigación residen en los sistemas y aplicaciones de aprendizaje por refuerzo. Contribuyó al lanzamiento de Amazon SageMaker RL y AWS DeepRacer. Le gusta jugar bádminton, cricket y juegos de mesa durante su tiempo libre.

Xavier Raffin es arquitecto de soluciones en AWS, donde ayuda a los clientes a transformar sus negocios y crear soluciones de nube líderes en la industria. La curiosidad de Xavier lo empujó a aplicar tecnología en muchos dominios: transporte público, mapeo web, IoT, aeronáutica y espacio. Contribuyó a varios proyectos OpenSource y Opendata: OpenStreetMap, Navitia, Transport APIs.

Vishaal Kapoor es Gerente Senior de Desarrollo de Software con AWS AI. Le encanta todo lo relacionado con la inteligencia artificial y trabaja en la creación de soluciones de aprendizaje profundo con SageMaker. En su tiempo libre, practica bicicletas de montaña, tablas de snowboard y pasa tiempo con su familia.

Fuente: https://aws.amazon.com/blogs/machine-learning/scaling-your-ai-powered-battlesnake-with-distributed-reinforcement-learning-in-amazon-sagemaker/

punto_img

Información más reciente

punto_img