pytorch_car_caring 排坑记录

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 rgb2gray
    gray = 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 forward
    v = self.v(x)
File "/home/lcy-magic/anaconda3/envs/CARPPO/lib/python3.10/site-packages/torch/nn/modules/linear.py", line 114, in forward
    return 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_action
    action = 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_BLOCKING=1.
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

也就是把数据放到cpu的时候出现了非法内存访问的问题。
我先尝试把cpu去掉,发现不行,后面程序需要这时把数据扔到cpu处理。然后参考网络回答也没用,GPT也没有具体建议。
这时候我想要不试一试报错的建议:For debugging consider passing CUDA_LAUNCH_BLOCKING=1.看看有没有更多报错。
GPT告诉我要这么用:

CUDA_LAUNCH_BLOCKING=1 python your_script.py

于是我就:

CUDA_LAUNCH_BLOCKING=1 python test.py --render

然后宁猜怎么着?我本来只指望着他给我提供点更多的提示信息,结果这次直接就成功了!

然后就很好奇,这个环境变量CUDA_LAUNCH_BLOCKING到底什么意思,这篇博客参考博客讲的比较清楚了。CPU和GPU可能存在异步执行的情况,这时候如果GPU报错,CPU可能不知道当时给GPU下发的什么任务,只能把自己手头上正在做的事儿当做报错信息发出去,所以可能报错是不准确的,这时候用CUDA_LAUNCH_BLOCKING=1,就可以保证CPU和GPU同步执行。

说明,我这里的问题是异步导致的,暂时先不深究到底发生什么了,反正成功了:
恢复价值的前向计算:

v = self.v(x)

执行测试脚本:

CUDA_LAUNCH_BLOCKING=1 python test.py --render

效果:

在这里插入图片描述

在这里插入图片描述
效果也就那样,基本没有正常跑完一圈的。有的分高,是他最后一段冲刺训练出了一种不是最优,但最逆天的走法,不想描述了,散会。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/365185.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

张维迎《博弈与社会》多重均衡与制度和文化(3)法律和社会规范的协调作用

社会博弈通常存在多个纳什均衡。许多情况下,多个纳什均衡之间并不存在优劣之分;即使有优劣之分,也很难通过无成本的交流而选择一个特定的纳什均衡。这就产生了对制度和文化的需求。社会制度和社会规范(文化、习惯等)的…

RIP——路由信息协议

目录 1 内部网关协议 RIP 1.1 协议 RIP 的工作原理 1.2 RIP“距离”的定义 1.3 RIP 协议的三个特点 1.4 RIP 协议的优缺点 1.5 路由表的建立 路由表主要信息和更新规则 2 距离向量算法 3 RIP2 报文 4 坏消息传播得慢 5 启动RIP 启动RIP: router rip 命令 启用和检…

nrm切换镜像源-yarn不生效问题

在说这问题前,大家肯定知道nvn管理node版本,不懂的朋友直接看此文: nvm - nodejs版本管理工具:https://blog.csdn.net/tianlu930/article/details/135988727 要安装node自带npm其实不好用,一般都用再装yarn&#xff0c…

【Java程序设计】【C00196】基于(JavaWeb+SSM)的旅游管理系统(论文+PPT)

基于(JavaWebSSM)的旅游管理系统(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的旅游平台 本系统分为前台、管理员2个功能模块。 前台:当游客打开系统的网址后,首先看到的…

【VSCode 光标返回上一位置】

默认按键 Windows: Alt ← ;或者 鼠标侧键 Linux: Ctrl Alt - ;貌似数字键盘的减号没效果 Mac: Ctrl - 自定义修改方法: VSCode左下角 “管理 / Manage” “键盘快捷方式 / KeyBoard Shortcuts” 搜索 “前进 / Go Forward 或 后退 / Go Back” 双击需…

优思学院|APQP在汽车行业如何运作?

什么是APQP? APQP,或称前期产品质量规划,是一个保证制造业产品质量和满足客户需求的有组织的过程。 APQP从产品设计的最初阶段开始,强调质量和可靠性,贯穿至生产过程,帮助在产品日益复杂(例如…

2024美赛数学建模A题思路源码——七鳃鳗性别比例和生态系统关系

赛题目的:分析一个物种根据资源可用性改变其性别比例的能力的利弊。开发一个模型,分析对生态系统中由此产生的相互作用。 问题一.七鳃鳗性别比例对生态系统的影响 问题分析 建立一个简化版的模型,来探讨以下问题: 1.我们假设七…

从金蝶云星空到四化智造MES(API)通过接口配置打通数据

从金蝶云星空到四化智造MES(API)通过接口配置打通数据 接通系统:金蝶云星空 金蝶K/3Cloud(金蝶云星空)是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态…

idea配置jdk

jdk1.8推荐链接:Jdk1.8的下载、安装及环境配置-CSDN博客 附本人下载的 jdk1.8 的百度网盘链接 链接:https://pan.baidu.com/s/1nOo7k7-f2fZojuyIOW6FvA 提取码:i5py 过程简述: 1,一路next安装完后(我这…

Git 怎么设置用户的权限

在团队协作的软件开发中,对于版本控制系统Git来说,确保代码与数据的安全性至关重要。为了实现这一目标,Git提供了灵活且可定制的用户权限管理机制。下面将简单的探讨一下Git如何设置用户的权限,以及如何保护代码和数据。 用户身份…

linux文件权限备份、恢复-linux文件权限如何备份、恢复-getfacl/setfacl备份恢复文件权限

0、序 在运维这条路上走久了,你能听到或者遇到这样的事情就越多,甚至是你自己干过的: 一个信心满满的运维人员一个不小心,输入 "chmod -R 777 /" 导致一个巨大的悲剧,然后整个部门从上到下被撸一顿。虽然…

The Rise and Potential of Large Language Model Based Agents: A Survey 中文翻译

大型语言模型代理的崛起与潜力:综述 摘要 长期以来,人类一直追求与或超越人类水平的人工智能(AI),而人工智能代理被视为实现这一目标的有希望的方式。人工智能代理是感知环境、做出决策并采取行动的人工实体。已经有…

2024美赛A题完整思路代码分析:建立竞争机理方程+遗传算法优化

A题是自由度比较大的场景限定下的模型构建,相对比较容易,核心是找到现有的成熟的数学模型,然后找到合适的数据进行证明得到结论,估计大部分是目标优化问题。(不限制专业) B题属于较为经典的物理建模&#…

ffmpeg 时间裁剪之-ss -t与滤镜中trim=start=*:duration=*的区别和联系

背景 工作中遇到的呗。记下来贡着。 滤镜重置时间戳:setptsPTS-STARTPTS 在FFmpeg中,setptsPTS-STARTPTS是一种用于调整视频时间戳(PTS)的滤镜表达式。这个表达式通常用于视频编辑和处理过程中,用于修改视频的时间轴…

2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码

2024美国大学生数学建模E题财产保险的可持续模型详解思路具体代码 前言 很快啊!啪的一下拿到题目就开始做题!简单介绍一下我自己:博主专注建模五年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建…

Leetcode—2950. 可整除子串的数量【中等】Plus(前缀和题型)

2024每日刷题(一零八) Leetcode—2950. 可整除子串的数量 算法思想 让 f ( c ) d , 其中 d 1 , 2 , . . . , 9 f(c) d, 其中d 1, 2, ..., 9 f(c)d,其中d1,2,...,9. // f(c1) f(c2) ... f(ck) / k avg // > f(c1) f(c2) ... f(ck) - …

【LeetCode】每日一题 2024_2_2 石子游戏 VI(排序、贪心)

文章目录 LeetCode?启动!!!题目:石子游戏 VI题目描述代码与解题思路 LeetCode?启动!!! 题目:石子游戏 VI 题目链接:1686. 石子游戏 VI 题目描述…

校招春招,在线测评一般测试哪些内容?

在校园招聘这一块,很多应届毕业生会相当在乎,对于他们来说,如果在学校期间就找到工作是比较轻松的事情,不用担心毕业之后找工作困难重重,可以稳稳当当毕业。但想要迅速通过招聘也不容易,在校招春招上面&…

RabbitMQ控制台的基本使用

启动RabbitMQ后,浏览器 http://localhost:15672 打开RabbitMQ的控制台页面后,登录默认账户guest。 一. 添加队列 控制台选择队列,然后选择添加队列,队列类型默认经典类型,然后输入队列名称,最后添加队列。…

0101appscan安装与使用入门-扫描-信息收集

1 简介 HCL AppScan(原IBM Security AppScan)是原IBM的Rational软件部门的一组网络安全测试和监控工具,2019年被HCL技术公司收购。AppScan旨在在开发过程中对Web应用程序的安全漏洞进行测试[1]。该产品学习每个应用程序的行为,无…
最新文章