赞
踩
我先把自己的系统和显卡信息展示出来,我安装的是Ubuntu 22.04.3 LTS版本的双系统,如果大家还没安装建议安装官网推荐的版本Ubuntu 18.04或者20.04。
官方有明确给出系统Ubuntu 18.04, or 20.04,我刚下单了台式机准本只装linux系统就不换了:
我的显卡信息如下,这两个都没问题,上图也可以看出,官网建议的最低 NVIDIA 驱动程序版本:470.74(需要 470 或更高版本):
python版本是官方给的虚拟环境创建的3.7.12:
因为想做强化学习,所以继上次的Isaac Gym安装20231126-超详细Isaac Gym安装教程(基于双系统版本)-CSDN博客后,开始安装官方给出的强化学习环境IsaacGymEnvs,首先查看系统是否已经安装了git,如果没有就网上查找一下如何安装。
访问官网代码github:GitHub - NVIDIA-Omniverse/IsaacGymEnvs: Isaac Gym Reinforcement Learning Environments
复制clone代码语句(如果你git登陆了用户名和邮箱也可以使用SSH),记得前面加git clone,也可以直接复制下面的代码直接运行,出现完成界面代表clone成功。
- 基于HTTPS:
- git clone https://github.com/NVIDIA-Omniverse/IsaacGymEnvs.git
-
- 基于SSH:
- git clone git@github.com:NVIDIA-Omniverse/IsaacGymEnvs.git
运行下面的代码安装依赖包(一行一行运行,全部复制,第二行别少了“.”):
- cd IsaacGymEnvs/
- pip install -e .
等待好长一会后,出现下面截图的successfully说明依赖安装成功:
注意:如果安装过程中出现 python setup.py develop类的提示报错,说明权限不够,建议在root账户安装
运行下面代码跑基准测试:
python ./isaacgymenvs/train.py task=Ant
注意上述 “task=Ant”之间没有空格奥
过了好一会才到第7轮,默认情况下运行train函数都会显示一个预览窗口也就是渲染界面,因为开着渲染训练会很慢,所以官方给出了禁用渲染的方式,即:鼠标点击渲染界面,摁下键盘上的“v”键,这样训练就会运行的非常快,如果你想看看训练的效果,再次摁下“v”键就能再次启动渲染了。
下面这个就是禁用渲染后,很快就到500轮了。
初次实验因为达到最大epoch而训练结束,打印信息会提示checkpoint保存地址
你也可以直接训练之前就禁止显示图形界面,代码如下:
python ./isaacgymenvs/train.py task=Ant headless=True
这个时候就只有打印信息,没有图形显示界面了:
训练结束会打印保存模型的位置信息,见下图红色框:
可以看出有两个模型(个人觉得一样,随便加载哪一个都行),所有训过的模型都会存在/IsaacGymEnvs/runs这个文件夹下,后面以红框为例子展示
模型存在/IsaacGymEnvs/runs/Ant_08-13-17-28/nn路径下,可以看出每隔50轮就保存一次,这样即使训练程序中断了,也可以找到中断时附近的模型,可以节约时间,下图也可以看出:
=> saving checkpoint 'runs/Ant_08-13-17-28/nn/last_Ant_ep_500_rew_7367.0103.pth'
=> saving checkpoint 'runs/Ant_08-13-17-28/nn/last_Ant_ep_500_rew__7367.01_.pth'
这两个是一样的模型,只不过上面一个是每隔50轮就保存一次的模型(刚好500轮也是一个),下面那个是最终训练结束时候的模型。
这个时候加载模型继续训练,(你们需要加载替换自己训练的模型,不要盲目复制):
python ./isaacgymenvs/train.py task=Ant checkpoint=runs/Ant_08-13-17-28/nn/last_Ant_ep_500_rew__7367.01_.pth headless=True
如果只按照上述运行会直接就另存为501轮的checkpoint模型,见下图
因为程序默认的轮数是500轮,见下图:
更新代码如下,(你们需要加载替换自己训练的模型,不要盲目复制):
python ./isaacgymenvs/train.py task=Ant checkpoint=runs/Ant_08-13-17-28/nn/last_Ant_ep_500_rew__7367.01_.pth headless=True max_iterations=1000
所以如果加载模型checkpoint,需要增加训练轮数(训练是累加的)将max_iterations=1000添加上去,程序就开始继续运行了。
奖励也从500轮的7367.01涨到了1000轮的9697.14
假如已经训练好了,要加载经过训练的模型并仅进行推理测试模型好坏(无训练),这个时候需要将 test=True 作为参数传递进去。 显卡不太行为了避免渲染的消耗,可以减少环境数量num_envs=64或者更少,因为只是测试可以在很少的环境中运行,代码如下(注意:此时的checkpoint模型已经更换为1000轮的结果了,你们需要加载替换自己训练的模型,不要盲目复制):
python ./isaacgymenvs/train.py task=Ant checkpoint=runs/Ant_08-14-29-03/nn/last_Ant_ep_1000_rew__9697.14_.pth test=True num_envs=64
这个时候能看到训练的效果(一堆蚂蚁争先恐后的跑向同一个目的地),关闭测试直接关掉环境右上角的“X”就行。
注意,如果checkpoint名称中存在特殊字符,例如 [ 或 = ,这个时候需要在它们前面加上/进行转义,并在字符串两边加上引号。 例如,checkpoint="./runs/Ant/nn/last_Antep\=501rew\[5981.31\].pth"
程序是使用 Hydra 来管理配置的,Hydra 是一个配置框架,允许直接将配置文件中的变量设置为命令行参数。例如,可以使用 train.params.config.gamma=0.999
来设置 rl_games
训练运行的折扣率。同样,可以使用此方法调整任务配置中的变量,比如task.env.enableDebugVis=True
。
task=TASK: 选择用于训练的特定任务或环境。有各种环境可供选择,名称如下列表格所示。这些也对应于 isaacgymenvs/config/task
文件夹中的特定配置。
AllegroHand AllegroHandDextremeADR AllegroHandDextremeManualDR AllegroHandFF AllegroHandLSTM AllegroHandLSTM_Big AllegroKuka AllegroKukaLSTM AllegroKukaTwoArmsLSTM Ant AntSAC Anymal AnymalTerrain BallBalance Cartpole FactoryBase FactoryEnvGears FactoryEnvInsertion FactoryEnvNutBolt FactoryTaskGears FactoryTaskInsertion FactoryTaskNutBoltPick FactoryTaskNutBoltPlace FactoryTaskNutBoltScrew FrankaCabinet FrankaCubeStack Humanoid HumanoidAMP HumanoidAMPHands HumanoidSAC IndustRealBase IndustRealEnvGears IndustRealEnvPegs IndustRealTaskGearsInsert IndustRealTaskPegsInsert Ingenuity Quadcopter ShadowHand ShadowHandOpenAI_FF ShadowHandOpenAI_LSTM ShadowHandTest Trifinger
train=TRAIN: 指定要使用的训练配置。通常默认为所选环境的适当配置,例如 <TASK>PPO
。
num_envs=NUM_ENVS: 确定用于训练的环境数量。覆盖了任务配置中设置的默认环境数量。
seed=SEED: 设置特定的随机化种子值。覆盖了任务设置中的默认种子。
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。注意:这个 ID 可能与 CUDA 设备 ID 不同,而且不遵循类似于 PyTorch 的设备规范。
pipeline=PIPELINE: 确定所使用的 API 流水线。默认为 gpu
,还可以切换到 cpu
。gpu
流水线将所有数据保留在 GPU 上,以确保最大速度。cpu
流水线允许在 CPU 或 GPU 上进行仿真(取决于 sim_device
设置),但会在每个步骤中将数据复制到 CPU。
test=TEST: 当设置为 True
时,只对策略执行推断,不进行任何训练。
checkpoint=CHECKPOINT_PATH: 指定用于训练或测试的检查点路径。
headless=HEADLESS: 定义是否以无界面模式运行。
experiment=EXPERIMENT: 设置正在进行的实验名称。
max_iterations=MAX_ITERATIONS: 确定要运行的迭代次数。针对可用环境已提供了合理的默认值。
但是task列表我不是全部都能运行:
例如,跑了四轴飞行器(可以运行):
python ./isaacgymenvs/train.py task=Quadcopter
跑了三指机器人手Trifinger:
python ./isaacgymenvs/train.py task=Trifinger
就报错:
去搜了“RuntimeError: CUDA error: an illegal memory access was encountered“发现好像是卡有问题,这个官网的文章虽然只用了一张卡,但是他们用的是A100,我覺得做人工智能真的太烧钱了...
另外,如果运行终端提示:
Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.
按照如下设置就行:
export HYDRA_FULL_ERROR=1
然后把环境数量降下来(默认好像num_envs=2000),设置num_envs=32,就能跑训练了,代码如下:
python ./isaacgymenvs/train.py task=Trifinger num_envs=32
下图可以看出其默认的epoch是20000,我直接ctrl+C结束了,如果大家只是跑界面看看,记得改下这个参数。
跑了Ingeniuty(问题没有解决)
python ./isaacgymenvs/train.py task=Ingenuity
上述看下来,在加载资源文件 chassis.glb
时出现了问题,导致段错误,但是不知道怎么解决,文件也都在,甚至重新官网下载替换一下也不行,更改环境数量也不行,不知道是不是双系统有问题或者是ubuntu系统有问题。
isaacgymenvs/config/config.yaml
文件中找到。task
和 train
部分的工作原理是通过使用配置组(Config Groups)实现的。详情见:Config Groups | Hydra具体的任务(task)配置在 isaacgymenvs/config/task/<TASK>.yaml
中,而训练(train)配置在 isaacgymenvs/config/train/<TASK>PPO.yaml
中。num_actors: ${....task.env.numEnvs}
)。每个 .
代表着在配置层次结构中向上移动一级。详情见:Usage — OmegaConf 2.4.0.dev1 documentation。isaacgymenvs/tasks
目录中。isaacgymenvs/base/vec_task.py
中 VecEnv 基类的子类。IsaacGymEnvs 包含一个域随机化框架,用于改进经过训练的 RL 策略的 Sim-to-Real 迁移。 详情:https://github.com/NVIDIA-Omniverse/IsaacGymEnvs/blob/main/docs/domain_randomization.md。
如果 RL 策略的确定性训练对您的工作很重要,可以查看我们的再现性和确定性文档https://github.com/NVIDIA-Omniverse/IsaacGymEnvs/blob/main/docs/reproducibility.md。
可以使使用 torchrun(即 torch.distributed)运行多 GPU 训练。示例命令:
torchrun --standalone --nnodes=1 --nproc_per_node=2 train.py multi_gpu=True task=Ant <OTHER_ARGS>
torchrun
是一个用于分布式训练的工具,--standalone
标志表示独立运行,--nnodes=1
指定节点数为1,--nproc_per_node=2
表示每个节点的进程数为2。训练脚本的名称 train.py
,并通过 multi_gpu=True
和 task=Ant
设置了多GPU训练和任务名称为Ant,<OTHER_ARGS>
表示其他可能需要添加的参数。
可以运行基于种群的训练,Population Based Training(PBT),来帮助找到良好的超参数或在非常困难的环境中进行训练,否则如果没有它就很难学习任何东西。 有关详细信息,请参阅https://github.com/NVIDIA-Omniverse/IsaacGymEnvs/blob/main/docs/pbt.md。
WandB(Weights and Biases)Weights & Biases是一个用于跟踪、可视化和协作机器学习实验的工具。在 Isaac Gym Envs 中启用 WandB 支持,可以通过命令行设置 wandb_activate=True
标志。可以设置 wandb_group
、wandb_name
、wandb_entity
和 wandb_project
来配置运行的组、名称、实体和项目。但是在使用前,要确保已使用 pip install wandb
安装了 WandB。
可以终端输入wandb --version查看:
wandb --version
回复版本号说明安装了,其他就没有安装请使用上面pip命令安装 。
举个例子,此时运行代码:
python ./isaacgymenvs/train.py task=Ant wandb_activate=True wandb_entity=换成自己的名字 capture_video=False force_render=False
运行后会让你输入选项:
我有帐号所以我输入2,新用户也可以直接去Weights & Biases: The AI Developer Platform注册之后回来回复2跟我保持一致。
点击下面截图的key就自动复制了
然后粘贴到 下图第一个红框里
之后运行就会出现下图,然后按v训练 (不然太慢,或者直接设置headless=True)
运行结束会给出一个网址:摁住ctrl+鼠标右键点击链接就能打开网站。
网站会展示出各种运行结果图:
想看哪个打开折叠看就行,下图是reward图,给出了基于时间time的、基于步step的、基于迭代次数iter的但是看下来都是基于步step的(不懂了):
如果后面又继续训练了,在同一个工程里就会有对比,见下图:
isaac gym实现了标准 env.render(mode='rgb_rray') gym API 来提供模拟器查看器的图像。 此外,可以利用gym.wrappers.RecordVideo来帮助录制显示只能提游戏过程的视频。 官方给出了示例代码如下,该文件应在视频文件夹中生成视频。
- import gym
- import isaacgym
- import isaacgymenvs
- import torch
-
- num_envs = 64
-
- envs = isaacgymenvs.make(
- seed=0,
- task="Ant",
- num_envs=num_envs,
- 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):
- actions = 2.0 * torch.rand((num_envs,) + envs.action_space.shape, device = 'cuda:0') - 1.0
- envs.step(actions)
执行下面代码解决报错:
sudo apt-get install xvfb
继续运行报错:
这个错误表明Pillow库没有XCB支持,可能是在构建Pillow库时缺少了XCB库。XCB是一个用于X Window System的客户端库。需要更新一下或者安装一下,执行下面的代码:
pip install --upgrade Pillow
继续运行报错:(这个没解决)
可以通过切换 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
跟14一样的报错,
还可以自动将视频上传到Weights & Biases: The AI Developer PlatformWeights & BiasesWeights & Biases: The AI Developer Platform(因为上面视频捕获有问题我就不试了,后面电脑到了再试):
python train.py task=Ant wandb_activate=True wandb_entity=换成你自己的名字 capture_video=True force_render=False
16、Pre-commit代码检查
如果使用仓库(github/gitee)管理代码,在上传之前可以使用Pre-commit来帮助开发者在提交代码前运行一系列预定义的检查和操作,以确保代码的质量和一致性。但是在提交之前,请确保 pre-commit run --all-files 运行时没有错误。
如果运行报下图错,说明没装。
执行下面代码安装
sudo apt install pre-commit
执行下面代码查看安装的版本:
pre-commit --version
pre-commit 的使用我不展示了,详情可以看 pre-commit
如果遇到任何问题,请先查看 Isaac Gym 安装说明,也可以看我上一期的详细教程20231126-超详细Isaac Gym安装教程(基于双系统版本)-CSDN博客。安装没问题的话可以通过 GitHub Issues · NVIDIA-Omniverse/IsaacGymEnvs · GitHub 或Isaac Gym - NVIDIA Developer Forums Isaac Gym 论坛查看有没有跟你一样的问题,没有的话可以自行创建新问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。