• Isaac-gym(5):关于强化学习


    希望和正在或者想要学习使用ISAAC-GYM的朋友一起有一个讨论群,尝试互帮互助,交流学习内容~
    目前刚开始尝试,不知道能不能建立起来,如果有意向请私戳!!
    ——2023.02

    • 官方链接:

    https://github.com/NVIDIA-Omniverse/IsaacGymEnvs

    1、环境建立示例

    import isaacgym
    import isaacgymenvs
    import torch
    
    envs = isaacgymenvs.make(
    	seed=0, 
    	task="Ant",     #对应执行时用到的名称
    	num_envs=2000, 
    	sim_device="cuda:0",
    	rl_device="cuda:0",
    )
    print("Observation space is", envs.observation_space)
    print("Action space is", envs.action_space)
    obs = envs.reset()
    for _ in range(20):
    	obs, reward, done, info = envs.step(
    		torch.rand((2000,)+envs.action_space.shape, device="cuda:0")
    	)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2、运行benchmarks

    尝试训练可以终端输入:

    python train.py task=Cartpole
    python train.py task=Ant
    
    • 1
    • 2

    其中train.py位于 ~/IsaacGymEnvs/isaacgymenvs。

    默认情况下,会显示一个预览窗口,会降低训练速度。可以在运行时使用v键来禁用查看器更新,并允许训练更快地进行。训练几秒钟后,当效果变好时,再次按下v键恢复观看。
    (点击画面,按v后所有对象静止,再按v恢复)

    使用esc键或关闭查看器窗口以提前停止训练。

    同时,可以选择盲训,在终端中使用Control-C提前停止:

    python train.py task=Ant headless=True
    
    • 1

    train-Ant

    3、载入训练的模型/Checkpoints

    Checkpoints保存于路径:runs/EXPERIMENT_NAME/nn
    其中EXPERIMENT_NAME task name,在envs示例注释中有提到;但也可以通过参数experiment来覆盖。

    • 载入一个Checkpoint并断点续训:
    python train.py task=Ant checkpoint=runs/Ant/nn/Ant.pth
    
    • 1
    • 导入训练模型且仅体现推断效果(不训练):
    python train.py task=Ant checkpoint=runs/Ant/nn/Ant.pth test=True num_envs=64
    
    • 1

    (num_envs=64 可更改)

    • 如果路径名称中含有“[” 或者 “=” :
    checkpoint="./runs/Ant/nn/last_Antep\=501rew\[5981.31\].pth"
    
    • 1

    4、配置和命令行参数

    train.py中的关键参数包括:

    • task=TASK
      选择要训练的任务。包括:AllegroHand, Ant, Anymal, AnymalTerrain, BallBalance, Cartpole, FrankaCabinet, Humanoid, Ingenuity, Quadcopter, ShadowHand, ShadowHandOpenAI_FF, ShadowHandOpenAI_LSTM, and Trifinger
      对应于:isaacgymenvs/config/task中的文件

    • train=TRAIN
      选择要使用的培训配置。将自动默认为环境的正确配置。
      例如:PPO

    • num_envs=NUM_ENVS
      选择要使用的环境个数(覆盖任务配置中设置的默认环境数)

    • seed=SEED
      为随机化设置种子值,并覆盖在任务配置中设置的默认种子

    • test=TEST
      如果设置为True,则仅对策略运行推断,不执行任何训练

    • checkpoint=CHECKPOINT_PATH
      设置要加载以进行培训或测试的检查点的路径

    • headless=HEADLESS
      是否选择使用headless模式

    • experiment=EXPERIMENT
      设置实验的名称

    • max_iterations=MAX_ITERATIONS
      设置要运行的迭代次数。为提供的环境提供了合理的默认值。

    • sim_device=SIM_DEVICE_TYPE
      用于物理模拟的设备。设置为cuda:0(默认值)以使用GPU,设置为cpu以使用CPU。遵循类似PyTorch的设备语法。

    • rl_device=RL_DEVICE
      用于RL算法的设备/ID。默认为cuda:0,并遵循类似PyTorch的设备语法。

    • graphics_device_id=GRAPHICS_DEVICE_ID
      用于渲染的Vulkan图形设备ID。默认值为0。注意-这可能与CUDA设备ID不同,并且不遵循类似PyTorch的设备语法。

    • pipeline=PIPELINE
      要使用的API管道。默认为gpu,也可以设置为cpu

    允许将配置文件中的变量直接设置为命令行参数。例如,要设置rl_games训练运行的折扣率,可以使用train.prarams.config.gamma=0.999。同样,也可以设置任务配置中的变量。例如,task.env.enableDebugVis=True

    配置的任务和训练部分的工作方式是通过使用配置组。task的实际配置在isaacgamenvs/config/task/.yaml中,train的配置在isaac gamenvs/cnfig/train/PPO.yaml中。

    5、Tasks

    tasks的源代码路径:isaacgymenvs/tasks
    每个任务都将isaacgymenvs/base/vec_task.py中的VecEnv基类子类化;
    建立自己的tasks可以参考:~/IsaacGymEnvs/docs/framework.md
    每个tasks的细节可以参考:https://github.com/NVIDIA-Omniverse/IsaacGymEnvs/blob/main/docs/rl_examples.md

    6、视频录制

    获取模拟器图片的API:env.render(mode='rgb_rray')
    获取模拟器视频的API:gym.wrappers.RecordVideo
    通过以下示例可以存储视频到video文件夹中:

    import gym
    import isaacgym
    import isaacgymenvs
    import torch
    
    envs = isaacgymenvs.make(
    	seed=0, 
    	task="Ant", 
    	num_envs=20, 
    	sim_device="cuda:0",
    	rl_device="cuda:0",
    	graphics_device_id=0,
    	headless=False,
    	multi_gpu=False,
    	virtual_screen_capture=True,
    	force_render=False,
    )
    envs.is_vector_env = True
    envs = gym.wrappers.RecordVideo(
    	envs,
    	"./videos",
    	step_trigger=lambda step: step % 10000 == 0, # record the videos every 10000 steps
    	video_length=100  # for each video record up to 100 steps
    )
    envs.reset()
    print("the image of Isaac Gym viewer is an array of shape", envs.render(mode="rgb_array").shape)
    for _ in range(100):
    	envs.step(
    		torch.rand((20,)+envs.action_space.shape, device="cuda:0")
    	)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    7、在训练时存储视频

    可以通过切换capture_video=True标志自动捕捉代理游戏的视频,并通过capture_video_len=100调整捕捉频率capture_video_freq=1500和视频长度。可以设置force_render=False,以在未捕捉视频时禁用渲染:

    python train.py capture_video=True capture_video_freq=1500 capture_video_len=100 force_render=False
    
    • 1

    您还可以将视频自动上传到“权重和偏差”:

    python train.py task=Ant wandb_activate=True wandb_entity=nvidia wandb_project=rl_games capture_video=True force_render=False
    
    • 1

    8、其他

    • 多GPU训练
      您可以使用torchuron(即torch.distributed)使用此存储库在NGC上运行多GPU训练。
      例如:
    torchrun --standalone --nnodes=1 --nproc_per_node=2 train.py multi_gpu=True task=Ant <OTHER_ARGS>
    
    • 1

    其中:
    --nproc_per_node=: 指定要运行的进程数
    multi_gpu=True: 必须在训练脚本上设置标志,才能运行多GPU训练。

    • 域随机化
      https://github.com/NVIDIA-Omniverse/IsaacGymEnvs/blob/main/docs/domain_randomization.md

    • 再现性和确定性
      https://github.com/NVIDIA-Omniverse/IsaacGymEnvs/blob/main/docs/reproducibility.md

  • 相关阅读:
    ORA-01547、ORA-01194、ORA-01110
    基于轻量级CNN的12306验证码识别分析系统
    力扣设计循环队列
    macOS命令行终端隐藏主机名和用户名
    [山东科技大学OJ]1141 Problem E: 编写函数:有序序列插入数据 之二 (Append Code)
    如何获取视图 view 的字段名和字段类型
    C++官网 Tutorials C++ Language Program structure:Statements and flow control
    CSS: Clip Or Crop Images In HTML5 CSS
    深度学习笔记——神经网络(ANN)搭建过程+python代码
    Azure SQL DB/MI以及SQL SERVER中sys.databases视图介绍
  • 原文地址:https://blog.csdn.net/hongliyu_lvliyu/article/details/127917645