w11+wsl+3060安装cuda等深度学习环境

news2024/12/24 9:04:00

把一切都重新又梳理学习了一遍,然后发现很多事情其实没必要弄

0. 显卡驱动、nvidia-smi、cuda、nvcc、cuDNN、pytorch、cudatoolkit与它们之间的关系

笔者本人鸟枪换炮了,还是wsl环境香,但是按照官方教程跑完后,遇到了bugRuntimeError:No CUDA GPUs are available,于是强行再把之前一知半解的部分弄明白了。

显卡驱动:刚需部分,wsl环境下有windows的显卡驱动其实就够用了。
nvidia-smi:打包在显卡驱动内,装了显卡驱动后可以用来检验是否安装成功的显卡监测工具包。笔者也在wsl中安装了一下,目前没发现有冲突。
在这里插入图片描述

cuda:分为两个cuda。一个是运行时的库,一个是开发用库(学过Java的人可以用jre和jdk来理解)。运行时的库,可以通过pip来安装在python的依赖里(比如cudatoolkit,或者torch+cuu),基本上深度学习代码用这部分就行。开发用的组件,是安装在操作系统中,一般用不到。cuda定义是NVIDIA提供的一种并行计算平台,提供编程接口让代码能在GPU上执行。CUDA有 runtime api和 driver api,两者都有对应的CUDA版本, nvcc --version 显示的就是前者对应的CUDA版本,而 nvidia-smi显示的是后者对应的CUDA版本。参考【CUDA】nvcc和nvidia-smi显示的版本不一致? - 简书 (jianshu.com)
CUDA版本可以通过在~/.bashrc修改path切换:

export CUDA_HOME=/etc/alternatives/cuda
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}

cuDNN:可以被打包在cuda内,cuda相当于是工作台,cuDNN就是插件。非刚需,但是如果代码要用这种深度学习加速就需要。

nvcc:属于CUDA的编译器,将程序编译成可执行的二进制文件。一般来说如果安装了ubuntu平台上的开发用cuda,就会包含有nvcc(可以把这里的nvcc理解为gcc这种编译器)。

pytorch:需要根据自己的显卡型号算力来安装合适范围内的torch版本,因为cuda版本一定程度上需要和torch版本兼容。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cudatoolkit 是 NVIDIA CUDA Toolkit 的 Python 包装器。通常可以使用 Python 的包管理工具 pipconda 来完成。

PS:根据开发者的回复:《Would pytorch for cuda 11.6 work when cuda is actually 12.0 - PyTorch Forums》可以得知,当前的pytorch包会自带cuda的二进制文件。所以完全可以不在ubuntu中安装cuda,必须要安装的只有以下三个

  • 显卡驱动
  • python
  • pytorch+cudatoolkit或者pytorch+cuda(例如上图中的torch+cu117或者pytorch+cudatoolkit,总之是torch附上一个cuda二进制库)

1. 把wsl部分引入

注意,以下部分是在之前用的,有些步骤可能是冗余的,只是目前能跑所以就没管
官方教程:

GPU in Windows Subsystem for Linux (WSL) | NVIDIA Developer

NVIDIA GPU Accelerated Computing on WSL 2

笔者环境为win11+rtx3060,步骤记录如下:

  1. 在windows系统本身环境下安装对应版本的Geforece驱动,根据官网配置推荐 笔者选择了GeForce Game Ready Driver 531.79

  2. 安装wsl2(中间好像有坑,把报错必应搜索一下应该就能解决了)

  3. 进入wsl界面

  4. sudo apt-key del 7fa2af80,在这个过程中遇到了apt-key的报错,放着不管也没事,如果想了解一下,可以参考stackOverflow

  5. 按照官网教程命令安装wsl上的cuda驱动,如果遇到The public cuda-repo-wsl-ubuntu-12-1-local GPG key does not appear to be installed,就按照他提示的执行一次sudo cp /var/cuda-repo-wsl-ubuntu-12-1-local/cuda-8F52B5FE-keyring.gpg /usr/share/keyrings/ ,然后再执行原命令即可【后面发现这一步其实完全可以不做】

  6. 安装conda/python/torch等包,验证torch.cuda.is_available() PREFIX=/home/tempo/anaconda3

  7. 然后就可以在wsl上爽玩啦(^▽^)

  8. 可能遇到的bug与解决方案: RuntimeError:No CUDA GPUs are available,

    1. conda没写到PATH里面新开窗口找不到conda于是又装了一遍。【后续发现跟wsl的su命令也有关系,su不加用户名之后会进入root的状态,用户文件夹变成了/home,所以conda消失了】
  9. 后续进阶技能点:Vscode与WSL,pycharm与WSL①,pycharm与WSL②, 在pycharm上配置wsl的conda环境

常用命令记录

# cd到windows的目录(以挂载卷的形式存在的)
cd /mnt/c

#注意:powershell命令   NAME      STATE           VERSION | Ubuntu    Running         2
wsl -l -v

ls -l /usr/local | grep cuda
# lrwxrwxrwx  1 root root   22 May 15 15:22 cuda -> /etc/alternatives/cuda
# lrwxrwxrwx  1 root root   25 May 15 15:22 cuda-12 -> /etc/alternatives/cuda-12
# drwxr-xr-x 15 root root 4096 May 15 15:22 cuda-12.1


nvcc --version
# nvcc: NVIDIA (R) Cuda compiler driver
# Copyright (c) 2005-2021 NVIDIA Corporation
# Built on Thu_Nov_18_09:45:30_PST_2021
# Cuda compilation tools, release 11.5, V11.5.119
# Build cuda_11.5.r11.5/compiler.30672275_0

which nvcc
# /usr/bin/nvcc

which nvidia-smi
# /usr/lib/wsl/lib/nvidia-smi

验证安装的全家桶是否可用

# 版本为:torch==1.10.2+cu113
# 这个cu113是有它的意义所在的……

### '1.5.0'
torch.__version__ 
### True
torch.cuda.is_available() 
### 7605
torch.backends.cudnn.version() 
### '10.2'
torch.version.cuda 

参考资料:

cuda 和 cudnn 库的卸载与安装 - 知乎 (zhihu.com)

ubuntu解决没有nvcc命令的错误-CSDN博客

NVIDIA/cuda-samples: Samples for CUDA Developers which demonstrates features in CUDA Toolkit (github.com)

在这里插入图片描述
Support Matrix - NVIDIA Docs**(官方的cudnn库匹配)**

如何查看cudnn当前版本_Linux 和 Windows 查看 CUDA 和 cuDNN 版本_weixin_39916758的博客-CSDN博客

解决CUDA error: no kernel image is available for execution on the device_图灵机学长的博客-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RTMPose关键点检测实战——笔记3

文章目录 摘要安装MMPose安装虚拟环境安装pytorch安装MMCV安装其他的安装包下载 MMPose下载预训练模型权重文件和视频素材 安装MMDetection安装Pytorch安装MMCV安装其它工具包下载 MMDetection安装MMDetection下载预训练模型权重文件和视频素材 MMPose预训练模型预测命令行的方…

关于render: h => h(App)的解释

当我们第一次安装完脚手架,打开 的时候,我相信,一定有小伙伴和我一样,看到main.js里面的render: h > h(App),感觉懵懵的。 因为,在刚开始接触vue的时候,我们这里是这样写的: 而使用了脚手…

iOS性能优化-异步绘制与异步底层View处理

前言: 基于UIKit的性能优化似乎已经到了瓶颈,无论是使用frame代理snpakit,缓存高度,减少布局层次,diff刷新,压缩图片,选择合适队列,选择高性能锁,也不能满足当前庞大而又…

SpringBoot 整合 MongoDB 实现数据的增删改查功能

1、介绍说明 在 MongoDB 中有三个比较重要的名词:数据库、集合、文档 数据库(Database):和关系型数据库一样,每个数据库中有自己的用户权限,不同的项目组可以使用不同的数据库 集合(Collectio…

汽车新能源 - 单体电压值为什么通常是5V以内

常见蓄电池单体电压的值(25℃),如下表: 蓄电池类型单体电压(V)铅酸 蓄电池2.08镍金属氢 蓄电池(NIMH)1.32锂离子 蓄电池2.5~4.2(典型3.6) 单体电压为什么不…

安卓学习笔记(一)

从今天开始我们开始学习安卓的知识: 1.0 Android基础入门教程 1.Android背景与当前的状况 Android系统是由Andy Rubin创建的,后来被Google收购了;最早的版本是:Android 1.1版本 而现在最新的版本是今年5.28,Google I/O大会上推…

Logstash部署与使用

ElasticSearch 1、ElasticSearch学习随笔之基础介绍 2、ElasticSearch学习随笔之简单操作 3、ElasticSearch学习随笔之java api 操作 4、ElasticSearch学习随笔之SpringBoot Starter 操作 5、ElasticSearch学习随笔之嵌套操作 6、ElasticSearch学习随笔之分词算法 7、ElasticS…

123网盘在线解析PHP版源码

123网盘解析PHP版本源码是一种非常实用的工具,可以方便地帮助用户在网页上直接解析出其它网站中的资源,并提供下载链接。当用户需要获取某些资源时,往往需要通过各种搜索引擎或者专业的资源网站进行查找,而且很多时候找到了资源链…

Android NDK集成OpenCV使用C++的.h和.so库函数

Android NDK集成OpenCV使用C的.h和.so库函数 opencv可以作为一个单独的Android module库,被工程下的其他模块使用,但是这样就没法在Android NDK项目的c代码直接使用opencv的.h文件和.so文件。要在Android NDK项目C代码文件中使用,则需要以An…

Nautilus Chain上首个DEX PoseiSwap即将开启IDO

据悉,Nautilus Chain 上的首个 DEX PoseiSwap 即将开启 IDO ,根据官方的最新公告显示,PoseiSwap 即将于 6 月 13 日至 6 月 14 日期间,在 Bounce 平台开启其治理通证 $POSE 的 IDO(Initial DEX Offering)&a…

数据分析--Numpy初级(一)

Numpy初级 Ndarray对象dtype对象 Numpy是数据分析的基础库,它支持大量的维度计算与矩阵运算。同时他也是一个运行速度非常快的数学库,主要用于数组计算,具有线性代数、傅里叶变换、随机数生成等功能。 Ndarray对象 Numpy最重要的一个特点就…

【内部类】

目录 1.什么是内部类2.内部类分类2.1静态内部类2.非静态内部类2.3 局部内部类(几乎不用,大家了解) 3.匿名内部类 1.什么是内部类 在Java中,可以将一个类定义在一个类中或者在一个方法中,前者称为内部类,后…

JAVA打印Hello World的底层实现

任何一个学过JAVA的人应该都对这段代码非常熟悉。空闲时间翻了下代码,看看它的底层是怎么实现的 public class HelloWorld {public static void main(String[] args) {System.out.print("Hello, World!");} }首先点开out,发现它是System类中的…

JAVA微服务_网关

服务网关 什么是服务网关/API网关 API Gateway(APIGW / API 网关),顾名思义,是系统对外的唯一入口。API网关封装了系统内部架构,为每个客户端提供定制的API。 近几年来移动应用与企业间互联需求的兴起。从以前单一的…

数据结构学习记录——图-最短路径问题(无权图单源最短路径算法、有权图单源最短路径算法、多源最短路径算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)

目录 问题分类 无权图单源最短路径算法 思路 伪代码 时间复杂度 代码实现(C语言) 有权图单源最短路径算法 Dijkstra(迪杰斯特拉)算法 伪代码 时间复杂度 代码实现(C语言) 多源最短路径算法 …

《Apollo 智能驾驶进阶课程》四、感知

1. 感知概貌 2. 传感器和标定 激光雷达:主动式,发射功率限制 Camera: 被动式,受到光照影响大 Radar : 多普勒效率 相对速度 超声波: 感知距离有限,倒车时使用。 … 最后设备还在研发过程中。 PnP问题,解决标定。 IC…

chatgpt赋能python:Python实现字符串匹配的SEO优化

Python实现字符串匹配的SEO优化 在现代网络中,SEO(搜索引擎优化)已成为一项必不可少的技能。它涉及到网站的排名、用户的流量和营销策略等方面。关键字匹配是一种常见的SEO技术,它可以帮助你的网站在搜索引擎中排名更高。 本篇文…

Java 实现判定顺序表中是否包含某个元素的方法

一、思路 1.定义一个toFind变量来传入要查找的元素 2.遍历整个顺序表并判定当前下标的元素等不等于toFind 3.如果等于就返回一个true,否则返回false。 二、图解 首先调用以下的方法求出顺序表的长度,再使用 for 循环遍历每一个元素。 // 求顺序表的长…

《嵌入式系统》知识总结9:使用STM32固件库操纵GPIO

STM32固件库(函数库) “STM32 标准函数库”它是由 ST 公司针对 STM32 提供的函数接口,即 API (Application Program Interface),开发者可调用这些函数接口来配置 STM32的寄存器,使开发人员得以脱离最底层的寄存器操作&…

《阿里大数据之路》研读笔记(1)

首先先看到OLAP和OLTP的区别: OLTP(Online transaction processing):在线/联机事务处理。典型的OLTP类操作都比较简单,主要是对数据库中的数据进行增删改查,操作主体一般是产品的用户或者是操作人员。 OLAP(Online analytical processing):…