企业门户网站内容建设,如何一个空间做多个网站,百度seo按天计费,网站设计的主题pytorch_car_caring 排坑记录 任务踩坑回顾简单环境问题代码版本问题症状描述解决方法 cuda问题#xff08;异步问题#xff09;症状描述解决方法 任务
因为之前那个MPC代码跑出来的效果不理想#xff0c;看了一天代码#xff0c;大概看明白了#xff0c;但要做改进还要有… pytorch_car_caring 排坑记录 任务踩坑回顾简单环境问题代码版本问题症状描述解决方法 cuda问题异步问题症状描述解决方法 任务
因为之前那个MPC代码跑出来的效果不理想看了一天代码大概看明白了但要做改进还要有不少工作对我来说特别是如何对效果进行评估。正好我还要用到RL做这个任务的代码就在github上看了下发现有几个打算都跑跑看谁效果好代码又干净就用谁的。本菜鸡目前只会这么硬缝。。。 参考代码这个项目是用PPO算法做的。
踩坑回顾
简单环境问题
照旧起手安装个3.10的conda环境然后按照readme安装所需包我直接pip3安装最新版中间提示少了什么包我再安什么包。 这次我装gym直接就pip3 install gym[all]了省事儿。
代码版本问题
症状描述
根据readme指示运行
python test.py --render报错
gym.error.DeprecatedEnv: Environment version v0 for CarRacing is deprecated. Please use CarRacing-v2 instead.代码改成v2就行
self.env gym.make(CarRacing-v2)再运行报错
AttributeError: CarRacing object has no attribute seed把随机种子注释掉
# self.env.seed(args.seed)报错
File /home/lcy-magic/RaceCar_Demo/pytorch_car_caring/test.py, line 70, in rgb2graygray np.dot(rgb[..., :], [0.299, 0.587, 0.114])
TypeError: tuple indices must be integers or slices, not tuple他说我的rgb是turple类型的打印出来看看
确实不对劲儿因为还有个{}。刚开始想到怎么回事就把rgb换成rgb[0]再转成np.array后面越发不对劲儿再回过头来看这个问题才发现症结
解决方法
rgb来自img_rgb,img_rgb来自step和reset两个函数。关键在于reset函数这个由于gym改版返回值不再只是observation还有info。所以要给代码中所有的step和reset都加上info问题就解决了。
cuda问题异步问题
症状描述
解决上一个问题过程中其实还出现了cuda问题报错
File /home/lcy-magic/RaceCar_Demo/pytorch_car_caring/test.py, line 127, in forwardv self.v(x)
File /home/lcy-magic/anaconda3/envs/CARPPO/lib/python3.10/site-packages/torch/nn/modules/linear.py, line 114, in forwardreturn F.linear(input, self.weight, self.bias)
RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling cublasCreate(handle)解决方法
当时为了先解决上一个问题直接把设备改成cpu了先凑活用
# device torch.device(cuda if use_cuda else cpu)
device cpu现在再回过头看看到底什么问题
首先排除代码问题不可能是维度不对因为cpu就能跑通cuda却不行排除显存问题网络挺小的数据也不多应该不是可能是版本问题但我不愿相信
尝试了网上很多方法都没有作用。就要放弃了但博客写一半了不想烂尾就继续耗着。然后突然想到这是强化学习的测试这个报错出现在网络对价值的估计上我现在又不需要价值我只需要动作。我手动给价值赋值个常量看看效果
# v self.v(x)v 1果然报错变了这就带来了新的信息
File /home/lcy-magic/RaceCar_Demo/pytorch_car_caring/test.py, line 151, in select_actionaction action.squeeze().cpu().numpy()
RuntimeError: CUDA error: an illegal memory access was encountered
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING1.
Compile with TORCH_USE_CUDA_DSA to enable device-side assertions.也就是把数据放到cpu的时候出现了非法内存访问的问题。 我先尝试把cpu去掉发现不行后面程序需要这时把数据扔到cpu处理。然后参考网络回答也没用GPT也没有具体建议。 这时候我想要不试一试报错的建议For debugging consider passing CUDA_LAUNCH_BLOCKING1.看看有没有更多报错。 GPT告诉我要这么用
CUDA_LAUNCH_BLOCKING1 python your_script.py于是我就
CUDA_LAUNCH_BLOCKING1 python test.py --render然后宁猜怎么着我本来只指望着他给我提供点更多的提示信息结果这次直接就成功了
然后就很好奇这个环境变量CUDA_LAUNCH_BLOCKING到底什么意思这篇博客参考博客讲的比较清楚了。CPU和GPU可能存在异步执行的情况这时候如果GPU报错CPU可能不知道当时给GPU下发的什么任务只能把自己手头上正在做的事儿当做报错信息发出去所以可能报错是不准确的这时候用CUDA_LAUNCH_BLOCKING1就可以保证CPU和GPU同步执行。
说明我这里的问题是异步导致的暂时先不深究到底发生什么了反正成功了 恢复价值的前向计算
v self.v(x)执行测试脚本
CUDA_LAUNCH_BLOCKING1 python test.py --render效果 效果也就那样基本没有正常跑完一圈的。有的分高是他最后一段冲刺训练出了一种不是最优但最逆天的走法不想描述了散会。