Linux 35.5 + JetPack v5.1.3@CUDA安装和版本切换

Linux 35.5 + JetPack v5.1.3@CUDA安装和版本切换

  • 1. 源由
  • 2. 现象
  • 3. 分析
    • 3.1 看本质
    • 3.2 善动脑
    • 3.3 笔记回忆
    • 3.4 底层思考
    • 3.5 多版本
  • 4. 版本切换
  • 5. 总结

1. 源由

最近遇到一些CUDA编程,以及编译链接过程出现一些版本不匹配的问题。

首先,申明下,本人是从来没有做过CUDA开发的。想在此表达的意思,只要底层概念清楚,去理解解决一些问题,还是能非常快的搞定的(反正我花了大概2个小时解决CUDA版本不一致导致无法编译成功的问题)。

2. 现象

从提示角度看,编译链接的时候发现找到了CUDA 12.6版本,但是要求使用11.4的版本。

注:之前这个软件包编译链接一切顺利,突然莫名其妙的就这样了。妥妥的直接崩溃!!!

-- +++ processing catkin package: 'camera_models'
-- ==> add_subdirectory(VINS-Fusion/camera_models)
CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):Could NOT find CUDA: Found unsuitable version "12.6", but required is exactversion "11.4" (found /usr/local/cuda)
Call Stack (most recent call first):/usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:391 (_FPHSA_FAILURE_MESSAGE)/usr/share/cmake-3.16/Modules/FindCUDA.cmake:1104 (find_package_handle_standard_args)/usr/local/lib/cmake/opencv4/OpenCVConfig.cmake:86 (find_package)/usr/local/lib/cmake/opencv4/OpenCVConfig.cmake:108 (find_host_package)VINS-Fusion/camera_models/CMakeLists.txt:16 (find_package)

3. 分析

底层逻辑思维的重要性,在于透过现象看本质;而技术出发的角度不仅仅是善于动脑,更要学会动手。

3.1 看本质

看这篇文章的小伙伴,不知道有几个用过Windows 95/98的?呵呵,如果用过,请评论留言。因为这样的小伙伴依然在这样一线动脑的可能不多了。

在上述系统上,如果出现蓝屏或者系统重启,通常Windows操作系统会提示用户,请卸载最近安装的程序(应用软件或者驱动程序)。

因此,大概率是最近安装什么导致了这个当前系统在编译链接的时候由于底层库或者配置环境的变更,导致了此次错误。

回忆:是的,我装了CUDA 12.6,而且一开始装了12.6,nvcc --version命令还用不了,还需要修改PATH路径。

好吗,估计这里就是问题的原因了。可是乍解决呢?知道管个PPPPPPPP用,,,所以,,,,

3.2 善动脑

俗话说“懒人多福”,在此就是,既然我都装了最新的CUDA12.6,凭什么我要换回去,再说了我也没有删除或者卸载CUDA 11.4啊。

能不能两个都要,随意切换呢?

3.3 笔记回忆

俗话说“好记性,不如烂笔头”,笔者的习惯就是干活干事,都会比较好的做一些简单的记录。

有以下几个好处:

  1. 能够有个过程记录,以免受到干扰忘记做到哪里了;
  2. 事后可提供详实的复现步骤;
  3. 根据前面的工序,通过记录内容,进行回退工作;
  4. 根据实验步骤或者先后次序,结合结果进行底层逻辑分析,定位可能问题;
  • CUDA Toolkit 12.6 Update 1 Downloads
    在这里插入图片描述
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/arm64/cuda-ubuntu2204.pin
$ sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/12.6.1/local_installers/cuda-tegra-repo-ubuntu2204-12-6-local_12.6.1-1_arm64.deb
$ sudo dpkg -i cuda-tegra-repo-ubuntu2204-12-6-local_12.6.1-1_arm64.deb
$ sudo cp /var/cuda-tegra-repo-ubuntu2204-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install cuda-toolkit-12-6 cuda-compat-12-6
$ export PATH=/usr/local/cuda/bin:$PATH
$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

3.4 底层思考

  • 环境变量
$ export PATH=/usr/local/cuda/bin:$PATH
$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
  • 安装路径,第一层
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Wed_Aug_14_10:14:07_PDT_2024
Cuda compilation tools, release 12.6, V12.6.68
Build cuda_12.6.r12.6/compiler.34714021_0
  • 安装路径,第二层
$ ls /usr/local/cuda -l
lrwxrwxrwx 1 root root 22 94 08:05 /usr/local/cuda -> /etc/alternatives/cuda
$ ls /etc/alternatives/cuda -l
lrwxrwxrwx 1 root root 20 914 07:09 /etc/alternatives/cuda -> /usr/local/cuda-12.6

3.5 多版本

那现在有哪些CUDA在系统上,分别是如何安装的?

$ ls /usr/local/cuda -l
lrwxrwxrwx 1 root root 22 94 08:05 /usr/local/cuda -> /etc/alternatives/cuda$ ls /etc/alternatives/cuda* -l
lrwxrwxrwx 1 root root 20 914 07:09 /etc/alternatives/cuda -> /usr/local/cuda-12.6
lrwxrwxrwx 1 root root 20 94 08:05 /etc/alternatives/cuda-11 -> /usr/local/cuda-11.4
lrwxrwxrwx 1 root root 20 914 07:09 /etc/alternatives/cuda-12 -> /usr/local/cuda-12.6

4. 版本切换

  • Step 1:编辑 .bashrc 文件

在文件末尾添加:

export PATH=/usr/local/cuda-11.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH

保存并退出后,运行:source ~/.bashrc

  • Step 2:切换 CUDA 版本
$ sudo rm /etc/alternatives/cuda
$ sudo ln -s /usr/local/cuda-11.4 /etc/alternatives/cuda$ ls /etc/alternatives/cuda -l
lrwxrwxrwx 1 root root 20 914 10:01 /etc/alternatives/cuda -> /usr/local/cuda-11.4

因为环境变量是关联在/usr/local/cudabinlib64的,所以环境变量不需要更新。

  • Step 3:验证当前CUDA版本
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Sun_Oct_23_22:16:07_PDT_2022
Cuda compilation tools, release 11.4, V11.4.315
Build cuda_11.4.r11.4/compiler.31964100_0

注:如果实在不放心,重启下板子,看看是否还有cache什么的问题(这个逻辑,还没有深入研究)。

  • Step 4:重新编译ROS工程
$ rm build/ devel/ -rf
$ catkin_make

5. 总结

当然除了这个方法以外,还可以通过工程里面指定编译的CUDA版本。

总的来说,学会底层逻辑思维(透过现象看本质),勤于动手,事情总是能解决的!

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

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

相关文章

我知道,不少人会有质疑,为什么当地的医生,会想不到是这种病?

[toc] #一、冷风机如果 ##1.和人合计 ##2.愉快教育 ##3.亏教育课 #二、让红薯粉丝 #三、发个通过 #四、福娃热风 一、冷风机如果 据长三角铁路消息,受第13号台风“贝碧嘉”影响,为确保铁路运输安全和旅客出行安全,铁路部门计划对9月1…

【新时代概论】新时代概论书目的结构(LP)

文章目录 前言一、结构导论第一章、新时代坚持和发展中国特色社会主义第二章、以中国式现代化全面推进中华民族伟大复兴第三章、坚持党的全面领导第四章、坚持以人民为中心第五章、全面深化改革开放第六章、推动高质量发展第七章、社会主义现代化建设的教育、科技、人才战略第八…

官宣:Zilliz 在亚马逊云科技中国区正式开服!

01 Zilliz Cloud 正式上线亚马逊云科技宁夏区服务 9 月 4 日,Zilliz 正式官宣, Zilliz Cloud 正式上线亚马逊云科技在宁夏区的云服务。至此,Zilliz Cloud 已实现全球 5 大云 19 个节点 的全覆盖,成为全球首个提供海内外多云服务的…

【devops】devops-git之介绍以及日常使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

位段、枚举、联合

位段 在一个结构体中以位(最小单位)为单位来指定其成员所占的内存长度。位段成员名后面有一个冒号,冒号后有一个数字(这个数字是小于等于这个成员所占的位)。 typedef struct S {char a : 2;//8char b : 8;//8char c …

java重点学习-线程池的使用和项目案例

十一 线程池的使用场景 你们项目哪里用到了多线程 批量导入:使用了线程池CountDownLatch批量把数据库中的数据导入到了ES(任意)中,避免OOM数据汇总:调用多个接口来汇总数据,如果所有接口(或部分接口)的没有依赖关系,就可以使用线程池future来…

Fiddler下载安装及汉化

直接上干货 1.下载地址: 通过百度网盘分享的文件:fiddler汉化,FiddlerSetup抓包.exe等2个文件 链接:https://pan.baidu.com/s/12JBZO8z0mDHlHM1DCL365g 提取码:1111 2.fiddler安装: 注意安装位置 3.汉化&…

个性化、持续性阅读 学生英语词汇量自然超越标准

2024年秋季新学年,根据2022版《义务教育英语课程标准》全新修订的英语新版教材开始投入使用,标志着我国英语教育迈入了一个以应用为导向、注重综合素养培养的新阶段。 新版教材的变革不仅仅是一次词汇量的简单增加,更是一场从应试到应用的深…

[数据集][目标检测]河道垃圾检测数据集VOC+YOLO格式2274张8类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2274 标注数量(xml文件个数):2274 标注数量(txt文件个数):2274 标注…

使用vue2+axios+chart.js画折线图 ,出现 RangeError: Maximum call stack size exceeded 错误

目录 效果图 解决方案 修正要点 效果图 修改前App.vue代码&#xff1a; <template><div id"app"><canvas id"myChart"></canvas></div> </template><script> import axios from axios; import { Chart, regis…

QT多线程编程(基础概念以及示例)

QT多线程编程 前言&#xff1a;基础夯实&#xff1a;一:多线程概述二:QT多线程的使用1. 继承QThread类2. 继承QObject类3. QtConcurrent模块 三:线程同步与通信四:线程安全五:线程管理六:总结 效果展示&#xff1a;实现功能&#xff1a;核心代码&#xff1a;mainwindow.hmythre…

k8s 部署 ruoyi 前后端分离项目

本文视频版: https://www.bilibili.com/video/BV17ugkePEeN 参考 https://blog.csdn.net/qq_50247813/article/details/136934090 https://gitee.com/nasaa/RuoYi-Vue-cloud https://www.itsgeekhead.com/tuts/kubernetes-129-ubuntu-22-04-3/ https://kubernetes.io/docs…

【信号】SIGCHLD信号--了解

SIGCHLD是多少号信号呢&#xff1f;17号 我们知道用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以非阻塞地查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,父进程在处理自己的工作…

Leetcode 二叉树中根遍历

采用递归算法&#xff0c;并且用一个向量来存储节点值。 算法C代码如下&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}*…

Python库Plotly学习笔记

Plotly是一个用于创建交互式图形的Python库。它提供了丰富的图表类型&#xff0c;包括散点图、线图、柱状图、热力图、饼图等&#xff0c;以及高级的可视化功能&#xff0c;如动画、交互、数据缩放和拖动等。 Plotly库的主要特点&#xff1a; 交互式图表&#xff1a;Plotly创…

git 更新LingDongGui问题解决

今天重新更新灵动gui的代码&#xff0c;以便使用最新的arm-2d&#xff0c;本来以为是比较简单的一件事情&#xff08;因为以前已经更新过一次&#xff09;&#xff0c;却搞了大半天&#xff0c;折腾不易啊&#xff0c;简单记录下来&#xff0c;有同样遇到问题的同学参考&#x…

SSM框架学习(三、MyBatis实践:提高持久层数据处理效率)

目录 一、Mybatis简介 1.简介 2.持久层框架对比 3.快速入门&#xff08;基于Mybatis3方式&#xff09; 4.ibatis方式的实现和原理 5.ibatis与mybatis之间的关系 二、Mybatis基本使用 1.向 sql 语句传参 &#xff08;1&#xff09;mybatis日志输出配置 &#xff08;2&…

存储课程学习笔记5_iouring的练习(io_uring,rust_echo_bench,fio)

我们知道&#xff0c;在处理大量高并发网络时&#xff0c;一般考虑并发&#xff0c;以及设计对应的方案&#xff08;比如select,poll,epoll&#xff09;等。 那么如果频繁进行文件或者磁盘的操作&#xff0c;如何考虑性能和并发&#xff0c;这里就可以考虑用到io_uring。 0&a…

RK3588镜像打包制作,替换文件系统

1.在开发板上安装async apt-get async 2.在另一台linux机器上执行命令拷贝文件系统 注意&#xff1a; 这里使用root权限或者账户 mkdir rootfs rsync -avx root192.168.1.3:/ rootfs 3.制作空镜像文件 先去开发板上验证自己的系统使用了多少空间&#xff0c;然后输入命令制…

rancker 图形化界面

rancker 图形化界面 图形化界面进行k8s集群的管理 rancher自带监控————普罗米修斯 #在master和两个node上都操作 [rootmaster01 opt]# rz -E rz waiting to receive. [rootmaster01 opt]# docker load -i rancher.tar ​ #在master上操作 [rootmaster01 opt]# docker pul…