在WSL2下配置Pytorch(Linux+Anaconda+PyTorch-GPU)

news2024/12/25 2:14:17

之前使用过双系统、虚拟机的ubunutu
效果都不是很好,要么切换系统太麻烦,要么太卡顿 
最近在尝试WSL子系统,没有想到还是有很多坑
记录一下配置的过程

一、NVIDIA显卡的安装
因为WSL和Windows的显卡驱动不能互通,所以在子系统上需要重新下载驱动
先查看Windows的显卡配置,在Windows终端中的指令为:

nvidia-smi

根据这个去NVIDIA官网下载对应的驱动Official Drivers | NVIDIA
更具体的操作参考Linux安装显卡驱动、annaconda和CUDA(超详细)-CSDN博客

二、Pytorch的下载
2.1 下载Anaconda3
一般采用wget方式直接从linux拉取较稳定的旧版本,然后在本地安装,替换指令中的版本号即可

wget https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh
bash Anaconda3-5.2.0-Linux-x86_64.sh

2.2 构建虚拟环境
需要对照pytorch\python的版本对应关系,确定兼容性比较强的Python版本,一般3.8、3.9最常用

conda create -n py_gpu python=3.8.5

2.3 下载pytorch
最方便的方法就是通过官网的指令下载,一般推荐使用conda下载,根据自己的系统、CUDA版本生成指令,官网链接Start Locally | PyTorch
默认的官网下载源会比较慢,两步加速:


#1.取消默认官网下载
在生成的下载指令中删除"-c pytorch"

#2.添加国内镜像源
config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

全部下载完成以后,进入虚拟环境测试:

conda activate py_gpu

#看一下pytorch能不能用
#注意测试指令中都用的是"torch"

python
import torch
#不报错说明torch安装成功

torch.cuda.is_available()

#返回 TRUE
#说明gpu版本的pytorch可以正常使用

PS.这个过程中一定要注意环境的归属
1.用户:以前没有注意过,默认用户root,还有一个自己取名的用户,可以配置默认打开的用户,要注意anaconda环境配置在哪个用户下,我就是在这里卡了很久,明明安装了anaconda居然找不到。如果使用的不是root用户,可能会出现修改了代码无法保存的情况,需要给对应的工作目录添加用户权限:

sudo chown -R username /path/to/working/directory

2.虚拟环境:anaconda安装好以后会在用户前面显示,一定要注意隔离环境,在具体的虚拟环境下配置pytorch,查看所有虚拟环境指令如下:

conda env list

三、在WSL中打开VScode运行代码
VScode仅需要安装在Windows系统下,安装微软官方推荐的Remote-Development插件就能直接在Windows系统下使用Linux内核运行程序
直接在WSL的终端下输入\displaystyle

code .

如果打不开,检查一下路径

sudo vim ~/.bashrc

在.bashrc文件最后看一下路径,需要添加:

#根据VScode在本地的下载路径,'mnt'这里是wsl在windows系统下的挂载目录
export PATH="$PATH:/mnt/d/Microsoft\\ VS\\ Code/Code.exe"
alias code='/mnt/d/Microsoft\ VS\ Code/bin/Code'
|
#如果anaconda安装了找不到,也有可能是路径问题,根据具体的路径修改
export PATH=/home/u/anaconda3/bin/:$PATH

#修改了配置要重启文件
source ~/.bashrc

修改文件代码yi'ho

最后调整一下解释器,选择虚拟环境下的python,然后打开终端确认一下环境:

完美解决!撒花!

四、补充WSL可视化桌面端配置

因为WSL默认安装的是终端,需要自己配置桌面,尝试了几种方法以后,终于使用xfce4可以看到可视化桌面了
具体步骤参考WSL2+Ubuntu22.04+图形化界面安装 - 哔哩哔哩
关键的启动代码如下:

#在 Ubuntu 终端中设置 DISPLAY 环境变量:
export DISPLAY=$(awk '/nameserver / {print$2; exit}' /etc/resolv.conf 2>/dev/null):0

#使用sudo 启动 Xfce 会话:
sudo startxfce4 

但是仍然有点问题,发现xfce4一段时间没有任何操作以后会卡死,参考WSL2 Ubuntu + Xfce4 一段时间 Xfce4 卡死不动_ubuntu无法启动xfce4-CSDN博客
通过卸载锁屏应用解决问题
 

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

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

相关文章

Redis的缓存击穿、缓存穿透和缓存雪崩是什么?怎么预防?

Redis的缓存击穿、缓存穿透和缓存雪崩是什么?怎么预防? 前言缓存击穿定义解决思路实现加锁设置过期时间Lua脚本刷新锁 缓存穿透定义实现 缓存雪崩定义解决思路 总结 前言 最近在CSDN上看到了一篇博客,Redis缓存击穿、雪崩、穿透!…

双列集合 HashMap以及TreeMap底层原理

双列集合 特点: 双列集合一次需要存一对数据,分别为键和值 键不能重复,值可以重复 键和值是一一对应的,每个键只能找到自己对应的值 键和值这个整体在Java中叫做“Entry对象” Map的常见API Map是双列集合的顶层接口,…

第十一篇——信息增量:信息压缩中的保守主义原则

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 通过信息中的保守主义,我想到了现实中人的保守主义一样&#…

JavaScript前端技术入门教程

引言 在前端开发的广阔天地中,JavaScript无疑是最耀眼的一颗明星。它赋予了网页动态交互的能力,让网页从静态的文本和图片展示,进化为可以与用户进行实时交互的丰富应用。本文将带您走进JavaScript的世界,为您提供一个入门级的教…

文件操作(Python和C++版)

一、C版 程序运行时产生的数据都属于临时数据&#xff0c;程序—旦运行结束都会被释放通过文件可以将数据持久化 C中对文件操作需要包含头文件< fstream > 文件类型分为两种: 1. 文本文件 - 文件以文本的ASCII码形式存储在计算机中 2. 二进制文件- 文件以文本的二进…

【InternLM实战营第二期笔记】06:Lagent AgentLego 智能体应用搭建

文章目录 讲解为什么要有智能体什么是 Agent智能体的组成智能体框架AutoGPTReWooReAct Lagent & Agent LegoAgentLego 实操Lagent Web Demo自定义工具 AgentLego&#xff1a;组装智能体“乐高”直接使用作为智能体&#xff0c;WebUI文生图测试 Agent 工具能力微调 讲解 为…

DDMA信号处理以及数据处理的流程---原始数据生成

Hello&#xff0c;大家好&#xff0c;我是Xiaojie&#xff0c;好久不见&#xff0c;欢迎大家能够和Xiaojie一起学习毫米波雷达知识&#xff0c;Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程&#xff0c;本系列文章将从目标生成、信号仿真、测距、测速、cfar…

【VUE3 element时间选择器默认选择七天】

VUE3 element时间选择器默认选择七天 <el-date-pickerv-model"form.timeRange"type"datetimerange"start-placeholder"开始时间"end-placeholder"结束时间"format"YYYY-MM-DD HH:mm:ss"date-format"YYYY/MM/DD dd…

vivado HW_ILA_DATA、HW_PROBE

HW_ILA_DATA 描述 硬件ILA数据对象是ILA调试核心上捕获的数据的存储库 编程到当前硬件设备上。upload_hw_ila_data命令 在从ila调试移动捕获的数据的过程中创建hw_ila_data对象 核心&#xff0c;hw_ila&#xff0c;在物理FPGA上&#xff0c;hw_device。 read_hw_ila_data命令还…

定个小目标之刷LeetCode热题(12)

这是一道简单题&#xff0c;使用位运算中的异或运算即可&#xff0c;异或运算有以下性质&#xff1a; 1、任何数异或 0 结果仍然是原来的数&#xff0c;即 a⊕0a 2、任何数和其自身做异或运算&#xff0c;结果是 0 所以我们只需要让数组里的所有元素进行异或运算得到的结果就…

深入解析ETL与ELT架构:数据集成技术的演进与发展

摘要&#xff1a;随着大数据时代的到来&#xff0c;数据集成成为企业信息化建设的重要环节。本文将深入探讨ETL与ELT两种架构&#xff0c;分析它们在数据处理、性能、可扩展性等方面的差异&#xff0c;为企业数据集成提供技术指导。 一、引言 在大数据时代&#xff0c;企业需要…

【Vue】获取模块内的state数据

目标&#xff1a; 掌握模块中 state 的访问语法 尽管已经分模块了&#xff0c;但其实子模块的状态&#xff0c;还是会挂到根级别的 state 中&#xff0c;属性名就是模块名 使用模块中的数据 直接通过模块名访问 $store.state.模块名.xxx 通过 mapState 映射&#xff1a; 默认…

Java网络通信实现

UDP UDPServer import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket;public class UDPServer {public static void main(String[] args) throws IOException {System.out.println("UdpServer启动");// 创建upd套接字Data…

PE文件(七)扩大节合并节数据目录

添加shellcode有以下几种的方式&#xff1a; 1.直接在任意节的空白区添加代码 2.新增节添加代码 3.扩大最后一个节添加代码 4.合并节并添加代码 今天我们学习如何扩大节&#xff0c;合并节 扩大节 在上一节的学习中&#xff0c;我们可以通过上移NT头和节表覆盖DOS Stub以…

VBA即用型代码手册:删除重复行Delete Duplicate Rows

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

【python】python化妆品销售logistic逻辑回归预测分析可视化(源码+课程论文+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

基于51单片机的车辆动态称重系统设计

一 动态称重 所谓动态称重是指通过分析和测量车胎运动中的力,来计算该运动车辆的总重量、轴重、轮重和部分重量数据的过程。动态称重系统按经过车辆行驶的速度划分,可分为低速动态称重系统与高速动态称重系统。因为我国高速公路的限速最高是120,所以高速动态称重系统在理论…

按键精灵在Win11中弹窗出现乱码并且自带的部分系统插件不能使用的解决方法

按键精灵中出现以下问题&#xff1a; 提示信息的弹窗出现乱码&#xff1a; 系统自带的部分像 plugin. 开头的插件不能使用&#xff0c;如下&#xff1a;s Plugin.Sys.GetDateTime() screenX Plugin.GetSysInfo.GetScreenResolutionX screenY Plugin.GetSysInfo.GetScreenRe…

线程知识点总结

Java线程是Java并发编程中的核心概念之一&#xff0c;它允许程序同时执行多个任务。以下是关于Java线程的一些关键知识点总结&#xff1a; 1. 线程的创建与启动 继承Thread类&#xff1a;创建一个新的类继承Thread类&#xff0c;并重写其run()方法。通过创建该类的实例并调用st…

【C语言】插入排序(经典算法,建议收藏!!!)

目录 1、原理2、代码展示3、解析代码4、适用场景 1、原理 插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法&#xff0c;其原理可以简述如下&#xff1a; 1.分已排序区间和未排序区间: 将数组分为已排序区间和未排序区间。初始时&#xff0c;已排序区…