https://github.com/NVIDIA-Omniverse/IsaacGymEnvs
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")
)
尝试训练可以终端输入:
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
Checkpoints保存于路径:runs/EXPERIMENT_NAME/nn
其中EXPERIMENT_NAME
为 task name
,在envs示例注释中有提到;但也可以通过参数experiment
来覆盖。
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"
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
选择要使用的培训配置。将自动默认为环境的正确配置。
例如:
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/
中,train的配置在isaac gamenvs/cnfig/train/
中。
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
获取模拟器图片的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")
)
可以通过切换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
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