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")
	)

2、运行benchmarks

尝试训练可以终端输入:

python train.py task=Cartpole
python train.py task=Ant

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

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

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

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

python train.py task=Ant headless=True

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
  • 导入训练模型且仅体现推断效果(不训练):
python train.py task=Ant checkpoint=runs/Ant/nn/Ant.pth test=True num_envs=64

(num_envs=64 可更改)

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

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
    选择要使用的培训配置。将自动默认为环境的正确配置。
    例如:<TASK>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/<task>.yaml中,train的配置在isaac gamenvs/cnfig/train/<task>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")
	)

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

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

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

8、其他

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

其中:
--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

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 这个错误是因为无法创建Java虚拟机导致的,同时还发生了致命异常,导致程序退出。解决这个问题的方法有几种。首先,你可以尝试增加Java虚拟机的内存。通过在运行程序的时候添加以下参数:-Xmx512m(根据需要调整内存大小)。这样可以增加Java虚拟机的堆内存限制,可能解决问题。另外,你还可以检查你的Java环境变量设置是否正确。确保JAVA_HOME和PATH变量都正确指向了你的Java安装路径。如果环境变量设置正确,但问题仍然存在,那么可能是由于你的Java安装文件损坏或不完整导致的。在这种情况下,你可能需要重新安装Java。同时,你还可以尝试更新你的Java版本,以确保使用的是最新的Java版本。希望这些方法对解决你的问题有所帮助。123 #### 引用[.reference_title] - *1* *2* [Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred.](https://blog.csdn.net/qq_48435967/article/details/125350165)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [Error: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Progra](https://blog.csdn.net/dsfdaifeng/article/details/123537528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值