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 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_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.rhkb.cn/news/249691.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R-YOLO

Abstract 提出了一个框架,名为R-YOLO,不需要在恶劣天气下进行注释。考虑到正常天气图像和不利天气图像之间的分布差距,我们的框架由图像翻译网络(QTNet)和特征校准网络(FCNet)组成,…

【数睿】数睿常见问题处理

连接器请求地址修改 cat /home/sdata2/tomcat/bin/setenv.sh修改里面的 SYSTEM_URL 为数睿服务实际访问地址 如图所示 连接器执行 异常日志 2024-01-23 18:01:49,586 (conf-file-poller-0) [ERROR - org.apache.flume.node.PollingPropertiesFileConfigurationProvider$Fil…

全链路压测的关键点是什么?

全链路压测是一种重要的性能测试方法,用于评估应用程序或系统在真实生产环境下的性能表现。通过模拟真实用户行为和流量,全链路压测能够全面评估系统在不同负载下的稳定性和性能表现。本文将介绍全链路压测的关键点,以帮助企业更好地理解和应…

Redis核心技术与实战【学习笔记】 - 10.浅谈CPU架构对Redis性能的影响

概述 可能很多人都认为 Redis 和 CPU 的关系简单,Redis 的线程在 CPU 上运行,CPU 快 Reids 处理请求的速度也很快。 其实,这种认知是片面的,CPU 的多核架构及多 CPU 结构,也会影响到 Redis 的性能。如果不了解 CPU 对…

【目标检测】对DETR的简单理解

【目标检测】对DETR的简单理解 文章目录 【目标检测】对DETR的简单理解1. Abs2. Intro3. Method3.1 模型结构3.2 Loss 4. Exp5. Discussion5.1 二分匹配5.2 注意力机制5.3 方法存在的问题 6. Conclusion参考 1. Abs 两句话概括: 第一个真正意义上的端到端检测器最…

实习日志10

1.用户信息 1.1.在用户管理中编辑用户信息 1.2.绑定公司id 1.3.显示在页面 2.修改识别逻辑 2.1.分析 先识别,再判断,清空键把识别结果清空 2.2.写码 修改了发票识别逻辑,略... 3.接高拍仪 3.1.js引入报错 分析: 遇到的错误…

MySQL数据库基础第一篇(SQL通用语法与分类)

文章目录 一、SQL通用语法二、SQL分类三、DDL语句四、DML语句1.案例代码2.读出结果 五、DQL语句1.DQL-基本查询2.DQL-条件查询3.DQL-聚合函数4.DQL-分组查询5.DQL-排序查询6.DQL-分页查询7.DQL语句-执行顺序1.案例代码2.读出结果 六、DCL语句1.DCL-管理用户2.DCL-权限控制1.案例…

鸿蒙开发-UI-页面路由

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 文章目录 一、基本概念 二、页面跳转 1.router基本概念 2.使用场景 3.页面跳转参数传递 三、页面返回 1.普通页面返回 2.页面返回前增加一个询问框 1.系统默认询问框 2.自定义询问框 总…

【Mysql】数据库架构学习合集

目录 1. Mysql整体架构1-1. 连接层1-2. 服务层1-3. 存储引擎层1-4. 文件系统层 2. 一条sql语句的执行过程2-1. 数据库连接池的作用2-2. 查询sql的执行过程2-1. 写sql的执行过程 1. Mysql整体架构 客户端: 由各种语言编写的程序,负责与Mysql服务端进行网…

【安装记录】Chrono Engine安装记录

本文仅用于个人安装记录。 官方安装教程 https://api.projectchrono.org/8.0.0/tutorial_install_chrono.html Windows下安装 windows下安装就按照教程好了。采用cmake-gui进行配置,建议首次安装只安装核心模块。然后依此configure下irrlicht,sensor…

J-Link:STM32使用J-LINK烧录程序,其他MCU也通用

说明:本文记录使用J-LINK烧录STM32程序的过程。 1. J-LINK驱动、软件下载 1、首先拥有硬件J-Link烧录器。 2、安装J-Link驱动程序SEGGER 下载地址如下 https://www.segger.com 直接下载就可以了。 2.如何使用J-LINK向STM32烧写程序 1、安装好以后打开J-LINK Fl…

从零开始:CentOS系统下搭建DNS服务器的详细教程

前言 如果你希望在CentOS系统上建立自己的DNS服务器,那么这篇文章绝对是你不容错过的宝藏指南。我们提供了详尽的步骤和实用技巧,让你能够轻松完成搭建过程。从安装必要的软件到配置区域文件,我们都将一一为你呈现。无论你的身份是运维人员,还是程序员,抑或是对网络基础设…

【脑电信号处理与特征提取】P7-涂毅恒:运用机器学习技术和脑电进行大脑解码

运用机器学习技术和脑电进行大脑解码 科学研究中的大脑解码 比如2019年在Nature上一篇文章,来自UCSF的Chang院士的课题组,利用大脑活动解码语言,帮助一些患者恢复语言功能。 大脑解码的重要步骤 大脑解码最重要的两步就是信号采集和信号…

Coremail启动鸿蒙原生应用开发,打造全场景邮件办公新体验

1月18日,华为在深圳举行鸿蒙生态千帆启航仪式,Coremail出席仪式并与华为签署鸿蒙合作协议,宣布正式启动鸿蒙原生应用开发。作为首批拥抱鸿蒙的邮件领域伙伴,Coremail的加入标志着鸿蒙生态版图进一步完善。 Coremail是国内自建邮件…

浏览器——HTTP缓存机制与webpack打包优化

文章目录 概要强缓存定义开启 关闭强缓存协商缓存工作机制通过Last-Modified If-Modified-Since通过ETag If-None-Match 不使用缓存前端利用缓存机制,修改打包方案webpack 打包webpack 打包名称优化webpack 默认的hash 值webapck其他hash 类型配置webpack打包 web…

数据结构-内部排序

简介 排序(Sorting):将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列 排序算法分为内部排序和外部排序 内部排序:在排序期间数据对象全部存放在内存的排序 外部排序&am…

MySQL-运维-主从复制

一、概述 二、原理 三、搭建 1、服务器准备 2、主库配置 (1)、修改配置文件/etc/my.cnf (2)、重启MySQL服务器 (3)、登录mysql,创建远程链接的账号,并授予主从复制权限 &#xff0…

3593 蓝桥杯 查找最大元素 简单

3593 蓝桥杯 查找最大元素 简单 // C风格解法1&#xff0c;通过率100%&#xff0c;多组数据处理样式//str "abcdefgfedcba" //abcdefg(max)fedcba//str "xxxxx" //x(max)x(max)x(max)x(max)x(max)#include<bits/stdc.h>const int N 1e2 10;char …

分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SCN-Adaboost随机配置网…

vue——实现多行粘贴到table事件——技能提升

最近在写后台管理系统时&#xff0c;遇到一个需求&#xff0c;就是要从excel表格中复制多行内容&#xff0c;然后粘贴到后台系统中的table表格中。 如下图所示&#xff1a;一次性复制三行内容&#xff0c;光标放在红框中的第一个框中&#xff0c;然后按ctrlv粘贴事件&#xff0…