ray.rllib 入门实践-4: 构建算法

RLlib一:RLlib入门 强化学习库,RLlib入门 阅读详情

        在前面的博客 ray.rllib 入门实践-2:配置算法-优快云博客 介绍了ray.rllib中的几种配置算法的方法,在示例代码中同步给出了构建(build)算法的方法,但是没有对构建算法的方式进行归纳介绍。

        本博客主要梳理ray.rllib中,从config生成可训练的algorithm的几种方式。

环境配置:

        torch==2.5.1

        ray==2.10.0

        ray[rllib]==2.10.0

        ray[tune]==2.10.0

        ray[serve]==2.10.0

        numpy==1.23.0

        python==3.9.18

方式1 : algo = AlgorithmConfig().build()

示例 1: 

import os 
from ray.rllib.algorithms.ppo import PPO,PPOConfig
from ray.tune.logger import pretty_print

## 配置算法
storage_path = "F:/codes/RLlib_study/ray_results/build_method_3"
config = PPOConfig()
config = config.rollouts(num_rollout_workers=2)
config = config.resources(num_gpus=0,num_cpus_per_worker=1,num_gpus_per_worker=0)
config = config.environment(env="CartPole-v1",env_config={})
config.output = storage_path  ## 设置过程文件的存储路径

## 构建算法
algo = config.build()

## 训练
for i in range(3):
    result = algo.train() 
    print(f"episode_{i}")

示例 2:

import os 
from ray.rllib.algorithms.ppo import PPO,PPOConfig
from ray.tune.logger import pretty_print

## 配置并构建算法
algo = (
    PPOConfig()
    .rollouts(num_rollout_workers=1)
    .resources(num_gpus=0)
    .environment(env="CartPole-v1")
    .build()  ## 在这里实现算法构建
)

## 训练
for i in range(3):
    result = algo.train() 
    print(f"episode_{i}")

方式2: algo = Algorithm(config=config)

示例1:

import os 
from ray.rllib.algorithms.ppo import PPO,PPOConfig
from ray.tune.logger import pretty_print

## 配置算法
config = PPOConfig()
config = config.rollouts(num_rollout_workers=2)
config = config.resources(num_gpus=0)
config = config.environment(env="CartPole-v1")

## 构建算法
algo = PPO(config=config)

## 训练
for i in range(3):
    result = algo.train() 
    print(f"episode_{i}")

示例2:

import os 
from ray.rllib.algorithms.ppo import PPO,PPOConfig
from ray.tune.logger import pretty_print

## 配置算法
storage_path = "F:/codes/RLlib_study/ray_results"
os.makedirs(storage_path, exist_ok=True)
config = {
    "env":"CartPole-v1",
    "env_config":{}, ## 用于传递给env的信息
    "frame_work":"torch",
    "num_gpus":0,
    "num_workers":2,
    "num_cpus_per_worker":1,
    "num_envs_per_worker":1,
    "num_gpus_per_worker":0,
    "lr":0.001,
    "model":{
        "fcnet_hiddens":[256,256,64],
        "fcnet_activation":"tanh",
        "custom_model_config":{},
        "custom_model":None},
    "output":storage_path
}

## 构建算法
algo = PPO(config=config)

## 训练
for i in range(3):
    result = algo.train() 
    print(f"episode_{i}")

在这两个示例中, 分别向PPO算法中传入一个 PPOConfig 类对象 和 一个 DIct, 在PPO算法内部,都会把config转变成dict格式使用。用 PPOConfig 进行配置更利于开发者使用python的语法提示。

可运行代码:

import os 
from ray.rllib.algorithms.ppo import PPO,PPOConfig
from ray.tune.logger import pretty_print

################### build-algo  ##########################################
## build-method-1
# config = PPOConfig()\
#         .rollouts(num_rollout_workers = 2)\
#         .resources(num_gpus=0)\
#         .environment(env="CartPole-v1")
# algo = config.build()

## build-method-2
# algo = (
#     PPOConfig()
#     .rollouts(num_rollout_workers=1)
#     .resources(num_gpus=0)
#     .environment(env="CartPole-v1")
#     .build()
# )

## build-method-3 : 推荐 ,推荐原因: 有代码提示。
# storage_path = "F:/codes/RLlib_study/ray_results/build_method_3"
# config = PPOConfig()
# config = config.rollouts(num_rollout_workers=2)
# config = config.resources(num_gpus=0,num_cpus_per_worker=1,num_gpus_per_worker=0)
# config = config.environment(env="CartPole-v1",env_config={})
# config.output = storage_path  ## 设置过程文件的存储路径
# algo = config.build()

## build-method-4 : 推荐
config = PPOConfig()
config = config.rollouts(num_rollout_workers=2)
config = config.resources(num_gpus=0)
config = config.environment(env="CartPole-v1")
algo = PPO(config=config)

## build-method-5 : 不推荐
# config = PPOConfig()
# config = config.rollouts(num_rollout_workers=2)
# config = config.resources(num_gpus=0)
# algo = PPO(config=config,env="CartPole-v1") ## 这种配置env的方式即将被抛弃

## build-method-6 : error
## 此种方式会报错: Cannot set attribute (num_rollout_workers) of an already frozen AlgorithmConfig!
## 一经执行build之后,就不能再修改配置了。
# algo = PPO(env="CartPole-v1")
# algo.config.rollouts(num_rollout_workers=2)
# algo.config.resources(num_gpus=0)

## build-method-7 :error
# config = PPOConfig()
# config["rollouts"] = {"num_rollout_workers":2}
# config["resources"] = {"num_gpus":0}
# config["environment"] = {"env":"CartPole-v1"}
# algo = config.build()

## build-method-8 : 次推荐。 优点:简洁直观。 缺点: 配置时没有代码提示。
##    method-1,2,3,4,5 在从config生成algo时, build函数内在的把 PPOConfig类对象转变成以下格式。
##    rllib中直接使用以下格式创建算法。 缺点是,在配置算法时, 没有代码提示。 
##    PPOConfig 类可以认为是对以下字典的一种升级封装,更便于使用。 
# storage_path = "F:/codes/RLlib_study/ray_results/build_method_8"
# os.makedirs(storage_path, exist_ok=True)
# config = {
#     "env":"CartPole-v1",
#     "env_config":{}, ## 用于传递给env的信息
#     "frame_work":"torch",
#     "num_gpus":0,
#     "num_workers":2,
#     "num_cpus_per_worker":1,
#     "num_envs_per_worker":1,
#     "num_gpus_per_worker":0,
#     "lr":0.001,
#     "model":{
#         "fcnet_hiddens":[256,256,64],
#         "fcnet_activation":"tanh",
#         "custom_model_config":{},
#         "custom_model":None},
#     "output":storage_path
# }
# algo = PPO(config=config)

#################  print config  #######################################
## 打印配置信息: method-1, 推荐
config_dict = config.to_dict() # algo_config是一个类对象,需要转变成dict才能打印和显示
# print(config_dict)
print(pretty_print(config_dict)) ## 以更优雅的方式打印,便于阅读。

## 打印配置信息: method-2
# algo_config = algo.get_config()
# config_dict = algo_config.to_dict() # algo_config是一个类对象,需要转变成dict才能打印和显示
# print(config_dict)



###################  训练  #############################################
for i in range(3):
    result = algo.train() ## algo_train是执行一个episode的训练,返回一个result_dict, 包含了许多信息,可以去解析使用
    # print(pretty_print(result))
    print(f"episode_{i}")

    ## 保存模型
    if i % 2 == 0:
        checkpoint_dir = algo.save().checkpoint.path
        print(f"Checkpoint saved in directory {checkpoint_dir}")

Ray强化学习分布式框架及RLlib 最近阅读了 Ray: A Distributed Framework for Emerging AI Applications RLlib: Abstractions for Distributed Reinforcement Learning 两篇文章,然而发现对应的博客解读还是比较少,所以简单总结下这两篇文章。 首先这是一个开源项目,相关的文档已经可以轻松在网上获得。分布式框架 ... 阅读详情

相关推荐

【ray】【Rllib】关键概念

在特定的环境和政策条件下,政策评估会产生一批批的经验。动作->奖励->下一个状态->训练->重复的模拟迭代,直到结束状态,被称为一个插曲,或在RLlib中,一个展示。RL仿真反馈循环重复收集一个(单代理情况)或多个(多代理情况)策略的数据,在这些收集的数据上训练策略,并确保策略的权重保持同步。因此,收集的环境数据包含观察结果、采取的行动、收到的奖励和所谓的完成标志,指示代理在模拟中播放的不同情节的边界。策略是一个将环境的观察映射到要采取的动作的函数,通常写为π(s(t))-> a(t)。

wq6qeg88的博客 1499

ray.rllib-入门实践-13:自定义多智能体强化学习

需要继承自reset 函数和step函数接口需要与下面保持严格一致。每一个输出都变成了 key:value 字典。import ray## 1. 定义多智能体环境## 初始化智能体ID列表## 定义每个智能体的动作空间, 这里默认多个智能体的动作空间一样## 定义每个智能体的观测空间, 这里默认多个智能体的观测空间一样# 简单打印环境状态pass## 初始化智能体数量## 初始化智能体ID列表## 定义每个智能体的动作空间, 这里默认多个智能体的动作空间一样。

wzg2016的博客 2250

【ray】【RLlib】【Algorithms 算法】

0.0对应于均匀概率。training(*,vtrace:bool| None =,use_critic:bool| None =,use_gae:bool| None =,lambda_:float| None =,clip_param:float| None =,use_kl_loss:bool|无=,kl_coeff:浮点|无=,kl_target:float|无=,τ:浮点|None =,target_update_frequency:int|无=,**kwargs)→ APPOConfig。

wq6qeg88的博客 1196

深度强化学习框架Ray|RLLib|Tune学习笔记

文章目录0 Ray深度强化学习框架概述1 Ray使用场景—多进程2 Ray使用场景—进程间通信3 Tune使用场景—调参4 RLLib使用场景—RL算法5 Ray、Tune和RLLib关系6 Ray系统架构(实现多进程和跨节点通信)6.1 Ray系统架构—概述6.2 Ray系统架构—内存管理7 Tune系统架构(实验资源分配+调参)8 RLLib系统架构(Trainer、Policy和Agent)8.1 Policy实现功能8.2 Trainer实现功能参考文献 0 Ray深度强化学习框架概述 Ray—

SL_World的博客 9323

Jetson Orin NX上PyTorch环境搭建与性能优化指南

本文详细指导如何在Jetson Orin NX上搭建高效的PyTorch开发环境。内容涵盖CUDA与cuDNN的“隐藏”配置、Miniconda虚拟环境管理、PyTorch for Jetson的正确安装与验证,并提供了电源模式设置、TensorRT加速、混合精度等关键性能优化实战技巧,帮助开发者充分释放边缘AI设备的算力。

weixin_29090089的博客 337

HPE磁盘阵列管理04——MSA事件

本文介绍了HPE MSA存储系统的事件处理机制,重点分析了常见磁盘故障事件及其解决方案。文章首先定义了MSA事件的五个严重级别(严重、错误、警告、信息和解决),然后详细列举了多个典型事件案例(如事件1、3、6、8、172等),包括每种事件的触发条件、对系统的影响以及具体修复步骤。针对磁盘故障场景,文章提供了更换磁盘、重建磁盘组、取消隔离等操作建议,并强调应及时配置备用磁盘以降低数据风险。最后指出更详细的事件说明可参考《MSA事件描述参考指南》,并提供了HPE官方手册下载链接。全文为技术人员处理MSA存储故障

istrangeboy&begin zero的博客 1118

【强化学习】Ray RLlib框架

Ray是一个开源的分布式计算框架,旨在解决大规模计算任务的高性能和分布式处理需求。它提供了任务调度、并行计算、分布式存储等丰富功能,允许终端用户并行化单个机器代码,几乎不需要更改代码。Ray为构建和运行分布式应用程序提供了简单的单元,并在其上构建了一个大型的应用程序、库和工具生态系统,以支持复杂的应用程序。

大雨淅淅的博客 1889

别再只会用串口助手了!手把手教你用手机App调试HC-05蓝牙模块(STM32F103实战)

本文详细介绍了如何利用手机App调试HC-05蓝牙模块与STM32F103的无线连接,突破传统串口助手的限制。通过实战指南,开发者可以掌握移动性测试、实时监控和快速验证等高效调试技巧,优化蓝牙透传的稳定性和性能。

weixin_33670786的博客 428

强化学习rllib简明教程 ray

强化学习rllib简明教程 ray     之前说到强化 学习的库,推荐了tianshou,但是tianshou实现的功能还不够多,于是转向rllib,个人还是很期待tianshou的发展。     回到rllib,rllib是基于ray的一个工具(不知道这么说是不是合适),ray和rllib的关系就像,mllib之于spark,ray是个分布式的计算框架。     官网,文档。进入官网,

Lejeune的博客 1万+

【Matlab】飞行器气动弹性仿真与分析

气动弹性是飞行器设计领域的核心交叉学科,融合了空气动力学、结构动力学和控制理论,主要研究飞行器结构在气动力作用下的弹性变形、振动响应及相互耦合规律,直接影响飞行器的飞行稳定性、操纵性和结构安全性。随着飞行器向高速度、高机动性、轻量化方向发展,气动弹性问题愈发突出,如颤振、发散、嗡鸣等现象,严重时会导致飞行器结构破坏甚至飞行事故,因此气动弹性仿真与分析已成为飞行器设计、验证和优化的关键环节。当前,飞行器气动弹性仿真面临诸多技术挑战:气动力与结构变形的强耦合特性难以精准描述,易出现仿真误差;

unber的博客 233

SillyTavern 酒馆在 Mac 和 Linux 上的部署教程(含启动器安装方法)

SillyTavern 是一个支持多种大模型聊天接口的本地前端项目,适用于 MacOS 和 Linux 系统。本文提供了两种部署方式:手动安装和使用 SillyTavern Launcher 安装器。手动安装需要先安装 Git 和 NodeJS,然后克隆项目源码并运行启动脚本。使用 Launcher 则更为简便,适合新手用户,能够自动安装依赖和配置环境。部署完成后,用户可以通过浏览器访问本地服务器,加载角色卡片并连接大模型 API,享受二次元角色扮演聊天的乐趣。无论是开发者还是终端用户,都能轻松完成 Sil

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3392

ray.rllib 入门实践-5: 训练算法

前面的博客介绍了ray.rllib中算法的配置和构建,也包含了算法训练的代码。但是rllib中实现算法训练的方式不止一种,本博客对此进行介绍。

wzg2016的博客 1004

Claude Code(7):从零创建你的第一个 Skill

在前面的文章,我们介绍了 Skills 的基本概念,这篇我们深入实战,从零开始创建你的第一个 Skill,并逐步解锁所有配置项,让 Claude Code 真正熟悉你的测试规范和习惯。

blues_C的博客 646

ray.rllib 入门实践-2:配置算法

ray.rllib的算法配置方式有多种,网上的不同教程各不相同,有的互不兼容,本文汇总罗列了多种算法配置方式,给出推荐,并在最后给出可运行代码。

wzg2016的博客 1083

FFDNet-pytorch版本代码训练教程

该文章为FFDNet-pytorch版本代码训练教程,抓紧订阅学习!尽早入门发论文哦!

假技术Po主 1506

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

perseverance51博客 4232

RLlib简介

参考: https://ray.readthedocs.io/en/latest/rllib.html https://zhuanlan.zhihu.com/p/79613212 文章目录1. RLlib: 可扩展强化学习1.1. custom env example1.2. API documentation1.3. concepts and custom algorithms2. 一分钟熟悉R...

方小汪的博客 8282

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

使用Ray RLlib构建自定义强化学习环境

基于Ray RLlib 2.51.1版本,详细介绍了构建自定义强化学习环境与模型的方法。内容包括:1)继承Gymnasium的Env类实现自定义环境,定义观测/动作空间及核心接口;2)通过TorchModelV2实现自定义神经网络模型,包含策略网络和价值函数;3)使用PPOConfig链式配置训练参数,并处理新旧API兼容性问题;4)完整的训练流程及模型保存方法。文中所有代码均通过实际验证,解决了原参考文章因版本更新导致的API不兼容问题。

m0_60610428的博客 1300

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Ray RLlib 架构入门指导

本文介绍了RLlib的核心架构和基本使用方法。主要内容包括: RLlib是构建在Ray上的可扩展强化学习库,通过分离采样和学习过程实现分布式训练。 核心架构包含Algorithm运行时、EnvRunner负责采样、Learner负责学习,通过RLModule和Episode实现解耦。 关键组件:AlgorithmConfig/Algorithm负责配置和运行,EnvRunner与环境交互收集数据,Learner更新模型,RLModule封装神经网络。 训练流程:EnvRunner采样生成Episode →

Keep Learning 243

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Ray项目RLlib核心概念解析:从算法到环境的完整指南

Ray项目RLlib核心概念解析:从算法到环境的完整指南 【免费下载链接】ray ray-project/ray: 是一个分布式计算框架,它没有使用数据库。适合用于大规模数据处理和机器学习任务的开发和实现,特别是对于需要使用分布式计算框架的场景。特点是分布式计算框架、无数据库。 ...

gitblog_00202的博客 591

机器学习框架Ray -- 1.4 Ray RLlib的基本使用

RLlib是一种建立在Ray之上的行业级别的强化学习(RL)库。RLlib提供了高度可扩展性和统一的API,适用于各种行业和研究应用。定义了一个名为SimpleCorridor的gym环境,使用PPO算法进行并行强化学习。

wenquantongxin的博客 3873

ray.rllib入门实践-1: 快速跑通

参考: 1. RLlib: Industry-Grade, Scalable Reinforcement Learning — Ray 2.41.02. RLlib一:RLlib入门-优快云博客

wzg2016的博客 731

【强化学习】RLLib框架

        RLLib是构建在Ray分布式计算框架之上的强化学习库,它提供了高度集成和模块化的结构,方便用户进行强化学习算法的开发与实验。以下是一个RLLib框架的学习指南,帮助你快速上手并深入理解其工作原理。

大雨淅淅的博客 8187

【亲测免费】 Ray RLlib 教程使用指南

Ray RLlib 教程使用指南 1. 项目介绍 Ray RLlib 是一个用于强化学习(RL)的高扩展性库,属于 Ray 项目的一部分。它提供了多种算法(包括离线、基于模型、无模型等),支持 TensorFlow 和 PyTorch,并提供统一的 API,适用于各种应用场景。本教程旨在帮助初学者通过 Ray RLlib 库理解和使用强化学习环境、模型和算法。 2. 项目快速启动 2.1 安装依赖...

gitblog_00877的博客 1860

ray.rllib-入门实践-11: 自定义模型/网络

class My_Model(TorchModelV2, nn.Module): ## 重构以下函数, 函数接口不能变。## 1. 定义自己的模型model_config:ModelConfigDict, ## PPOConfig.training(model = ModelConfigDict), 调用的是config.model中的参数name:str## 测试 custom_arg1 , custom_arg2 传递进来的是什么数值## 定义网络层。

wzg2016的博客 1299

探索强化学习的无限可能:Ray’s RLlib实战教程

探索强化学习的无限可能:Ray’s RLlib实战教程 项目介绍 “Hands-on RL with Ray’s RLlib” 是一个面向初学者的强化学习(Reinforcement Learning, RL)教程,专注于使用Ray的RLlib库进行环境、模型和算法的实践。无论你是Python编程新手,还是希望深入了解强化学习的开发者,这个教程都能为你提供一个高可扩展性、算法选择丰富、支持Tens...

gitblog_00008的博客 983
上一篇: ray.rllib 入门实践-3: 配置参数列表
下一篇: ray.rllib 入门实践-5: 训练算法
wzg2016
博客等级 码龄10年 539粉丝 493原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值