Windows11应用WSL Ubuntu搭建paddle的GPU环境

最近降级到了Windows11,忽然有个大胆的想法:在Windows11上装置WSL,将所有开发环境装置到WSL中。这样就能在windows各种QQ/微信/Steam玩的飞起,又能在Linux中敲代码。

以后工夫:2022-08-13,本文章中所有步骤都是依据官网的装置办法,如果工夫比拟长了,可能须要切换到最新的官网文档。

本文章为装置胜利后的分享,能够释怀参考。

paddle的坑

  1. 目前不兼容ubuntu22.04,查资料说是paddle不反对高版本gcc
  2. 间接运行paddle提供的docker镜像是可行,然而docker内的python版本过低(python3.7),导致matplotlib无奈装置,如果不须要个别依赖包能够不必折腾
  3. 吐槽下,ubuntu22.04都公布半年了,还做不到兼容,天天吹流弊有个锤子用

版本/型号

我的项目型号
以后工夫2022-08-13
CPUIntel i7-11700
显卡GTX 1050 Ti
Windows 11 64位专业版 21H2
WSL25.10.102.1
Ubuntu22.04
CUDA11.7
cuDNN8.5.0.*

疑难

在实现装置前,本人对WSL也有疑难的中央,可能大家也有相似的疑难,所以列举进去。

  • 疑难1:WSL就是指Windows中运行的Linux零碎吗?

    • WSL是个工具,用于运行/管理子系统(如:Ubuntu/Centos)
    • (为了不便表述,上面用ubuntu指代其中一个子系统)
  • 疑难2:WSL吃资源吗?

    • WSL工具自身不吃资源,然而运行子系统须要吃资源,毕竟多跑了个零碎
  • 疑难3:WSL装置后始终在后盾运行吃资源吗?

    • WSL是个工具,且子系统不会自启动(默认状况),还能够手动。即不应用的时候不吃资源
  • 疑难4:docker要Windows中装置,还是要在ubuntu中装置?

    • 在Windows中装置Docker Desktop相当于在WSL下又装置了一个跑docker的子系统
    • 在Ubuntu中装置依照docker服务器装置的步骤装置即可
    • 举荐在ubuntu中装置,更加节俭内存
    • 以下数据是在"工作管理器"中的"性能"页面察看失去,数据并不谨严,不排除期间开了其他软件等影响,但内存使用量迥异不影响后果判断:

      • 未关上所有子系统,内存应用:4.5G
      • 关上ubuntu20,内存应用:5.8G
      • 关上Ubuntu20内的docker,内存应用:6.1G
      • 关上ubuntu20,docker子系统(装置在windows上),内存应用:10.7G
      • 起因:装置在windows上的docker须要一个子系统来跑dockers服务,而在ubuntu中装置只是多运行了一个服务,节俭了零碎运行环境须要的资源
  • 疑难5:在windows中装置了驱动,ubuntu中还须要装置显卡驱动/CUDA/cuDNN吗?

    • ubuntu中不须要再装置显卡驱动,然而须要装置CUDA/cuDNN
  • 总结

    • WSL是个子系统管理工具(能够类比为docker运行时)
    • 从WSL或微软商店装置的Ubuntu/Centos才是真正的子系统(能够类比为docker的容器)
    • Docker最好装置在子系统中(节俭内存)

步骤

Windows11装置WSL

官网-装置WSL
官网-WSL根本命令
  1. 关上"Windows性能",将"Hyper-V"/"实用于Linux的Windows子系统"/"虚构平台"都勾选上,重启
  2. windows零碎就主动装置了wsl工具
  3. 在微软商店搜寻"Ubuntu",间接点击装置期待实现(这里抉择ubuntu20.04,因为paddle不兼容ubuntu22,因为)
  4. 关上"ubuntu20.04",如果如下报错
Installing, this may take a few minutes...WslRegisterDistribution failed with error: 0x800701bcError: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernelPress any key to continue...
  1. 请更新下WSL内核并重启即可
wsl --update

配置ubuntu20.04的环境

官网-装置Docker Engine on Ubuntu
  1. 进入ubuntu外部
  2. 装置miniconda当作python管理工具
  3. 更换"ubuntu"/"conda"/"pypi"国内镜像源
  4. 装置Dockers,留神是装置Dockers Engine,而不是Docker Desktop

驱动/CUDA/cuDNN关系

显卡、显卡驱动、cuda 之间的关系是什么? - 智星云服务的答复 - 知乎
应用层到硬件的分层构造
TensorRT for Inference: Paddle
GPU Accelerated SDKcuDNN
CUDA ToolKits
GPU Driver
OS
GPU Computing Servers

装置CUDA

官网-装置cuda命令
  1. 提前装置好miniconda(装置命令会主动配置conda环境)
  2. 关上下面的地址,拜访比较慢,刷不进去多试几次,环境不同装置的命令也不同,抉择好参数后会有装置命令,照抄命令就能够了
  3. 有些文章说装置cuda后要改环境变量,我提前装好了miniconda,所以装置好主动配置了,不须要改,关上"~/.bashrc"最下方能够看到配置的内容
  4. 上面以我抉择的参数"Linux"/"x86_64"/"Ubuntu"/"20.04"/"deb(network)",生成的代码如下:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.debsudo dpkg -i cuda-keyring_1.0-1_all.debsudo apt-get updatesudo apt-get -y install cuda
  • 在执行最初一个命令时,我遇到了个报错,依据提醒在命令前方加上"--fix-missing"即可,大家装置的时候留神察看装置过程中是否有报错

主动增加的环境变量如下,自己的登录用户名为"x",所以每个人装置的门路都有区别

# >>> conda initialize >>># !! Contents within this block are managed by 'conda init' !!__conda_setup="$('/home/x/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"if [ $? -eq 0 ]; then    eval "$__conda_setup"else    if [ -f "/home/x/miniconda3/etc/profile.d/conda.sh" ]; then        . "/home/x/miniconda3/etc/profile.d/conda.sh"    else        export PATH="/home/x/miniconda3/bin:$PATH"    fifiunset __conda_setup# <<< conda initialize <<<

装置cuDNN

官网-装置cuDNN
  1. 留神看外面的目录,自行抉择对应的零碎和装置形式
  2. 我抉择的是ubuntu的网络装置,执行的代码如下:
# 因为文档中的地址应用了变量,用export形式赋值export OS=ubuntu2004export cudnn_version=8.5.0.*export cuda_version=cuda11.7# 装置wget https://developer.download.nvidia.com/compute/cuda/repos/${OS}/x86_64/cuda-${OS}.pin sudo mv cuda-${OS}.pin /etc/apt/preferences.d/cuda-repository-pin-600sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/${OS}/x86_64/3bf863cc.pubsudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/${OS}/x86_64/ /"sudo apt-get updatesudo apt-get install libcudnn8=${cudnn_version}-1+${cuda_version}sudo apt-get install libcudnn8-dev=${cudnn_version}-1+${cuda_version}

实现

下面实现了所有配置,测试下是否胜利

  1. 进入ubuntu
  2. 进入conda环境
  3. 关上python命令行

    import paddlepaddle.utils.run_check()

其余

  • ubuntu中能够间接拜访windows中的文件,挂载在"/mnt"目录下
  • WSL搭配vscode应用十分顺滑,能够参考VsCode轻松应用docker容器 视频,将"Remote SSH"插件改为"Remote WSL"即可,操作大同小异