对于不想安装windows/linux双系统的朋友来说,WSL2是不错的选择,但在使用过程中可能会遇到一些问题,以下是本人踩过的坑,记录于此:

一、安装前提

1.1 检测windows版本

windows10 版本必须高于 内部版本 19041 ,检测方法 :Ctrl+R,输入winver查看版本(参考下图),如果版本太低,建议先windows update升级到最新

1.2 启用windows相关功能

二、安装ubuntu

进入windows应用商店 ,搜索ubuntu,参考下图,一般选LTS的最新版本即可

,

安装过程中如果下载速度慢,可以打开“传递优化”,允许从其它电脑下载 ,类似于开启了P2P下载

安装完后,一定要检查下WSL安装的虚拟机(注:严格讲称为子系统更适合,但“虚拟机”叫习惯了,以下都用虚拟机这个叫法)版本是否为WSL 2

如果仍然是1,最简单的办法是删除掉,重新安装(删除方法参考下图)

对于先前已经安装了WSL 1的虚拟机,如果虚拟机里有重要文件,也可以用命令行手动将1升级为2,参考命令为

wsl --set-version Ubuntu-22.04 2

其中Ubuntu-22.04即为wsl -l -v中看到的虚拟机的名称,大家根据实际情况替换

三、填坑之旅

3.1 磁盘空间问题

默认是安装在C盘的,随着虚拟机里软件越装越多,很快C盘的空间就吃紧了,而且比较坑的是,就算在虚拟机里把文件给删除了,空间也不会被释放。

解决方案:

  • 先找到Ubuntu虚拟机磁盘文件的路径,建议安装search everything,搜索ext4.vhdx

默认位置类似:C:\Users\Administrator\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx

  • powershell下输入
# 先关闭所有虚拟机
wsl --shutdown # 进入磁盘管理
diskpart # 选择虚拟磁盘文件
select vdisk file="刚才search everything里找到的ext4.vhdx文件路径" # 压缩文件
compact vdisk # 压缩完成后卸载磁盘
detach vdisk

 

3.2 迁移到其它盘

压缩完后,用着用着,文件还是会继续变大,最好是迁移到其它盘

# 先关闭
wsl --shutdown # 导出Ubuntu-22.04文件(注:这里的Ubuntu-22.04即wsl -l -v中看到的虚拟机名称)
wsl --export Ubuntu-22.04 e:\WSL2Ubuntu22.04.bak # 注销原来的虚拟机
wsl --unregister Ubuntu-22.04 # 重新导入(注:e:\wsl目录要存在)
wsl --import Ubuntu-22.04 e:\wsl e:\WSL2Ubuntu22.04.bak --version 2 #设置启动的默认用户(注:这里的XXX即为默认用户名,如果这一步不做,每次都是以root身份启动)
ubuntu2204 config --default-user XXX

重新启动就好了

3.3 windows与ubuntu之间复制文件的坑

WSL2安装完以后,windows主系统中,资源管理器里能看到ubuntu中的文件夹,这可太方便了

powershell命令行中也能直接访问

尝试着把windows主系统中的1个大文件(超过1G),复制到ubuntu中试了下,却发现慢到怀疑人生,比直接从网上下载都慢。

正确姿势:

如果ubuntu中要访问windows主系统中的文件,不用复制1份,直接用 "/mnt/盘符",就能访问

如果嫌windows中的路径太长,可以在ubuntu中创建1个链接

ln -s /mnt/e/document/  /home/jimmy/document

这样就把windows主系统e盘的document目录,映射到/home/jimmy/document下了

3.4 内存大小设置

WSL2里跑一些大模型时,会使用较多内存,默认情况下WSL2虚拟机,只分配windows 50%或8G内存(二者中取最小值)

可以 在windows主系统的%userProfile% 目录下,创建1个名为.wslconfig的文件

文件内容如下:

[wsl2]
processsors=4
memory=20GB
swap=4GB

保存后,wsl --shutdown 关闭,等8秒,然后再重新启动ubuntu,验证是否生效

3.5 nvidia驱动与cuda问题

  • 如果windows主系统中已安装了nvidia驱动,ubuntu中不要再额外安装了
  • 也无需按微软官方文档中的建议安装nvidia-docker

可以直接在ubuntu中输入nvidia-smi 验证是否能检测到nvidia驱动

可能有同学会疑惑,我都没在ubuntu里安装nvidia驱动,怎么能找到nvidia-smi这个命令?其实我当初也有这个疑问,后来 echo $PATH看了下

好家伙,原来WSL2 里的ubuntu,最终PATH搜索路径,是把windows主系统的PATH + 虚拟机自身的PATH 合并处理了,怪不得象vscode这些命令,ubuntu里没安装,也能直接使用。

虽然nvidia 驱动,WSL2能自动识别了,但是CUDA却不行,现在主流的AI框架(包括大模型),都依赖它,先到 CUDA官网下载WSL专用的安装文件:

sudo一路安装即可,安装完成后,最好调整下环境变量 (修改~/.bashrc)

export PATH=/usr/local/cuda-12.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:/usr/lib/wsl/lib
export CUDA_HOME=/usr/local/cuda-12.2

验证一把:

最后,跑下ChatGLM2-6B看看:

左侧是windows里的nvitop实时监控,右侧是ubuntu里的ChatGLM2-6B-int4推理,从监控上看GPU确实起作用了(RTX 4060 8G的显存,占用了5G多)

如果在WSL2 Ubuntu里运行nvitop,可更精确的定位到使用GPU的进程

参考文章:

解决删除文件后 WSL2 磁盘空间不释放的问题

拯救被WSL占满的C盘

WSL 中的高级设置配置 | Microsoft Learn

WSL_03 WSL2 从C盘迁移到D盘_wsl迁移到d盘

windows WSL2避坑指南的更多相关文章

  1. electron 编译 sqlite3避坑指南---尾部链接有已经编译成功的sqlite3

    electron 编译 sqlite3避坑指南(尾部链接有已经编译成功的sqlite3) sqlite很好用,不需要安装,使用electron开发桌面程序,sqlite自然是存储数据的不二之选,奈何编 ...

  2. CEF避坑指南(一)——下载并编译第一个示例

    CEF即Chromium Embedded Framework,Chrome浏览器嵌入式框架.它提供了接口供程序员们把Chrome放到自己的程序中.许多大型公司,如网易.腾讯都开始使用CEF进行前端开 ...

  3. Harmony OS 开发避坑指南——源码下载和编译

    Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...

  4. Canal v1.1.4版本避坑指南

    前提 在忍耐了很久之后,忍不住爆发了,在掘金发了条沸点(下班时发的): 这是一个令人悲伤的故事,这条情感爆发的沸点好像被屏蔽了,另外小水渠(Canal意为水道.管道)上线一段时间,不出坑的时候风平浪静 ...

  5. Linux下Python3.6的安装及避坑指南

    Python3的安装 1.安装依赖环境 Python3在安装的过程中可能会用到各种依赖库,所以在正式安装Python3之前,需要将这些依赖库先行安装好. yum -y install zlib-dev ...

  6. Hive改表结构的两个坑|避坑指南

    Hive在大数据中可能是数据工程师使用的最多的组件,常见的数据仓库一般都是基于Hive搭建的,在使用Hive时候,遇到了两个奇怪的现象,今天给大家聊一下,以后遇到此类问题知道如何避坑! 坑一:改变字段 ...

  7. 今天 1024,为了不 996,Lombok 用起来以及避坑指南

    Lombok简介.使用.工作原理.优缺点 Lombok 项目是一个 Java 库,它会自动插入编辑器和构建工具中,Lombok 提供了一组有用的注解,用来消除 Java 类中的大量样板代码. 目录 L ...

  8. Android连接远程数据库的避坑指南

    Android连接远程数据库的避坑指南 今天用Android Studio连接数据库时候,写了个测试连接的按钮,然后连接的时候报错了,报错信息: 2021-09-07 22:45:20.433 705 ...

  9. .NET AsyncLocal 避坑指南

    目录 AsyncLocal 用法简介 AsyncLocal 实现原理 AsyncLocal 的坑 AsyncLocal 的避坑指南 HttpContextAccessor 的实现原理 AsyncLoc ...

  10. Windows环境下Anaconda安装TensorFlow的避坑指南

    最近群里聊天时经常会提到DL的东西,也有群友在学习mxnet,但听说坑比较多.为了赶上潮流顺便避坑,我果断选择了TensorFlow,然而谁知一上来就掉坑里了…… 我根据网上的安装教程,默认安装了最新 ...

随机推荐

  1. 基于Python和uiautomation的Windows桌面自动化操作方案

    基于Python和uiautomation的Windows桌面自动化操作方案 在日常开发和测试过程中,我们经常需要对Windows桌面应用程序进行自动化操作.本文将记录如何使用uiautomation ...

  2. 🧠 30 个 MCP 项目创意(附完整源码)

    MCP(Model Context Protocol)是一种新兴的开放协议,旨在标准化应用程序如何向大型语言模型(LLMs)提供上下文和工具.它允许 AI 代理与实际工具和应用程序交互,从而实现复杂的 ...

  3. Java基础之“Double类型,保留两位小数,避免因小数过长导致乱码问题”

    保留两位小数 方案一 Double totalSaleAmount = 4.174558045899999E7; DecimalFormat df = new DecimalFormat(" ...

  4. JS函数调用的5种模式

    函数是经常会用的工具, 这里总结一下关于在 js 中的 5种函数调用的模式如下: <!DOCTYPE html> <html lang="en"> < ...

  5. Vue3 学习-初识体验-helloworld

    在数据分析中有一个最重要的一环就是数据可视化, 数据报表的开发. 从我从业这几年的经历上看, 经历了从业务系统导表格数据, 到Excel+PPT, 再是开源报表工具, 再是主流商业BI产品(低/零代码 ...

  6. bool型返回值函数,没写return语句的时候返回啥?

    转载:bool型返回值函数,没写return语句的时候返回啥? 因为漏写了一个return语句,g++又没开warning,结果就悲剧了,调用的时候出现了奇怪的现象,于是就测试了一把到底没写retur ...

  7. Django踩坑之在Django中创建项目时ImportError: No module named django.core

    不使用django-admin.py,而是使用django-admin.exe 具体操作如下 django-admin.exe startproject learning_log . ok,没有提示错 ...

  8. The Eclipse executable launcher was unable to locate its companion shared library

    win10,笔者是安装eclipse2018.03的情况下,想安装java2019EE遇到的路径问题 1.解决方法 找到配置文件 打开,用记事本打开的话会糊成一行,建议用其他方式打开,例如笔者所用的N ...

  9. c++复习板子

    数论 GCD 点击查看 B4025 最大公约数 gcd: 点击查看代码 #include<bits/stdc++.h> #define int long long using namesp ...

  10. Web前端入门第 61 问:JavaScript 各种对象定义与对象取值方法

    曾经有人说 JS 语言中万物皆对象,虽然这种说法不一定完全准确,但也有一定的道理.原因是 JS 的语法看起来所有的数据类型都像是一个对象,包括原始类型. const a = 1.234; consol ...